gpt4 book ai didi

flutter - 'AutoDisposeStreamProvider' can' t被赋值给参数类型 'AlwaysAliveProviderListenable>'

转载 作者:行者123 更新时间:2023-12-05 05:37:23 27 4
gpt4 key购买 nike

我希望能够创建 StreamProvider.autoDispose 并在 StateNotifier 中收听它。

这样当StateNotifierProvider.autoDispose被销毁时,StreamProvider也会被销毁。否则它会保持打开状态,这是我不想要的。

但是,StateNotifierProvider 只能访问 Ref,不能访问 WidgetRef。因此,我无法使用 .autoDispose 创建 StreamProvider,否则会出现此错误:

不能将参数类型“AutoDisposeStreamProvider”分配给参数类型“AlwaysAliveProviderListenable ”。

final filterList =
StateNotifierProvider.autoDispose<FilteredListNofifier, List<ServerItem>>(
(ref) {
return FilteredListNofifier(ref);
});

class FilteredListNofifier extends StateNotifier<List<ServerItem>> {
FilteredListNofifier(Ref ref) : super(<ServerItem>[]) {
ref.listen(filterListStream, (previous, AsyncValue<List<ServerItem>> next) {
if (next.value != null) {
state = next.value!;
}
});
}
}

final filterListStream = StreamProvider.autoDispose<List<ServerItem>>((ref) async* {
yield [];
});

最佳答案

你可以像这样使用watch:

final filterList =
StateNotifierProvider.autoDispose<FilteredListNofifier, List<ServerItem>>(
(ref) {
final a = ref.watch(filterListStream);
return FilteredListNofifier(a);
});

class FilteredListNofifier extends StateNotifier<List<ServerItem>> {
FilteredListNofifier(AsyncValue<List<ServerItem>> l) : super(<ServerItem>[]) {
if (l.asData != null) {
state = l.asData!.value;
}
}
}

final filterListStream = StreamProvider.autoDispose<List<ServerItem>>((ref) async* {
yield [];
});

关于flutter - 'AutoDisposeStreamProvider<T >' can' t被赋值给参数类型 'AlwaysAliveProviderListenable<AsyncValue<T>>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73120848/

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