我在创建同步提供程序时遇到问题。我是新手,我会尽力解释得更好。
在我的 main.dart 中,我有两个提供程序,一个用于用户身份验证,一个用于代码中的另一个小部件,它只是有一个要显示的列表。我使用 ChangeNotifierProxyProvider 因为所有其他提供者都需要访问用户身份验证令牌和详细信息。用户存储、读取令牌的所有方法都在 userProvider 中。
当调用 UserProvder.init() 时,对象已创建但由于 http 请求仍未准备好,主体中的代码继续执行并将 UserProvider 传递给认为 UserProvider 已准备好但未准备好的 Conto Provider。当 ContoProvider 开始使用 UserProvider 中的令牌检索 List 时,通过 userService 访问失败,因为仍然为空。
那么,我如何同步创建提供程序以等待 UserProvider 完全准备好然后初始化所有其他提供程序?
主要.dart
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<UserProvider>(
create: (_) => UserProvider.init(),
),
ChangeNotifierProxyProvider<UserProvider, ContoProvider>(
create: (_) {
return ContoProvider.init(
Provider.of<UserProvider>(_, listen: false));
},
update: (_, userProvider, contoProvider) =>
contoProvider..update(userProvider),
),
],
child:...
userProvider.dart
User activeUser = User(null, null, null);
UserStatus status = UserStatus.Checking;
UserProvider.init() {
checkUserPresence();
}
void checkUserPresence() async {
/*here i check if in secure storage there is a refreshtoken if there is i make an http
request for a new token and a second request to fill the User into UserProvider so i need await async*/
}
ContoProvider.dart
UserProvider userService;
ContoProvider.init(UserProvider user) {
userService = user;
lookUpConti();
}
void lookUpConti() async {
/*here i make an http call to retrive some data, i access to
userService for get token and refresh token if needed*/
}