【发布时间】:2019-03-15 17:05:53
【问题描述】:
应用运行时是否可以更改小部件布局?
如果bool 更改为true 或false,我想将小部件位置更改为屏幕左侧或右侧。
例如在Row 中,我在中心有小部件。但我想将外部的小部件向左或向右更改:
return Container(
child: new Row(
children: <Widget>[
// Need change this widget position
new Container(
child:
Text(‘Outside’)
),
new Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Text(
‘Middle’
),
],
),
),
// new Container(
// child:
// Text(‘Outside’)
// ),
],
),
);
可以更改Container 的位置吗?我尝试使用对齐,但我无法工作。
谢谢!
【问题讨论】:
-
使用构建外部的状态变量来保存状态,使用
setState()来更新状态(这会导致build()重新运行。在build()中选择了不同的布局策略,具体取决于状态变量。 -
@GünterZöchbauer 感谢您的回复!我是这样做的。我的问题是是否可以在这里避免重复代码。例如,使用
MainAxisAlignment将Container移动到另一边? -
所以你想要
Container()之前或之后Expanded()取决于状态?您可以将 Container 存储在build()开头的变量中,然后根据您需要的状态添加它。var container = ...; var expanded = ...; children: state ? <Widget>[container, expanded] : <Widget>[expanded, container ], ... -
@GünterZöchbauer 感谢您的回复!我可以按照你的方式做,但仍然必须重复代码。没有办法可以使用对齐来做到这一点吗?
-
我不这么认为。一项新的 Dart 功能正在进行中,以使构建列表更容易,该功能正是针对此类情况启动的。
标签: dart flutter flutter-layout