如何在Flutter中正确更新屏幕上的数据库和数据

时间:2019-09-06 12:40:06

标签: sqlite flutter dart

所以我有一个包含一些数据的数据库,以便使用将来的构建器从数据库中获取数据,我将数据存储在快照中。

var data = snapshot.data;

然后我在页面上显示数据,如果我决定删除数据,请按照以下步骤进行操作:

DBHelper().delete(task.id);
setState(() => data = data) // to update data in a db.

那是什么问题?
例如,我在一个小部件中有一个Future Builder,在另一个小部件中有一个按钮,它从数据库中删除了一个元素。

第一个小部件

FutureBuilder<List<Task>>(
          future: DBHelper().getTasks(),
          builder: (BuildContext context, AsyncSnapshot<List<Task>> snapshot) {
            if (snapshot.hasData) {
              var data = snapshot.data;
              return ListView.builder(
                padding: EdgeInsets.zero,
                itemCount: snapshot.data.length,
                itemBuilder: (BuildContext context, int index) {
                  Task task = snapshot.data[index];
                  return Dismissible(
                    key: UniqueKey(),                  
                    onDismissed: (direction) {
                      DBHelper().delete(task.id);
                      if (direction == DismissDirection.endToStart) {
                      } else {}
                    },
                    child:
                        TaskWidget(task.name, task.title, '', false, task.id),
                  );
                },
              );
            } else {
              return Center(child: CircularProgressIndicator());
            }
          },
        ), 

第二个小部件taskWidget.dart

I have this 
child: FlatButton(
 splashColor: Colors.transparent,
 onPressed: () {
  print('selected');
  DBHelper().delete(widget.id);
 },
  padding: EdgeInsets.all(0.0),
  child: Text('delete'),
 ),

当我在第二个窗口小部件中删除某些内容时,它确实删除了一个元素,但是屏幕没有刷新,并且在屏幕上仍然可见。
我可以通过将第二个窗口小部件移到第一个窗口小部件中来解决此问题,但是我不想这样做,因为taskWidget有很多代码行。

0 个答案:

没有答案