文字连续溢出,Flutter
Text Overflowing in a Row, Flutter
由于文本太长,我在布局方面遇到问题,我尝试使用 Expanded
/ Flexible
和导致问题的文本来填充 space 它需要但它溢出了。我知道这个问题被问了一百次,但我不明白错误在哪里。我尝试将 Expanded
/ Flexible
分别应用于所有 Row/Columns 以及同时全部应用(主要是我尝试布局以尝试修复它),但我仍然有问题...我什至尝试将 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
只需要需要的 space,并且 Expanded
获取所有可用的 space,尊重弹性因子。所以大部分时间我都使用 Flexible 小部件,但这次它不起作用。
在此先感谢您的帮助!
用固定宽度的容器包裹起来,然后使用auto_sized_text。或者你可以用固定宽度的 FittedBox 包装你的文本小部件。它会采用相同的方法。随意添加 maxLine
、minFontSize
和 maxFontSize' in auto_sized_text. Using
Expandedor
Flexible` 只会在您的文本长度小于给定宽度时影响容器的大小,它确实在这种情况下帮不了你。
尝试使用 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"),
],
),
))
],
),
))
注意:使用的文字内容有限制。我们需要确保根据预期的文本长度设置高度。
您可以使用 Flexible 或 Expanded Widget 您应该尝试以下代码:
Card(
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.blue,
),
borderRadius: BorderRadius.circular(15.0),
),
margin: EdgeInsets.all(16.0),
child: Container(
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(Icons.directions_car),
SizedBox(
width: 10,
),
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Text 1"),
SizedBox(
height: 4,
),
Text('TEXT 2'),
],
),
),
SizedBox(
width: 27,
),
Flexible(
child: Container(
child: Column(
children: [
Text(
'1 World Way, Los Angeles, CA 90045, USA',
textAlign: TextAlign.left,
),
SizedBox(
height: 4,
),
Text(
'FLIGHT 3231',
textAlign: TextAlign.left,
),
],
),
),
),
],
),
],
),
),
),
你的屏幕是这样的:
如果文本很长,那么使用Expanded
会根据父控件换行,从而导致字体大小发生变化。您可以考虑使用省略号。
return Container(
width:300 //give a width of your choice
child: Text('Any long text',
overflow:TextOverflow.ellipsis,
),
);
由于文本太长,我在布局方面遇到问题,我尝试使用 Expanded
/ Flexible
和导致问题的文本来填充 space 它需要但它溢出了。我知道这个问题被问了一百次,但我不明白错误在哪里。我尝试将 Expanded
/ Flexible
分别应用于所有 Row/Columns 以及同时全部应用(主要是我尝试布局以尝试修复它),但我仍然有问题...我什至尝试将 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
只需要需要的 space,并且 Expanded
获取所有可用的 space,尊重弹性因子。所以大部分时间我都使用 Flexible 小部件,但这次它不起作用。
在此先感谢您的帮助!
用固定宽度的容器包裹起来,然后使用auto_sized_text。或者你可以用固定宽度的 FittedBox 包装你的文本小部件。它会采用相同的方法。随意添加 maxLine
、minFontSize
和 maxFontSize' in auto_sized_text. Using
Expandedor
Flexible` 只会在您的文本长度小于给定宽度时影响容器的大小,它确实在这种情况下帮不了你。
尝试使用 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"),
],
),
))
],
),
))
注意:使用的文字内容有限制。我们需要确保根据预期的文本长度设置高度。
您可以使用 Flexible 或 Expanded Widget 您应该尝试以下代码:
Card(
shape: RoundedRectangleBorder(
side: BorderSide(
color: Colors.blue,
),
borderRadius: BorderRadius.circular(15.0),
),
margin: EdgeInsets.all(16.0),
child: Container(
padding: EdgeInsets.all(8.0),
alignment: Alignment.centerLeft,
child: Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(Icons.directions_car),
SizedBox(
width: 10,
),
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Text 1"),
SizedBox(
height: 4,
),
Text('TEXT 2'),
],
),
),
SizedBox(
width: 27,
),
Flexible(
child: Container(
child: Column(
children: [
Text(
'1 World Way, Los Angeles, CA 90045, USA',
textAlign: TextAlign.left,
),
SizedBox(
height: 4,
),
Text(
'FLIGHT 3231',
textAlign: TextAlign.left,
),
],
),
),
),
],
),
],
),
),
),
你的屏幕是这样的:
如果文本很长,那么使用Expanded
会根据父控件换行,从而导致字体大小发生变化。您可以考虑使用省略号。
return Container(
width:300 //give a width of your choice
child: Text('Any long text',
overflow:TextOverflow.ellipsis,
),
);