【发布时间】:2021-07-15 11:30:26
【问题描述】:
应用的用例:
- 在应用启动时,它将从 RestAPI 中获取随机用户,
- 然后它将使用第一次调用的结果进行另一个 RestAPI 调用,这就是我需要 ProxyProvider 的原因。
main.dart:
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (_) => RandomUser(),
),
ChangeNotifierProxyProvider<RandomUser, FavoriteList>(
create: (BuildContext ctx) => FavoriteList(ctx.read<RandomUser>()),
update: (_, RandomUser user, __) => FavoriteList(user),
),
RandomUser 提供者:
class RandomUser extends ChangeNotifier {
final apiUsers = UsersApi();
UserModel? _profile;
String? _userId;
RandomUser() {
fetchUser();
}
Future<void> fetchUser() async {
await apiUsers
.apiGetUser()
.then((user) => {
_profile = user,
_userId = chosenUserId,
})
.catchError((e) {
print("error: $e");
});
notifyListeners();
}
UserModel get profile => _profile;
String get chosenUserId => _userId;
}
FavoriteList 提供者:
class FavoriteList extends ChangeNotifier {
final RandomUser _user;
final _apiFavoriteList = FavoriteListApi();
List<FavoriteListModel> _favoriteList = <FavoriteListModel>[];
FavoriteList(this._user) {
fetchFavoriteList(_user.chosenUserId);
}
Future<void> fetchFavoriteList(String userId) async {
await _apiFavoriteList
.apiGetFavoriteList(userId)
.then((favoriteList) => {
_favoriteList = favoriteList,
})
.catchError((e) {
print("error: $e");
});
notifyListeners();
}
List<FavoriteListModel> get favoriteList => this._favoriteList;
}
如您所见,FavoriteList provider 需要RandomUser provider 来检索getter 值chosenUserId
当我启动应用程序时,我立即收到错误“Null check operator used on a null value”
在吸气剂chosenUserId 和main.dart 上,我称之为ProxyProvider 的"create"
我做错了什么?
ProxyProvider不应该先初始化第一个Provider,所以我需要的所有值都可用吗?
【问题讨论】:
标签: flutter dart flutter-provider