首页 > 解决方案 > 如何在 Flutter 中自动刷新 listView?

问题描述

我实现了 listView 来显示数据,我将数据保存到Sqflite Database,从数据库中获取并显示到 listview 中。保存数据后,我pop 将字段页面形成为 listView 页面,但我的 ListView 未更新,我需要返回并打开 listView 以查看新记录。

  List<SubjectModel> list;
  int count = 0;
  SubjectModel subjectModel;

  @override
  Widget build(BuildContext context) {
    if (list == null) {
      list = List<SubjectModel>();
      updateListView();
    }
    return Scaffold(
      appBar: AppBar(
        title: Text('Subject'),
      ),
      floatingActionButton: FloatingActionButton(
          backgroundColor: Colors.purple,
          child: Icon(Icons.add),
          onPressed: () {
            Navigator.push(context,
                new MaterialPageRoute<void>(builder: (context) {
                  return new CreateTask(SubjectModel('', '', '', '', '', '', ''),'Add Subject');
                }));
          }),
      body: getSubListView()
    );
  }

  ListView getSubListView(){
    return ListView.builder(
        itemCount: count,
        itemBuilder: (BuildContext context, int position){
          return Card(
            color: Colors.white,
            elevation: 2.0,
            child: Column(
              children: <Widget>[
                ListTile(
                  title: Text(this.list[position].subject),
                  onLongPress: () => navigateToDetail(this.list[position],'Edit Subject'),
                )
              ],
            ),
          );
        }
    );
  }
}

标签: androidiosflutterdartsqflite

解决方案


每当您想重建任何东西(本例中的 listView )时,都必须调用一个 setState() 。

我要补充:

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    setState(() {
      updateListView();
    });
  }

推荐阅读