首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Riverpod提供程序获取Listenable?

如何从Riverpod提供程序获取Listenable?
EN

Stack Overflow用户
提问于 2021-10-10 04:14:51
回答 2查看 508关注 0票数 4

我想把go_router (https://pub.dev/packages/go_router#redirection)和Riverpod一起使用。

我有一个Provider和一个StreamProvider,我想把它们组合成一个Listenable,这样它就可以用作GoRouterrefreshListenable参数。

我想我需要将ProviderStreamProvider组合成某种Provider (如何组合?)。

Provider创建Listenable的最简单方法是什么

编辑:我知道这“否定”了Riverpod的意义,但这个应用已经和Riverpod一起设置好了,我只想添加go_router。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-05 19:09:14

有一种简单得多的方法,因为ChangeNotifier可以与Riverpod一起使用。在Riverpod的Github repo上有一个Gihtub问题。https://github.com/rrousselGit/river_pod/issues/884

在Gihtub上由Tim Whitting回答(他的代码和评论如下):

您可以在flutter_riverpod中使用ChangeNotifier。

代码语言:javascript
运行
复制
final myNotifierProvider = ChangeNotifierProvider<MyNotifier>((ref) => MyNotifier());
class MyNotifier with ChangeNotifier {
  void refresh(){
    notifyListeners();
  }
}

然后,您必须注意您试图传递Listenable的提供者。

代码语言:javascript
运行
复制
// 1.0.0-dev riverpod
refreshListenable: ref.watch(myNotifierProvider)
// 0.14.0
refreshListenable: watch(myNotifierProvider) // using a Consumer / ConsumerWidget

并在其他地方使用

代码语言:javascript
运行
复制
// 1.0.0-dev riverpod
ref.read(myNotifierProvider.notifier).refresh();
// 0.14.0
context.read(myNotifierProvider.notifier).refresh();
票数 2
EN

Stack Overflow用户

发布于 2021-10-10 18:33:25

我的解决方法如下:

代码语言:javascript
运行
复制
class AListenable extends ValueNotifier {
  AListenable(value) : super(value);

  void changeValue(newValue) {
    value = newValue;
  }
}

   
 final aListenableInstance = AListenable(false);

 final myProvider = Provider((ref) {

  final my2ndProviderValue = ref.watch(my2ndProvider);

  if (my2ndProviderValue is AsyncError || my2ndProviderValue is AsyncLoading) {
    aListenableInstance.changeValue(false);
    return false;
  }

  aListenableInstance.changeValue(true);
  return true;
});

final _router = GoRouter(
    refreshListenable: aListenableInstance,...);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69512241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档