用listview关闭数据库数据

时间:2019-07-30 12:31:20

标签: flutter

现在我编写了这样的代码

 FutureBuilder(
                future: getData2(),
                builder: (context, snapshot) {
                  if (snapshot.hasData) {
                    List data = snapshot.data;
                    return ListView.builder(
                      shrinkWrap: true,
                      itemCount: data.length,
                      itemBuilder: (context, index) {
                        final item = data[index];
                        return Dismissible(
                          key: Key(item['loc3']),
                          onDismissed: (direction) {
                            setState(() async {
                              await openData2().then((value) {
                                value.delete(
                                  'test2',
                                  where: 'loc3 = ?',
                                  whereArgs: ['loc3'],
                                );
                              });
                            });
                          },
                          child: ListTile(
                            title: Text(item['loc3']),
                          ),
                        );
                      },
                    );

但是当我解雇一件物品时 控制台中有一些注释“引发了另一个异常:setState()回调参数返回了Future。” 在setState中,我不返回任何变量
为什么他们这样说?

当我第一次删除一项时,会有更多的细节错误

  

在通知AnimationController的侦听器时引发了以下断言:
  I / flutter(6018):setState()回调参数返回了Future。
  I / flutter(6018):使用闭包或方法调用PositionedTilesState#6d110上的setState()方法
  I / flutter(6018):返回了Future。也许它被标记为“异步”。
  I / flutter(6018):不要在对setState()的调用中执行异步工作,而是先执行工作(不
  I / flutter(6018):更新小部件状态),然后在对setState()的调用中同步更新状态。
  I / flutter(6018):引发异常时,这是堆栈:

1 个答案:

答案 0 :(得分:0)

我认为第一个问题是您在async中有一个setState函数。更改为此:

...
                              onDismissed: (direction) async {
                              await openData2().then((value) {
                                    value.delete(
                                      'test2',
                                      where: 'loc3 = ?',
                                      whereArgs: ['loc3'],
                                    );
                                  });
                              setState(() {});
                              },
'''

或者这个(更具可读性):

...
                              onDismissed: (direction) {

                           Future<void> delete() async {
                               await openData2().then((value) {
                                    value.delete(
                                      'test2',
                                      where: 'loc3 = ?',
                                      whereArgs: ['loc3'],
                                    );
                                  });
                                 }

                              setState(() {
                                   delete();
                                     });
                                    },
'''

重点是,您不能在async内执行setState操作。