如何在RiverPod Flutter中重建StateProvider

问题描述 投票:0回答:1

最近我正在阅读有关 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 的状态?

flutter dart dry riverpod state-management
1个回答
0
投票

更新功能将重建状态,但您需要观察提供者执行相同的操作。

使用此变量来观察提供程序并在显示图像的视图中使用它。

final images = ref.watch(imgsPathsProvider);

或者,您也可以使用它来更新状态。

ref.read(imgsPathProvider.notifier).state = List.generate(
              10,
              (index) =>
                 'https://source.unsplash.com/random/?night&${Random().nextInt(1000)}');
        });
© www.soinside.com 2019 - 2024. All rights reserved.