Flutter Riverpod 在一个本身就是 StateProvider 的类中调用 StateProvider

Xap*_*ann 1 flutter riverpod

我有一个Class正在被调用Widgets,但这Class需要从另一个中提取数据 Class。基本上,我使用 Riverpod 作为依赖注入,并且不确定这是“正确的”还是我做错了。这是我所做的:

main.dart

var myClass1 = Class1();
final class1Provider = StateProvider((ref) => myClass1);
final class2Provider = StateProvider((ref) => Class2(myClass1));
Run Code Online (Sandbox Code Playgroud)

这是推荐的方式还是我应该做其他事情?

仅供参考,这确实有效;

Widget build(BuildContext context) {
  displayData = (ref.watch(class2Provider.notifier).state).getData();
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 5

这是不正确的。您正在使用 Riverpod,但将其与全局变量混合在一起,这破坏了使用状态管理库的全部意义。

  1. 您应该在 StateProvider 内创建实例:
final class1Provider = StateProvider((ref) => Class1());
Run Code Online (Sandbox Code Playgroud)
  1. 为了访问另一个提供者的值,您需要ref.watch()在提供者体内使用方法:
final class2Provider = StateProvider((ref) {
  final myClass1 = ref.watch(class1Provider);
  return Class2(myClass1);
});
Run Code Online (Sandbox Code Playgroud)
  1. 最后,要使用 StateProvider,您需要监视通知程序而不是状态。这将为您提供正确的初始值,但在状态更改时不会重建您的 UI。相反,您应该直接观察提供商。
Widget build(BuildContext context) {
  final displayData = ref.watch(class2Provider).getData();
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请仔细阅读文档https://riverpod.dev/docs/getting_started/