【问题标题】:Custom width/height property for a widget are ignored小部件的自定义宽度/高度属性被忽略
【发布时间】:2019-05-27 02:20:07
【问题描述】:

有时我想强制小部件采用特定大小,我通常使用SizedBox/ConstrainedBox/Container

但我意识到,在某些情况下,小部件只是忽略它并采用不同的大小。这是为什么呢?

例子:

预期行为:

实际行为:

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    当父母和它的孩子想要两种不同的尺寸时,就会发生这种情况;但是父级不知道它应该如何在其边界内对齐其子级。

    以下代码没有提供足够的信息来说明如何将红框与蓝框对齐:

    Container(
      color: Colors.blue,
      width: 42,
      height: 42,
      child: Container(
        color: Colors.red,
        width: 24,
        height: 24,
      ),
    ),
    

    所以虽然它可以这样居中:

    期望以下对齐也是完全合理的:


    在这种情况下,由于 Flutter 不知道如何对齐红框,它会采用更简单的解决方案:

    不要对齐红框,强行占用所有可用空间;这导致:


    要解决这个问题,解决方案是明确告诉 Flutter 如何在其父边界内对齐子节点。

    最常见的解决方案是将孩子包装到 Align 小部件中:

    Container(
      color: Colors.blue,
      width: 42,
      height: 42,
      child: Align(
        alignment: Alignment.center,
        child: Container(
          color: Colors.red,
          width: 24,
          height: 24,
        ),
      ),
    ),
    

    诸如ContainerStack 之类的一些小部件也将提供alignment 属性来实现类似的行为。

    【讨论】:

    • 这是一项功能。这允许一些相当大的优化,使事情可定制并且不涉及“黑魔法”
    • 根本没有讽刺!这是我真正喜欢 Flutter 的一个方面。一旦你知道它是如何工作的,它就会使布局变得非常可预测。我已经回答了几十个关于布局的 SO 问题,根本没有运行任何代码。这是任何其他技术都无法做到的事情
    • 不错,但是 Flutter 至少应该发出警告,如果 Flutter 选择了一个对许多人来说不明显的东西来缩放比开发人员代码最初设置的更大的东西,它可以说是 ex。" 不足够的约束”左右!。
    • 你救了我一个小头痛
    • 这肯定应该在 Flutter 文档中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多