【问题标题】:Remove Padding on CupertinoSliverNavigationBar删除 CupertinoSliverNavigationBar 上的填充
【发布时间】:2018-06-22 15:44:00
【问题描述】:

我正在尝试使用CupertinoSliverNavigationBar,实际上它很棒,但由于某种原因我不能将尾随放在导航栏的末尾。我抬头一看(我猜,我)发现里面有Padding

这是我的代码

   new CupertinoPageScaffold(
        child: new CustomScrollView(
          slivers: <Widget>[
            new CupertinoSliverNavigationBar(
              largeTitle: new Text('Tasks'),
              trailing: new CupertinoButton(
                child: new Icon(AdditionalCupertinoIcons.compose, size: 32.0),
                onPressed: () {
                  showDialog(
                      context: context,
                      builder: (BuildContext context) {
                        return new CupertinoAlertDialog();
                      });
                },
                padding: EdgeInsets.all(0.0),
              ),
            )
          ],
        ),
      ),

【问题讨论】:

    标签: flutter flutter-sliver


    【解决方案1】:

    很遗憾,没有可以做

    查看this line of source code,可以看到他们在末尾使用了Padding,即_kNavBarEdgePadding,即16.0start 也一样。

    这意味着使用CupertinoSliverNavigationBar 您将无法删除Padding,因为没有访问点可以更改它。您必须为此创建自己的小部件

    _CupertinoPersistentNavigationBar widget 包含 Padding 并由 CupertinoSliverNavigationBar 使用,seen here 和用于完成的 here 也可以使用。

    【讨论】:

    • 感谢您的回答。我查看了 Widget Tree,是的,里面有一个 Padding。我只是想为什么它是默认值。
    • @Ampersanda 因为它是 Cupertino 样式,并且该类的创建者并没有费心通过例如公开填充属性。向构造函数添加可选参数。您可能想create a pull request here。我认为他们可能会考虑。
    【解决方案2】:

    有一种简单的方法可以在屏幕上移动小部件:

    Widget _adjustNavigationBarButtonPosition(Widget button, double x) {
        if (button == null) return null;
    
        return Container(
            transform: Matrix4.translationValues(x, 0, 0),
            child: button,
        );
    }
    

    用这个方法包裹你的 CupertinoButton 并指定一个偏移量。要完全删除填充,偏移量应为16.0

    【讨论】:

      【解决方案3】:

      您可以使用Matrix4.translationValues 在容器内移动一个孩子。在您的情况下,x Matrix4.translationValues(12, 0, 0), 应该是肯定的,以便将尾随向右移动。

       new CupertinoPageScaffold(
          child: new CustomScrollView(
            slivers: <Widget>[
              new CupertinoSliverNavigationBar(
                largeTitle: new Text('Tasks'),
                trailing: Container(
                 transform: Matrix4.translationValues(12, 0, 0),
                 child : CupertinoButton(
                  child: new Icon(AdditionalCupertinoIcons.compose, size: 32.0),
                  onPressed: () {
                    showDialog(
                        context: context,
                        builder: (BuildContext context) {
                          return new CupertinoAlertDialog();
                        });
                  },
                  )
                ),
              )
            ],
          ),
        ),
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-24
        • 2017-06-16
        • 2015-04-21
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-20
        相关资源
        最近更新 更多