0

我目前正在使用 SliverAppBar,并且在滚动 sliverList 时遇到问题。

在此处输入图像描述

在上图中,我的 TabBar 一直到通知栏。当 sliverAppBar 崩溃时,我希望我的 Tabbar 贴在 AppBar 的底部。

这是我正在尝试的代码...

    return Scaffold(
  body: CustomScrollView(

    slivers: <Widget>[
      SliverAppBar(
        //backgroundColor: Colors.transparent,
        actions: <Widget>[
          IconButton(icon: Icon(Icons.favorite), onPressed: () {}),
          IconButton(icon: Icon(Icons.share), onPressed: () {})
        ],
        floating: false,
        pinned: true,
        expandedHeight: getHeight(context),
        flexibleSpace: FlexibleSpaceBar(
          title: Text("text"),
          background: Container(
            height: double.infinity,
            width: double.infinity,
            decoration: BoxDecoration(
                image: DecorationImage(
                    image: AssetImage(currentImage),
                    fit: BoxFit.cover)),
          ),
        ),
      ),
      SliverList(
        delegate: SliverChildListDelegate(bottomListView),
      ),
    ],
  )
  ,
);
4

2 回答 2

1

只需使用SliverAppBar的底部参数并将TabBar传递给它。在FlexibleSpaceBar添加titlePadding以从 TabBar 添加填充。如果您需要更改 TabBar 颜色,可以查看此问题

注意 FlexibleSpaceBar 中的标题和 AppBar 中的操作图标,因为长标题会导致最小化的 appbar 重叠。

    child: CustomScrollView(
      slivers: <Widget>[
        SliverAppBar(
          //backgroundColor: Colors.transparent,
          actions: <Widget>[
            IconButton(icon: Icon(Icons.favorite), onPressed: () {}),
            IconButton(icon: Icon(Icons.share), onPressed: () {})
          ],
          floating: false,
          pinned: true,
          expandedHeight: getHeight(context),
          flexibleSpace: FlexibleSpaceBar(
            title: Text("text"),
            // Adding padding from TabBar
            titlePadding: EdgeInsets.only(bottom: 64, left: 60),
            background: Container(
              height: double.infinity,
              width: double.infinity,
              decoration: BoxDecoration(
                  image: DecorationImage(
                      image: AssetImage(currentImage),
                      fit: BoxFit.cover)),
            ),
          ),
          // Adding TabBar to the bottom of SliverAppBar
          bottom: TabBar(
            tabs: [
              for (var i = 0; i < 3; i++)
                Tab(
                  text: 'test $i',
                ),
            ]
          ),
        ),
        SliverList(
          delegate: SliverChildListDelegate(bottomListView),
        ),
      ],
    ),
于 2019-11-20T15:32:09.313 回答
0

它可能是一个错误:</p>

https://github.com/flutter/flutter/issues/22393

所以你可以使用这个,它解决了这个问题。

于 2019-11-20T12:45:15.780 回答