gpt4 book ai didi

flutter - Riverpod StateNotifierProvider 依赖于 FutureProvider

转载 作者:行者123 更新时间:2023-12-05 02:31:05 24 4
gpt4 key购买 nike

我有一个 StateNotifierProvider这取决于 FutureProvider .目前它们如下所示。

final catalogProvider = StateNotifierProvider<CatalogNotifier, CatalogState>((ref) {
final network = ref.watch(networkProvider.future); // future provider

return CatalogNotifier(network: network);
});

这使我的 CatalogNotifier接受 Future<NetworkProvider>而不是 NetworkProvider并要求我执行以下操作。

await (await network).doGet(...)

避免等待多个并允许 CatalogNotifier 的最佳方法是什么?接受裸NetworkProvider所以我可以写成await network.doGet(...)


为了完整性,下面是其他相关的供应商

final networkProvider = FutureProvider<Network>((ref) async {
final cache = await ref.watch(cacheProvider.future);
return Network(cacheManager: cache);
});
final cacheProvider = FutureProvider<CacheManager>((ref) async {
final info = await ref.watch(packageInfoProvider.future);

final key = 'cache-${info.buildNumber}';

return CacheManager(Config(
key,
stalePeriod: const Duration(days: 30),
maxNrOfCacheObjects: 100,
));

我确定我可以将我的缓存提供程序作为网络提供程序的 future ,因此它不必是 FutureProvider ,但我对如何解决上述问题很感兴趣,因为在另一种情况下,如果我依赖于 3 或 4 FutureProvider s,这可能不是一个选项。

最佳答案

this makes my CatalogNotifier accept a Future instead of >NetworkProvider and requires me to do things like below.

我想不出一种方法来获得您想要的结果。

你能不能只接受一个 AsyncValue 并在 statenotifier 中处理它?<​​/p>

final catalogProvider = StateNotifierProvider<CatalogNotifier, CatalogState>((ref) {
final network = ref.watch(networkProvider); // future provider

return CatalogNotifier(network: network);
});

然后你可以:

void someFunction() async {
network.maybeWhen(
data: (network) => AsyncData(await network.doGet(...)),
orElse: () => state = AsyncLoading(),
);
}

关于flutter - Riverpod StateNotifierProvider 依赖于 FutureProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71674093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com