从方法 fetchData 中删除异步修饰符
Remove async modifier from the method fetchData
我试图从我的存储库中获取数据,但是当我尝试调用 api 时出现错误,这是我的商店:
class Locations = _Locations with _$Locations;
abstract class _Locations implements Store {
ApiClient _apiClient;
_Locations(ApiClient apiClient){
_apiClient = apiClient;
}
@observable
List<Location>locations = [];
@action
Future<List<Location>> fetchLocations() async{
locations = await apiClient.getLocations();
}
}
错误输出是..
[SEVERE] mobx_codegen|mobx_generator on lib/ui/location/state/locations.dart:
Could not make class "Locations" observable. Changes needed:
1. Remove async modifier from the method "fetchLocations"
知道我哪里做错了吗?
使用runInAction
改变状态和一个普通的异步函数来获取数据
void fetchLocations async() {
locationsList = await apiClient.getLocations();
runInAction(() => locations = locationsList);
}
您还可以将异步代码从操作代码中拆分出来(仅修改可观察对象):
@observable
ObservableList<Location> locations = [];
void fetchLocations() async {
final locations = await _apiClient.getLocations();
addLocations(locations);
}
@action
void addLocations(List<Location> newLocations) {
locations.addAll(newLocations);
}
即使您没有从您的 UI 中调用操作,上述方法也能正常工作。
MobX.dart 现在支持异步操作。只需确保 return 一个 Future
。它会自动将所有突变包装在一个动作中!
@observable
ObservableList<Location> locations = [];
@action
Future<void> fetchLocations() async {
final locations = await _apiClient.getLocations();
locations.addAll(newLocations); // this will be wrapped inside an action
}
我试图从我的存储库中获取数据,但是当我尝试调用 api 时出现错误,这是我的商店:
class Locations = _Locations with _$Locations;
abstract class _Locations implements Store {
ApiClient _apiClient;
_Locations(ApiClient apiClient){
_apiClient = apiClient;
}
@observable
List<Location>locations = [];
@action
Future<List<Location>> fetchLocations() async{
locations = await apiClient.getLocations();
}
}
错误输出是..
[SEVERE] mobx_codegen|mobx_generator on lib/ui/location/state/locations.dart:
Could not make class "Locations" observable. Changes needed:
1. Remove async modifier from the method "fetchLocations"
知道我哪里做错了吗?
使用runInAction
改变状态和一个普通的异步函数来获取数据
void fetchLocations async() {
locationsList = await apiClient.getLocations();
runInAction(() => locations = locationsList);
}
您还可以将异步代码从操作代码中拆分出来(仅修改可观察对象):
@observable
ObservableList<Location> locations = [];
void fetchLocations() async {
final locations = await _apiClient.getLocations();
addLocations(locations);
}
@action
void addLocations(List<Location> newLocations) {
locations.addAll(newLocations);
}
即使您没有从您的 UI 中调用操作,上述方法也能正常工作。
MobX.dart 现在支持异步操作。只需确保 return 一个 Future
。它会自动将所有突变包装在一个动作中!
@observable
ObservableList<Location> locations = [];
@action
Future<void> fetchLocations() async {
final locations = await _apiClient.getLocations();
locations.addAll(newLocations); // this will be wrapped inside an action
}