与Riverpod "Bad state: Tried to read the state of an uninitialized provider",同时聆听未来提供商



我有这个生成的通知程序,它应该在数据更改时重建,而不会在重建时丢失对先前选择对象的引用。

@Riverpod(keepAlive:true)
Future<List<MyModel>> modelList (ModelListRef ref) {
return ref.watch(modelRepositoryProvider).getModels();
}
@Riverpod(keepAlive:true)
class MyController extends _$MyController {

@override
MyModel? build() {
return ref.watch(modelListProvider).maybeWhen(
//Accessing this state throws the error                             ↓
data: (models) => models.singleWhereOrNull((model) => model.id == state?.id),
orElse: () => null,
);
}

@override 
set state (MyModel value){
state = value;
}
}

我在打电话

ref.invalidate(modelListProvider); 

在更改数据以触发重建后,但当我再次读取通知程序状态时,我得到一个错误:

StateError (Bad state: Tried to read the state of an uninitialized provider)

和堆栈跟踪将我引导到通知器的状态。我怎样才能解决这个问题呢?

现在可以了:

@Riverpod(keepAlive:true)
class MyController extends _$MyController {

@override
MyModel? build() {
state = null;
ref.listen(
modelListProvider,
(previous, next) {
next.maybeWhen(
data: (models) {
state = models.firstWhereOrNull((model) => model.id == state?.id);
},
orElse: (){
state = null;
},
);
},
fireImmediately: true,
);
return state;
}

@override 
set state (MyModel value){
state = value;
}
}