【发布时间】:2021-06-28 21:32:38
【问题描述】:
我编写了一些代码,将ApiService 提供给StateNotifier。 ApiService 依赖于 authenticatorclient - 身份验证客户端必须异步创建,因为它使用 sharedprefs 获取令牌。
我只是想弄清楚他们的写作方式是否更优雅。基本上,当服务 apiService 被注入到 StateNotifier 中时,它可能是可以为空的......对我来说这有点代码味道。
简而言之,这就是我正在做的事情......
使用FutureProvider 实例化RestClient 和Dio
authenticatorClient = FutureProvider<RestClient>((ref) async {
final prefs = await SharedPreferences.getInstance();
final dio = Dio();
...
return RestClient(dio);
}
然后我观看并使用 MaybeWhen 来返回服务
final clientCreatorWatchProvider = Provider<ApiService?>((ref) => ref
.watch(authenticatorClient)
.whenData((value) => ApiService(value))
.maybeWhen(
data: (service) => service,
orElse: () => null,
));
所以我不喜欢的一点是 orElse 返回 null
然后我的StateNotifier 正在观看...
final AppState = StateNotifierProvider<AppNotifier, String>(
(ref) => AppNotifier(ref.watch(clientCreatorWatchProvider)));
class AppNotifier extends StateNotifier<String> {
final ApiService? apiService;
AppNotifier(this.apiService) : super("loading") {
init();
}
...
}
对上述方法有什么想法吗?
谢谢
【问题讨论】: