【问题标题】:How to make TabBarView work within CustomScrollView?如何使 TabBarView 在 CustomScrollView 中工作?
【发布时间】:2021-08-29 05:30:59
【问题描述】:

我有一个底部是 TabBar 的 AppBar,所以我放在 CustomScrollView 上的第一件事就是

  • SliverAppBar

然后我希望主体是 TabBarView,所以我想将 TabBarView 与 SliverToBoxAdapter 放在一起,但是问题出现了,因为 TabBar 的内容是一个覆盖视口剩余部分的网格,如果我将简单地得到错误将它放在具有无限高度限制的 TabBarView 中,因此我决定将第二个条子放在我的 CustomScrollView 上

  • SliverAppBar
  • SliverFillRemaining

它通过将我的 TabBarView 限制为剩余视口的大小来解决上述问题,但是会弹出另一个问题,因为现在我有 2 个不同的可滚动小部件,一个 sliver 一个和一个非 sliver 一个,如果我滚动网格我的(sliver) AppBar 不会做出反应,因为它不是主滚动小部件。

即使滚动的 AppBar 只是 TabBarView 中的一个 GridView,我也希望 (sliver) AppBar 缩小,该怎么做?

【问题讨论】:

    标签: flutter


    【解决方案1】:
    CustomScrollView(
      controller: _scrollViewController,
      slivers: [
        SliverAppBar(
          backgroundColor: Color(0xff191919),
          shadowColor: Color(0xff191919),
          elevation: 10,
          forceElevated: true,
          expandedHeight: 87,
          collapsedHeight: 57,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.vertical(
              bottom: Radius.circular(12),
            ),
          ),
          floating: true,
          pinned: true,
          snap: true,
          stretch: false,
          primary: false,
          automaticallyImplyLeading: false,
          title: Text('Title of Header'),
          bottom: PreferredSize(
            preferredSize: Size.fromHeight(50.0),
            child: TabBar(
              tabs: [
                Tab(
                  text: 'Tab One',
                         
                ),
                Tab(
                  text: 'Tab Two',
                         
                ),
                
              ],
              isScrollable: true,
              indicatorColor: Color(0xffe10d37),
              indicatorSize: TabBarIndicatorSize.tab,
              labelColor: Color(0xfff1f1f1),
              indicatorPadding: EdgeInsets.only(bottom: 3),
              
            ),
          ),
        ),
        SliverFillRemaining(
          child: TabBarView(
            controller: _tabController,
            children: [
              _widgetOne,
              _widgetTwo
            ]
            ),
          ),
        )
      ],
    );
    

    【讨论】:

    • 您在回答问题之前是否进行了测试?它甚至不会在 dartpad 中运行,在我稍微修改之后,问题似乎可能出在 SliverAppBar 中。
    猜你喜欢
    • 2022-01-16
    • 2020-11-27
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2018-12-21
    • 2019-11-14
    • 2022-07-30
    相关资源
    最近更新 更多