我有这个生成的通知程序,它应该在数据更改时重建,而不会在重建时丢失对先前选择对象的引用。
@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;
}
}