我目前正在学习Flutter。我从尝试构建基本列表应用程序开始。我当前拥有的流程是Stateful TasksManager窗口小部件,它将用户输入保存到状态,然后将其推入_taskList列表,我将其发送到了Stateless TaskList窗口小部件,后者正在渲染列表。
我希望单击“保存”按钮后,列表视图将使用新任务进行更新,但是我得到的是“保存”之后,列表视图仅在状态的后续更改期间更新。例如,如果我要“保存”字符串“ Foo”以将其添加到列表中,则仅在键入另一项(例如“ Bar”)后才在视图中看到该更新。
TaskManager
class TasksManager extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return TasksManagerState();
}
}
class TasksManagerState extends State<TasksManager>{
final List _taskList = [];
String _newTask = '';
@override
Widget build(BuildContext context) {
// TODO: implement build
return Column(
children: <Widget>[
TextField(
onChanged: (value){
setState(() {
_newTask = value;
});
print(_taskList);
},
),
RaisedButton(
child: Text('Save'),
onPressed: () => _taskList.add(_newTask),
),
Expanded(child: TaskList(_taskList))
],
);
}
}
任务列表
class TaskList extends StatelessWidget {
final List taskList;
TaskList(this.taskList);
Widget _buildListItem(BuildContext context, int index) {
return ListTile(
title: Text(taskList[index]),
);
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView.builder(
itemBuilder: _buildListItem,
itemCount: taskList.length,
);
}
}
答案 0 :(得分:2)
是的,Flutter仅在得到指示时更新。
setState()
将小部件标记为脏并导致Flutter重建:
onPressed: () => setState(() => _taskList.add(_newTask)),