【问题标题】:Remove default padding from FlexibleSpace title从 FlexibleSpace 标题中删除默认填充
【发布时间】:2021-03-21 02:26:08
【问题描述】:

代码:

CustomScrollView(
  slivers: <Widget>[
    SliverAppBar(
      expandedHeight: 200.0,
      flexibleSpace: FlexibleSpaceBar(
        title: Container(color: Colors.red, child: Text("Flexible title")),
        background: Image.asset("assets/chocolate.jpg", fit: BoxFit.cover),
      ),
    ),
    SliverList(delegate: SliverChildListDelegate(_buildChildren())),
  ],
);

为什么标题中有默认填充。我使用Container 带来对比度,以便可以轻松看到边距。即使我尝试使用centerTitle: false,它也没有改变任何东西。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    您现在可以像这样使用titlePadding 属性:

          flexibleSpace: FlexibleSpaceBar(
                  title: Text('Home'),
                  titlePadding: EdgeInsetsDirectional.only(
                    start: 0.0,
                    bottom: 16.0,
                  ),
                ),
    

    【讨论】:

      【解决方案2】:

      _FlexibleSpaceBarState 方法中build

      Container(
            padding: EdgeInsetsDirectional.only(
              start: effectiveCenterTitle ? 0.0 : 72.0,
              bottom: 16.0
            )
      

      因此,除了自定义之外,没有其他方法可以删除此底部填充

      为了测试,我将源代码中的一个字符串更改为bottom: 0.0,这个填充消失了。

      【讨论】:

      • 感谢您的回答,但这是在玩不属于您项目的文件。我知道我也可以编辑这个文件,但我希望有一个更好的解决方案可以在我的代码端实现。所以,我不会接受这个答案,但我肯定会给 +1。
      • 另一种方法是构建您的自定义 FlexibleSpaceBar
      • 是的,我知道,总有一种方法可以通过扩展类并覆盖您关心的方法来构建您自己的 Widget。我认为 Flutter 团队会添加某种属性,让用户可以指定他们选择的填充。
      • 正如我所说 - 它在状态类上是硬编码的。所以只有这两个选项
      【解决方案3】:

      不居中,否则EdgeInsetsDirectional.only(start 0, bottom: 16)

      final EdgeInsetsGeometry titlePadding;

      【讨论】:

        猜你喜欢
        • 2019-07-09
        • 1970-01-01
        • 2017-04-23
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2015-11-11
        • 2023-02-08
        • 1970-01-01
        相关资源
        最近更新 更多