颤振列表视图呈现问题

时间:2018-08-03 14:41:57

标签: dart flutter

我目前正在学习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,
    );
  }
} 

1 个答案:

答案 0 :(得分:2)

是的,Flutter仅在得到指示时更新。 setState()将小部件标记为脏并导致Flutter重建:

onPressed: () => setState(() => _taskList.add(_newTask)),