在小部件外部访问 Riverpod 1 方法 类

Access Riverpod 1 methods outside widget classes

如何从非小部件 类 访问 Riverpod ref,在 Riverpod 1 之前,我们可以使用 context.read,在那里我们可以访问全局导航上下文。我们怎样才能在 Riverpod 1 中实现类似的东西? 我已经尝试使用 ProviderContainer 并且它正在工作,但需要使用 UncontrolledProviderScope 包装 MaterialApp 才能访问容器,这反过来会阻止记录 StateNotifierProviders 的更改,这在调试时非常方便。 有人可以帮忙吗?

您可能不想直接使用 ProviderContainer,除非您在测试时模拟 non-widget class 的依赖项。从小部件传递您的 non-widget class a Reader tear-off,例如

class YourObject {
   YourObject(this.reader);
   Reader? reader;

   void someFunc() {
      final dependency = reader?.call(someProvider);
   }
}

// Inside a consumer widget
final myObject = YourObject(ref.watch)