Мне нужно сделать спрятанную sliverappbar с вкладками - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать скрытую панель слайдов с вкладками. Он должен скрываться, когда я начинаю прокручивать вниз, и показывать, когда я начинаю прокручивать вверх. Прямо сейчас панель приложений скрывается при прокрутке вниз, но не отображается в начале прокрутки вверх, а отображается в конце прокрутки. Также мне нужно сохранить положение страницы в виде вкладок, но когда я пытаюсь это сделать, панель приложений больше не скрывается.

class ConferentionsPage extends StatefulWidget{

  final void Function() openMenu;

  ConferentionsPage({Key key, this.openMenu}): super(key: key);
  @override
  State<StatefulWidget> createState() => ConferentionsPageState();

}

class ConferentionsPageState extends State<ConferentionsPage>
with SingleTickerProviderStateMixin {

  TabController _tabController;
  ScrollController _scrollController;
  double listViewOffset = 0.0;

  _buildSliverAppBar(BuildContext context, bool innerIsScrolled){
    return SliverAppBar(
        leading:  IconButton(
            icon: Image.asset('assets/icons/menu.png', width: 24, height: 24,),
            onPressed: widget.openMenu
        ),
        title: Text(CONFERENTIONS_TITLE),
        centerTitle: true,
        elevation: .6,
        actions: <Widget>[
          IconButton(
            icon: Image.asset('assets/icons/user.png', width: 24.0, height: 24.0,),
            onPressed: (){

            },
          )
        ],
        pinned: true,
        floating: true,
        snap: true,
        forceElevated: innerIsScrolled,
        bottom: TabBar(
          controller: _tabController,
          tabs: <Widget>[
            Tab(text: 'Прошедшие',),
            Tab(text: 'Ближайшие',)
          ],
        ),
      );
  }

  @override
  void initState() {
    super.initState();
    _tabController = TabController(length: 2, vsync: this);
    _scrollController = ScrollController(initialScrollOffset: 0, keepScrollOffset: true);
  }

  @override
  Widget build(BuildContext context) {
    return NestedScrollView(
      controller: _scrollController,
      headerSliverBuilder: (BuildContext context, bool innerIsScrolled){
        return <Widget>[
          _buildSliverAppBar(context, innerIsScrolled)
        ];
      },
      body: TabBarView(
        controller: _tabController,
        children: <Widget>[
          Tab1(),
          Tab1()
        ],
      ),
    );
  }

}
...