我正在使用Stepper
小部件,并且正在使用Text
小部件作为标题参数。
我用于文本的字符串很长,我希望将其包装成多行。我该怎么办?
这是我用来构建此代码:
@override
Widget build(BuildContext context) => Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Stepper(
currentStep: currentStepIndex,
onStepContinue: () => setState(() => currentStepIndex++),
onStepTapped: (int index) => setState(() => currentStepIndex = index),
steps: questions
.map((String q) => Step(
title: Text(q),
content: QuestionWidget(),
))
.toList(),
),
);
这可能不是最好的解决方案,但这是唯一对我有用的方法。
用容器包围文本小部件,并根据屏幕大小设置其最大宽度。
屏幕尺寸-84似乎是避免溢出的最小值。我已经在2种设备上对其进行了测试,并且工作正常。
steps: widget.questions
.map(
(String q) => Step(
title: new Container(
constraints: new BoxConstraints(
maxWidth: MediaQuery.of(context).size.width - 84),
child: Text(q),
),
content: new Container(),
),
)
.toList(),
如果您想多行,请使用flexible:
Flexible (child: Text('Some text here'))
这是softWrap功能
child: Text("text",softWrap: true,),
您可以利用内置的Expanded Widget来占用可用空间,如果水平/垂直没有可用空间,则切换为多行,这主要取决于父窗口小部件。如果展开的窗口小部件在行下,则将水平占用可用空间;如果其展开在列下,则将垂直占用可用空间。这是显示输出差异的小代码片段。
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text( // without expanded Widget breaks on right
'Hello World This is some long text,this will break the screen for sure')
]),
);
Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: Text(
'Hello World This is some long text,this wont break screen trust me,Some More Long tesxt a little more and more and more and more...... '),
)
]),
));
使用或不使用扩展小部件在此处输出