从方法 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
}