Flutter:应用栏中的文本溢出
Flutter: Text overflow in appbar
我有一个看起来像这样的应用栏:
用户可以更改应用栏中的文本。但是,太长的文本会导致溢出错误:
我认为将特定的 Text
包装在 Flexible
小部件中可以解决这个问题,但我收到一个错误,我在使用 Flexible
方法时无法修复:
RenderBox was not laid out: RenderFlex#0ac34 relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
以下是屏幕截图中的工作代码:
PreferredSize(
preferredSize: const Size.fromHeight(kToolbarHeight + 60),
child: Container(
color: getAppBarColor(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
children: [
Visibility(
visible: hasBack,
child: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.arrow_back_ios,
color: getContentColor()),
),
),
Text(
title,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: fontSize,
color: getContentColor(),
fontWeight: FontWeight.w600,
),
)
],
),
),
const Spacer(),
Visibility(
visible: hasSettings,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: getIconButton(context),
),
),
...getExtraIconButton()
],
),
],
),
),
)
如果他太长,我希望文本动态缩写为“...”。一个肮脏的修复是使用 SizedBox
,但是,我会以某种方式需要 SizedBox
具有非静态宽度,以便它在每个设备上工作。
我如何实现所需的行为?
您的 Text 小部件位于 Row 内,因此将其包装在 Expanded 小部件内.你已经有了 TextOverflow.ellipsis 所以这应该可以工作。这样做是将大部分水平 space 用于它(无需在其周围添加固定宽度的 SizedBox 或 Container)。
因此,删除包含 Text 和后退按钮的嵌套 Row,只保留外部 Row ;不需要 Spacer 小部件,因此只需在 Text 小部件周围使用 Expanded 小部件即可工作。
这个要点应该为您指明正确的方向。
gist.github.com/romanejaquez/8f9c7b0cf2ceb873ddef5dd7a625b4ec
我有一个看起来像这样的应用栏:
用户可以更改应用栏中的文本。但是,太长的文本会导致溢出错误:
我认为将特定的 Text
包装在 Flexible
小部件中可以解决这个问题,但我收到一个错误,我在使用 Flexible
方法时无法修复:
RenderBox was not laid out: RenderFlex#0ac34 relayoutBoundary=up5 NEEDS-PAINT NEEDS-COMPOSITING-BITS-UPDATE
以下是屏幕截图中的工作代码:
PreferredSize(
preferredSize: const Size.fromHeight(kToolbarHeight + 60),
child: Container(
color: getAppBarColor(),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
children: [
Visibility(
visible: hasBack,
child: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.arrow_back_ios,
color: getContentColor()),
),
),
Text(
title,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: fontSize,
color: getContentColor(),
fontWeight: FontWeight.w600,
),
)
],
),
),
const Spacer(),
Visibility(
visible: hasSettings,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: getIconButton(context),
),
),
...getExtraIconButton()
],
),
],
),
),
)
如果他太长,我希望文本动态缩写为“...”。一个肮脏的修复是使用 SizedBox
,但是,我会以某种方式需要 SizedBox
具有非静态宽度,以便它在每个设备上工作。
我如何实现所需的行为?
您的 Text 小部件位于 Row 内,因此将其包装在 Expanded 小部件内.你已经有了 TextOverflow.ellipsis 所以这应该可以工作。这样做是将大部分水平 space 用于它(无需在其周围添加固定宽度的 SizedBox 或 Container)。
因此,删除包含 Text 和后退按钮的嵌套 Row,只保留外部 Row ;不需要 Spacer 小部件,因此只需在 Text 小部件周围使用 Expanded 小部件即可工作。 这个要点应该为您指明正确的方向。 gist.github.com/romanejaquez/8f9c7b0cf2ceb873ddef5dd7a625b4ec