如何在小部件树/小部件类之外调用 Riverpod 提供程序?

Jun*_*riq 3 flutter flutter-provider riverpod flutter-riverpod

我刚开始使用 RiverPod。之前我使用 Provider 进行状态管理。

如果是提供程序,我可以使用小部件树之外的提供程序来使用语法获取值

Provider.of<MyModel>(context,listen:true).someFunction();
Run Code Online (Sandbox Code Playgroud)

我如何在 RiverPod 中做同样的事情?现在我正在使用 Consumer Builder 和 Consumer Widget。我想知道是否有一种方法可以在不使用 Consumer 的情况下调用 Riverpod 提供商。

小智 5

您无需使用 即可轻松呼叫riverpord提供商Consumer。请查看我的下面的扩展,该扩展对于根据上下文调用提供者非常有帮助,在上下文中它将适用于读取功能,而无需任何消费者或消费者小部件。

extension Context on BuildContext {
  // Custom call a provider for reading method only
  // It will be helpful for us for calling the read function
  // without Consumer,ConsumerWidget or ConsumerStatefulWidget
  // Incase if you face any issue using this then please wrap your widget
  // with consumer and then call your provider

  T read<T>(ProviderBase<T> provider) {
     return ProviderScope.containerOf(this, listen: false).read(provider);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在 build 方法下,您必须调用 context.read(yourProviderName)