【问题标题】:Flutter: disable sliverAppBar padding animationFlutter:禁用 sliverAppBar 填充动画
【发布时间】:2020-02-11 21:29:04
【问题描述】:

我想将自定义菜单栏(全宽)附加到 sliverAppBar 小部件,以便它会粘在 sliverAppBar 背景的底部并且始终可见。

为了解决这个问题,我将Row 小部件放入FlexibleSpaceBar.title 参数中,但现在我遇到了一个意想不到的问题。

当我将 FlexibleSpaceBar.title 参数中的任何内容包装到 Row 小部件中时,它开始为溢出的填充设置动画。它还将Row 小部件扩展到屏幕边界之外。这是出乎意料的行为。

我不想在 SliverList 滚动上缩小标题填充或调整标题大小。

SliverAppBar(
  expandedHeight: 200.0,
  floating: false,
  pinned: true,
  elevation: 0.0,
  flexibleSpace: SafeArea(child: // <-- SafeArea doesn't work for FlexibleSpaceBar.title in this case
    FlexibleSpaceBar(
      background: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Image.asset(
            'assets/images/store.png',
            fit: BoxFit.cover,
            width: 120,
            height: 120,
          ),
        ],
      ),
      collapseMode: CollapseMode.none,
      titlePadding: EdgeInsetsDirectional.only(start: 100, bottom: 0), // <-- have to add 100 to padding to keep in safe area on the screen
      title: Row( // <-- animation enables by default if wrapped in a Row widget
        children: [
          Icon(Icons.menu, size: 40, color: Colors.white,),
        ]
      )
    )
  )
),

如何在 sliverAppBar 中为 FlexibleSpaceBar 标题禁用此收缩、大小和动画?

【问题讨论】:

    标签: flutter dart flutter-layout


    【解决方案1】:

    我刚刚通过添加一个 sliverAppBar 而不是为此使用 FlexibleSpaceBar.title 解决了这个问题。

    SliverAppBar( // <-- just hiding logo
      expandedHeight: 200.0,
      floating: false,
      pinned: true,
      elevation: 0.0,
      flexibleSpace: SafeArea(child:
        FlexibleSpaceBar(
          background: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Image.asset(
                'assets/images/store.png',
                fit: BoxFit.cover,
                width: 120,
                height: 120,
              ),
            ],
          ),
        )
      )
    ),
    SliverAppBar( // <-- custom sticky menu bar
      floating: false,
      pinned: true,
      elevation: 0.0,
      flexibleSpace: SafeArea(child:
        FlexibleSpaceBar(
          ...
        )
      )
    ),
    

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2023-01-22
      • 2013-03-22
      • 1970-01-01
      相关资源
      最近更新 更多