flutter 如何在river pod中的两个stateProvider之间进行通信?

fnatzsnv  于 2023-02-05  发布在  Flutter
关注(0)|答案(2)|浏览(114)

我最近刚刚提到过在flutter中与riverpod州管理层合作。
我有与状态提供程序之间通信相关的问题。
下面是我示例代码:

class SomeClass_ONE extends stateNotifer <SomeState> {
SomeClass_ONE({required this.somevalue}):super(null);
  
  final SomeCustomClass somevalue;
  
  void methodOne(SomeState newstatevalue){
      state = newstatevalue;
 }
}

final someClassOneProvider = 
StateNotifierProvider<SomeClass_ONE,SomeState>.  
((ref)=>SomeClass_ONE(somevalue: SomeCustomClass()));

现在我有了另一个状态提供者类,如下所示

class SomeClass_Two extends stateNotifer <SomeStateTwo> {
SomeClass_ONE({required this.somevalue}):super(null);

 final SomeCustomClass somevalue;

 void methodtwo(SomeState newstatevalue){
   state = newstatevalue;
  }

}

final someClassTwoProvider = 
StateNotifierProvider<SomeClass_Two,SomeStateTwo> 
((ref)=>someClassTwoProvider(somevalue: SomeCustomClass()));

现在我想做的是,在methodOne执行时,我必须监听状态转换,必须触发methodTow,还必须更新secondproviders状态。
那么我怎样才能在类构造函数中不使用Ref来实现这个呢?
我已经尝试了ref.listner来触发并在两个类构造函数中传递Ref。但是在某些情况下,我不能直接在构造函数中使用Ref,这是前辈们遵循的一些准则。

z0qdvdin

z0qdvdin1#

可以将Ref ref对象传递给methodtwo方法,然后从其他StateNotifierProvider调用必要的方法,无论如何,要引用其他类的其他方法,都需要有Ref对象。

7tofc5zh

7tofc5zh2#

尝试使用StateNotifierProvider提供的watch
请尝试以下代码:

class SomeClass_ONE extends stateNotifer <SomeState> {
  SomeClass_ONE({required this.somevalue}):super(null);
  
  final SomeCustomClass somevalue;
  
  void methodOne(SomeState newstatevalue){
    state = newstatevalue;
    // Listen to the changes in the state of the first provider and call the methodtwo of the second provider
    someClassTwoProvider.watch((_) => _.methodtwo(newstatevalue));
  }
}

相关问题