我有一个StateNotifier,我想在小部件中使用它的状态。
据我所知,如果您在构建中观察带有ref.watch的StateNotificationProvider,那么每次状态更改时都会重新构建小部件。
现在,在StateNotifier中,我有一个DatabaseService实例来调用api请求并相应地设置状态,在ConsumerWidget中我监视状态。
问题是,我想在第一次构建小部件时调用StateNotificationer中定义的fetch方法,这样我就可以显示从数据库中检索到的数据。
像这样的
class MyStateNotifier extends StateNotifier<CustomState> {
final DatabaseService databaseService;
MyStateNotifier(this.databaseService) : super(CustomStateInit());
Future<void> fetchData() async {
state = CustomStateLoading();
final result = await databaseService.apiRequest();
state = CustomStateSuccess(result);
}
}
final stateNotifierProvider = StateNotifierProvider((ref) => MyStateNotifier());
以及在窗口小部件中
class MyWidget extends ConsumerWidget {
// I have to call the MyStateNotifier fetchData() method to get the data
Widget build(BuildContext context, WidgetRef ref) {
final data = ref.watch(stateNotifierProvider);
return Column(
children: data.map((e) => Text(e)).toList()
);
}
}
要在观看stateNotifierProvider
后调用fetchData()
,需要在StateNotifier的构造函数中调用它,如下所示:
MyStateNotifier(this.databaseService) : super(CustomStateInit()){fetchData();}