ListTile:在尾随小部件中换行

时间:2019-11-03 12:39:06

标签: flutter flutter-layout

我试图使用ListTile在左侧显示一个小标题,然后在结尾的小部件中显示一个较长的文本。我的想法是,如果没有足够的水平空间,则让尾随的文本分成多行。

我还尝试使用以下代码创建自己的图块:

Container(
  padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: <Widget>[
      Padding(
        padding: const EdgeInsets.only(right: 12),
        child: Text(
          "Campus",
          style: TextStyle(
            fontSize: 15,
            fontWeight: FontWeight.w700,
          ),
        ),
      ),
      Text(
        "20h course - New students -",
        style: TextStyle(
          fontSize: 15,
          fontWeight: FontWeight.w400,
        ),
      ),
    ],
  ),
),

在Pixel 2 XL仿真器中使用此代码,因为有足够的空间,所以一切都在预期的同一行:

enter image description here

但是,当我在Nexus One仿真器中尝试使用时,由于其大小,下面是输出:

enter image description here

为了允许文本分成多行,我将右边的文本包装到一个灵活的小部件中:

Container(
  padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: <Widget>[
      Padding(
        padding: const EdgeInsets.only(right: 12),
        child: Text(
          "Campus",
          style: TextStyle(
            fontSize: 15,
            fontWeight: FontWeight.w700,
          ),
        ),
      ),
      Flexible(
        child: Text(
          "20h course - New students -",
          style: TextStyle(
            fontSize: 15,
            fontWeight: FontWeight.w400,
          ),
        ),
      ),
    ],
  ),
),

但是然后的问题是,即使文本被分成两行,它使用的空间也超过了需要的空间,所以仍然有空白空间:

enter image description here

我也尝试过使用align小部件将文本移到末尾,但也没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

用容器包装文本,并使其左对齐或右对齐。然后重要的是,将textWidthBasis: TextWidthBasis.longestLine,添加到您的文本中。代码:

Container(
            padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
            child: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: <Widget>[
                Padding(
                  padding: const EdgeInsets.only(right: 12),
                  child: Text(
                    "Campus",
                    style: TextStyle(
                      fontSize: 15,
                      fontWeight: FontWeight.w700,
                    ),
                  ),
                ),
                Flexible(
                  child: Container(
                    alignment: Alignment.centerLeft,
                    child: Text(
                      "20h course - New students - sd f sdfsddssdfsdfs dfs df sf sdf sdf ",
                      style: TextStyle(
                        fontSize: 15,
                        fontWeight: FontWeight.w400,
                      ),
                      textWidthBasis: TextWidthBasis.longestLine,
                    ),
                  ),
                ),
              ],
            ),
          ),

答案 1 :(得分:1)

Flexible扩展以填充所有可用空间。因此,如果您希望两个小部件都具有相同的空间,则可以使用flexible包装它们。您也可以为文本使用softWrap。

Container(
  padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 20),
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: <Widget>[
      Flexible(
        child: Padding(
          padding: const EdgeInsets.only(right: 12),
          child: Text(
            "Campus",
            style: TextStyle(
              fontSize: 15,
              fontWeight: FontWeight.w700,
            ),
          ),
        ),
      ),
      Flexible(
        child: Text(
          "20h course - New students -20h course - New students -20h course - New students -20h course - New students -20h course - New students -",
          softWrap: true,
          style: TextStyle(
            fontSize: 15,
            fontWeight: FontWeight.w400,
          ),
        ),
      ),
    ],
  ),
),

您也可以使用Expanded代替“灵活”