最近我正在阅读有关 Flutter 中的 Riverpod 状态管理的内容,我开始在我的应用程序中使用它,我想在按下 Ui 上的刷新按钮时给出随机的图像路径列表,我制作了一个 StateProvider 来获取随机列表来自 Unsplash url 的路径,这是我的代码
final imgsPathsProvider = StateProvider<List<String>>((ref) {
return List.generate(
10,
(index) =>
'https://source.unsplash.com/random/?night&${Random().nextInt(1000)}');
});
现在,当我按下刷新按钮时,我在 UI 中使用了此提供程序,这是我的代码,它运行良好:
TextButton(
onPressed: () {
ref.read(imgsPathsProvider.notifier).update((state) {
return List.generate(
10,
(index) =>
'https://source.unsplash.com/random/?night&${Random().nextInt(1000)}');
});
},
child: const Text('refresh'))
问题是,当我按下刷新按钮时,我想重建提供程序以获取随机的图像列表,而不是重复代码,我觉得我打破了 DRY 原则,这是非常简单的用例,所以我使用 StateProvider 而不是 NotifierProvider ,我应该使用 NotifierProvider 来代替,并定义一个方法并在按刷新时在 UI 中调用它吗?或者有什么方法可以重建我的 StateProvider 的状态?
更新功能将重建状态,但您需要观察提供者执行相同的操作。
使用此变量来观察提供程序并在显示图像的视图中使用它。
final images = ref.watch(imgsPathsProvider);
或者,您也可以使用它来更新状态。
ref.read(imgsPathProvider.notifier).state = List.generate(
10,
(index) =>
'https://source.unsplash.com/random/?night&${Random().nextInt(1000)}');
});