Riverpod-访问ConsumerWidget时在其中获取数据



我有一个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();}

相关内容

  • 没有找到相关文章

最新更新