Flutter Riverpod 在本身是 StateProvider 的 class 内调用 StateProvider

Flutter Riverpod call StateProvider within a class that itself is a StateProvider

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

main.dart

var myClass1 = Class1();
final class1Provider = StateProvider((ref) => myClass1);
final class2Provider = StateProvider((ref) => Class2(myClass1));

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

仅供参考,这确实有效;

Widget build(BuildContext context) {
  displayData = (ref.watch(class2Provider.notifier).state).getData();

谢谢

这是不正确的。您正在使用 riverpod,但将其与全局变量混合使用,这破坏了使用 state-management 库的全部意义。

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

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