【问题标题】:Implementing Collapsing Toolbar in Flutter在 Flutter 中实现折叠工具栏
【发布时间】:2019-11-11 04:50:15
【问题描述】:

我正在尝试使用 SliverApp 栏在我的应用程序中实现折叠工具栏,但问题是当 SliverAppBar 折叠时 SliverAppBar 与我的内容重叠,我附上 gif 以加深理解,

绿色背景中的内容在工具栏下,我想避免这种情况,感谢任何线索。

  @override
  Widget build(BuildContext context) {
    // TODO: implement buildr
    var _tabs = {"1", "2", "3"};
    return Scaffold(
      backgroundColor: Colors.white,
      body: NestedScrollView(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              SliverOverlapAbsorber(
                  handle:
                      NestedScrollView.sliverOverlapAbsorberHandleFor(context),
                  child: SliverAppBar(
                    expandedHeight: 250.0,
                    floating: false,
                    pinned: true,
                    flexibleSpace: FlexibleSpaceBar(
                        centerTitle: true,
                        background: Container(
                          decoration: BoxDecoration(
                            shape: BoxShape.rectangle,
                            image: DecorationImage(
                              fit: BoxFit.fill,
                              image: CachedNetworkImageProvider(
                                  newsPost.photos[0].url),
                            ),
                          ),
                        )),
                    forceElevated: innerBoxIsScrolled,
                  ))
            ];
          },
          body: SafeArea(
            top: false,
            bottom: false,
            child: Builder(
              builder: (BuildContext context) {
                return CustomScrollView(
                  slivers: <Widget>[
                    SliverOverlapInjector(
                      handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
                          context),
                    ),
                    SliverPadding(
                      padding: const EdgeInsets.all(8.0),
                      sliver: SliverFillRemaining(child: _getBody()),
                    ),
                  ],
                );
              },
            ),
          )),
    );
  }

【问题讨论】:

  • 你的目标是什么,让文字越过应用栏?

标签: flutter dart android-toolbar flutter-layout flutter-sliver


【解决方案1】:

SliverAppBar 创建一个可以放置在NestedScrollView 中的材料设计应用栏。两者共同帮助我们实现视差滚动。

SafeArea(
      child: Scaffold(
        body: NestedScrollView(
          headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
            return <Widget>[
              SliverAppBar(
                expandedHeight: 240.0,
                floating: false,
                pinned: true,
                flexibleSpace: FlexibleSpaceBar(
                    centerTitle: true,
                    title: Text(
                      "App Bar",
                    ),
                    background: Image.network(
                      "https://images.pexels.com/photos/4148020/pexels-photo-4148020.jpeg",
                      fit: BoxFit.cover,
                    )),
              ),
            ];
          },
          body: Center(
            child: Text("Hello World!!!"),
          ),
        ),
      ),
    );

【讨论】:

    【解决方案2】:

    我认为你应该使用SliverList 而不是SliverFillRemaining

    body: SafeArea(
            top: false,
            bottom: false,
            child: Builder(
              builder: (BuildContext context) {
                return CustomScrollView(
                  shrinkWrap: true,
                  slivers: <Widget>[
                    SliverOverlapInjector(
                      handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
                          context),
                    ),
                    SliverPadding(
                      padding: const EdgeInsets.all(0.0),
                      sliver: SliverList(
                        delegate: SliverChildBuilderDelegate((context, index) {
                          return Text('Lorem ipsum dolor sit');
                        }, childCount: 1),
                      ),
                    ),
                  ],
                );
              },
            ),
          )
    

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多