现在我编写了这样的代码
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):引发异常时,这是堆栈:
答案 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
操作。