Flutter:如何设置 SliverAppBar 默认折叠

标签 flutter flutter-layout flutter-sliver

我是使用 flutter 的新手,当我编写我的应用程序时,我遇到了一个问题,即如何默认设置 SliverAppBar 折叠状态。为了解决我的困惑,我查看了 flutter 的文档,不幸的是我找不到解决方案,所以我来了。

下面是我的代码,如果你知道如何解决它,请帮助我。谢谢大家。

class CollapsingBarLayoutState extends State<CollapsingBarLayout>
    with TickerProviderStateMixin {
  final List<ListItem> listData = [];

  @override
  Widget build(BuildContext context) {
    for (int i = 0; i < 20; i++) {
      listData.add(new ListItem("$i", Icons.cake));
    }
    return Scaffold(
      body: NestedScrollView(
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              expandedHeight: 200.0,
              pinned: true,
              centerTitle: false,
              snap: true,
              floating: true,
              titleSpacing: 0,
              backgroundColor: Colors.green,
              flexibleSpace: FlexibleSpaceBar(
                  centerTitle: true,
                  title: Center(
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: _buildBriefCalendarChildren(),
                    ),
                  ),
                  background: GridPage(
                    children: _buildCalendarPageChildren(),
                    column: 7,
                    row: 5,
                  )),
            ),
          ];
        },
        body: Center(
          child: new ListView.builder(
            itemBuilder: (BuildContext context, int index) {
              return new ListItemWidget(listData[index]);
            },
            itemCount: listData.length,
          ),
        ),
      ),
    );
  }
}

最佳答案

有个不错的插件https://pub.dev/packages/after_layout我在这样的情况下使用过。 只需添加一个 mixin,然后您需要实现的唯一方法将如下所示:

  void afterFirstLayout(BuildContext context) {
    _scrollController //scroll controller of your list view under sliver
        .animateTo((expandedHeight) - collapsedHeight,
        duration: new Duration(milliseconds: 1),//0 dont work as duration
        curve: Curves.linear)
        .then((_) {
      setState(() {
        expandedPercentage = 0; //just my custom tracking of expansion percentage
      });
    });
  }

编辑 - 更好的解决方案: 初始化一个 new ScrollController(initialScrollOffset: expandedHeight - collapsedHeight); 并将其作为 controller 传递给您的 NestedScrollView

关于Flutter:如何设置 SliverAppBar 默认折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56635214/

相关文章:

Flutter - 如何将收据打印到蓝牙打印机?

dart - flutter : Bad state: Stream has already been listened to

flutter - 是否有适用于 Flutter 应用的 AdMob 或其他广告服务 SDK

Flutter ScrollController maxScrollExtent 等于 0.0

flutter - 在 flutter 自定义 ScrollView 中构建两个不同的列表

Firebase firestore 未经身份验证获取用户文档

flutter - 如何在 flutter 中创建一侧倾斜容器

android - 有没有办法在 flutter charts_flutter : ^0. 8.1 中垂直放置标签文本

flutter - 收缩 SliverAppBar 图像动画就像 Flutter 中的标题文本

Flutter 如何使AppBar条子标题垂直居中?