文本连续溢出,颤动

问题描述 投票:0回答:4

由于文本太长,我在布局方面遇到问题,我尝试使用

Expanded
/
Flexible
与导致问题填充所需空间的文本,但它溢出了。我知道这个问题被问了一百遍,但我不明白错误在哪里。我尝试分别将
Expanded
/
Flexible
应用于所有行/列,并且同时应用到所有行/列(主要是我正在尝试布局来尝试修复它),但我仍然遇到问题......我什至尝试将
FittedBox
fit: BoxFit.(all of them)
一起使用。

Container(
          alignment: Alignment.centerLeft,
          child: Column(
            children: [
              Row(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Padding(
                    padding: const EdgeInsets.only(right: 8.0),
                    child: Icon(Icons.directions_car),
                  ),
                  Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text("Text 1"),
                          SizedBox(
                            height: 4,
                          ),
                          Text('TEXT 2'),
                        ],
                      ),
                      SizedBox(
                        width: 27,
                      ),
                      Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          Text('1 World Way, Los Angeles, CA 90045, USA',
                            textAlign: TextAlign.left,
                            ),
                          SizedBox(
                            height: 4,
                          ),
                          Text('FLIGHT 3231'),
                        ],
                      ),
                    ],
                  ),
                ],
              ),
            ],
          ),
        );

根据我的理解,如果我错了,请纠正我,应用

Expanded
/
Flexible
Flexible
仅占用所需的空间,而
Expanded
占用所有可用空间,尊重弹性系数。所以大多数时候我都使用灵活的小部件,但这次它不起作用。

预先感谢您的帮助!

flutter mobile flutter-layout flutter-text
4个回答
16
投票

尝试使用

Expanded
小部件,并根据 UI 填充的预期设置
flex
值。

示例代码:

Center(
        child: Container(
      height: 80,
      color: Colors.yellow,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.start,
        children: [
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Icon(Icons.bus_alert),
          ),
          Expanded(
              flex: 1,
              child: Container(
                width: 1,
                color: Colors.green,
                child: Column(
                  children: [Text("Text 1"), Text("Text 1")],
                ),
              )),
          Expanded(
              flex: 3,
              child: Container(
                color: Colors.blue,
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceAround,
                  children: [
                    Text("1 World Way, Los Angeles, CA 90045, USA"),
                    Text("FLIGHT 3231"),
                  ],
                ),
              ))
        ],
      ),
    ))

注意:文字内容使用有限制。我们需要确保根据预期的文本长度设置高度。


11
投票

您可以使用 FlexibleExpanded Widget 您应该尝试以下代码:

Card(
    shape: RoundedRectangleBorder(
      side: BorderSide(
        color: Colors.blue,
      ),
      borderRadius: BorderRadius.circular(15.0),
    ),
    margin: EdgeInsets.all(16.0),
    child: Container(
      height: 90,
      // padding: EdgeInsets.all(8.0),
      alignment: Alignment.centerLeft,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Row(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                  width: 80,
                  alignment: Alignment.center,
                  child: Icon(Icons.directions_car)),
              SizedBox(
                width: 10,
              ),
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text("Text 1"),
                  SizedBox(
                    height: 4,
                  ),
                  Text('TEXT 2'),
                ],
              ),
              SizedBox(
                width: 27,
              ),
              Expanded(
                child: Container(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        '1 World Way, Los Angeles',
                        textAlign: TextAlign.left,
                        style: TextStyle(height: 1),
                      ),
                      SizedBox(
                        height: 4,
                      ),
                      Text(
                        'FLIGHT 3231',
                        textAlign: TextAlign.left,
                        style: TextStyle(height: 1),
                      ),
                    ],
                  ),
                ),
              ),
            ],
          ),
        ],
      ),
    ),
  ),

你的屏幕是这样的:


4
投票

如果文本很长,那么使用

Expanded
会根据父控件对文本进行换行,从而导致字体大小发生变化。您可以考虑使用省略号。

return Container(
  width:300  //give a width of your choice
  child: Text('Any long text',
        overflow:TextOverflow.ellipsis,
         ),
     );

3
投票

用固定宽度的容器包裹它,然后使用auto_sized_text。或者您可以通过 FittedBox 按固定宽度包裹您的 Text 小部件。它会采取同样的方法。请随意添加

maxLine
minFontSize
maxFontSize' in auto_sized_text. Using 
Expanded
or
Flexible` 仅在您的文本长度低于给定宽度时影响容器的大小,并且在这种情况下它对您没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.