点击按钮时,Flutter等待未来被忽略



我有以下有状态的小部件

class ItemDetailsScreen extends StatefulWidget {
Item item;

ItemDetailsScreen({required Key key, required this.item}) : super(key: key);

@override
_ItemDetailsScreenState createState() => _ItemDetailsScreenState();
}
class _ItemDetailsScreenState extends State<ItemDetailsScreen> {
late UserStore _userStore;
late Item _item;
@override
void initState() {
_item = widget.item;
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
_userStore = Provider.of<UserStore>(context);
}
@override
Widget build(BuildContext context){
//build view of item data and button...
}
//...
}

我想更新项目并在单击按钮时显示它。

我的按钮代码:

onPressed: () async {
await _userStore.updateItem(item.id!);
setState(() {
_item = _item;
});
});

updateItem方法:

@action //mobx annotation
Future updateItem(String itemId) async {
_repository.updateItem(itemId).then((isUpdated) {
for (var i = 0; i < this.user!.itemsList.length; i++) {
if (itemId== this.user!.itemsList[i].id) {
this.user!.itemsList[i].value = this.user!.itemsList[i].value ! + 1;
}
}
});
}

当我在按钮上触发onPressed时,它总是在更新之前显示旧项目值。updateItem上的wait并不像我预期的那样工作:setState方法是在执行updateItem

您是否尝试在中添加setState,然后添加方法?

_userStore.updateItem(item.id!).then((value) => setState(() {
_item = _item;
}););

最新更新