我怎样才能使文本根据flutter中字符串的长度具有固定的宽度?

e3bfsja2  于 2022-12-19  发布在  Flutter
关注(0)|答案(2)|浏览(304)

我有一个小部件树如下:

Widget example() {
    return Column(
      children: [
        Row(
          children: [
            Expanded(
              child: Container(
                height: 100,
                decoration: BoxDecoration(color: Colors.red),
              ),
            ),
            Text('25.00%')
          ],
        ),
        Row(
          children: [
            Expanded(
              child: Container(
                height: 100,
                decoration: BoxDecoration(color: Colors.red),
              ),
            ),
            Text('125.00%')
          ],
        ),
        Row(
          children: [
            Expanded(
              child: Container(
                height: 100,
                decoration: BoxDecoration(color: Colors.red),
              ),
            ),
            Text('1250.00%')
          ],
        ),
      ],
    );
  }

如何使所有文本占用相同的水平空间,而不使用像素宽度,以便所有容器垂直对齐?
我想为我的百分比设置一个固定的长度,较短的百分比用空格填充,较长的百分比用文本省略号裁剪。
有没有一个干净的内置方法可以做到这一点?

vsdwdz23

vsdwdz231#

所有这些问题的解决方案都在auto_size_text包中,你可以设置一个maxLines来设置AutoSizeText的最大行数,这样如果你有多个AutoSizeText小部件,所有的都会占用相同的水平空间,因为然而,你的文本很长,包会调整它的大小以适应特定的行范围,否则,你可以给予它省略号样式。

AutoSizeText(
  yourText,
  maxLines: 1,
  minFontSize: 10,
  wrapWords: false,
  overflow: TextOverflow.ellipsis,
);
lc8prwob

lc8prwob2#

因为你的要求是为百分比设置一个固定的宽度,并且在文本溢出时省略掉文本,所以我建议你也把Text小部件 Package 在一个Expanded小部件中,并且为行的两个扩展部分使用flex属性。我建议行的两个部分之间的比率为5:1,分别用flex1flex2表示。但是,你可以根据你的要求设置flex。其次,我在所有Text小部件中使用了overflow: TextOverflow.ellipsis,这将照顾到你要求的省略部分。我还将文本右对齐,但这完全取决于你。
以下是修订后的守则:

Widget example2() {
  int flex1 = 5;
  int flex2 = 1;
  return Column(
    children: [
      Row(
        children: [
          Expanded(
            flex: flex1,
            child: Container(
              height: 100,
              decoration: BoxDecoration(color: Colors.red),
            ),
          ),
          Expanded(
            flex: flex2,
            child: const Text('25.00%',
              overflow: TextOverflow.ellipsis,
              textAlign: TextAlign.right,
            ),
          )
        ],
      ),
      Row(
        children: [
          Expanded(
            flex: flex1,
            child: Container(
              height: 100,
              decoration: BoxDecoration(color: Colors.red),
            ),
          ),
          Expanded(
            flex: flex2,
            child: const Text('125.00%',
              overflow: TextOverflow.ellipsis,
              textAlign: TextAlign.right,
            ),
          )
        ],
      ),
      Row(
        children: [
          Expanded(
            flex: flex1,
            child: Container(
              height: 100,
              decoration: BoxDecoration(color: Colors.red),
            ),
          ),
          Expanded(
            flex: flex2,
            child: const Text(
              '1250.00%',
              overflow: TextOverflow.ellipsis,
              textAlign: TextAlign.right,
            ),
          )
        ],
      ),
    ],
  );

}
希望能有所帮助!

相关问题