我有以下有状态的小部件
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;
}););