除非封闭列被包装在“灵活”小部件中,否则嵌套行中的文本不会被包装

时间:2019-08-21 14:25:01

标签: flutter flutter-layout

“文本”窗口小部件内的文本即使在“灵活”窗口小部件中包装时也没有自动换行。我找到了一种解决方法,但它涉及将Column小部件包装在Flexible小部件中,但我不确定这是最佳做法。

我在网上看到了许多类似的答案,但是没有一个确切的问题。与我有关的文本小部件嵌套在下面的层次结构行->列->行

中是相关的

关于此布局的外观的大致想法: enter image description here 这是原始代码。运行时,文本溢出屏幕而不是环绕。

      Row(
        children: [
          Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Text("top column"),
              Row(
                children: [
                  Text("left row"),
                  Text(
                    "this is the text that needs to wrap, this is the text that needs to wrap",
                  ),
                ],
              ),
            ],
            crossAxisAlignment: CrossAxisAlignment.start,
          ),
          Text("right side"),
        ],
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
      );

下面的代码可以解决我的问题,但是涉及将Text小部件和外部Column小部件都包装在Flexible小部件中:

      Row(
        children: [
          Flexible( // added Flexible widget, but doesn't seem correct.
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
              Text("top column"),
                Row(
                  children: [
                    Text("left row"),
                    Flexible( // added Flexible widget
                      child: Text(
                        "this is the text that needs to wrap, this is the text that needs to wrap",
                      ),
                    )
                  ],
                ),
              ],
              crossAxisAlignment: CrossAxisAlignment.start,
            ),
          ),
          Text("right side"),
        ],
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
      );

是否有更好的方法来实现这种包装,或者将Column封装在Flexible小部件中是令人满意的方法?

1 个答案:

答案 0 :(得分:0)

您的方法是正确的,这就是原因:

您可以通过将内部Row包裹到Flexible中来解决内部Column长文本的问题,以防止在水平轴上溢出。如果这是您的整棵树,则效果很好。并非如此。

在小部件树上,没有水平约束来限制子项的宽度。children沿垂直轴环绕,因此最上方Row的{​​{1}}固定宽度(Text("right side")),另一个是无界的(Column)。

Column包裹Flexible时,它使children被水平限制。另一种方法是使用Container,但这不是最好的方法,因为它需要您在构建之前指定宽度。