使用 Flutter 和 Riverpod 时清除提供程序中的状态

Sas*_*ngs 7 dart flutter riverpod

如何在 Flutter 应用程序中手动清除 Riverpod 提供程序的当前状态?我的用例是当用户退出我的应用程序然后注册为新/不同用户时,以前的用户状态仍然存储在提供程序中,但是当应用程序重新启动时它会自动清除。

Joe*_*ler 14

2022年

现在有一个invalidate()方法可以使提供程序立即被处置。

用法示例:

onPressed: () async {
                          ref.read(newPostScreenProvider.notifier).setBusy(true);
await ref.read(newPostScreenProvider.notifier).submitPost(
          image: ref.watch(imagesProvider),
          content: ref.watch(contentProvider),
          private: private,
        );
                          
    ref.read(newPostScreenProvider.notifier).setBusy(false);
    ref.invalidate(newPostScreenProvider);
    ref.invalidate(imagesProvider);
    ref.invalidate(contentProvider);
    ref.invalidate(contentReadyProvider);
    router.pop();
}

Run Code Online (Sandbox Code Playgroud)

这是描述 invalidate 方法的 GitHub 问题


Sas*_*ngs 7

作为参考,Riverpod 包的所有者在这里回答了我的问题: https: //github.com/rrousselGit/river_pod/issues/676


小智 2

您将需要使用 Riverpod 中的 .autoDispose,请参阅下面的链接了解更多详细信息

final userProvider = StreamProvider.autoDispose<YourModel>((ref) {

});
Run Code Online (Sandbox Code Playgroud)

https://riverpod.dev/docs/concepts/modifiers/auto_dispose/

  • 您好,我知道自动处置,但我的用例有所不同。我不想在用户登录时对某些提供程序使用自动处置。但是当该用户注销时,我需要找到一种方法来处置所有提供程序,这样当我在同一设备上登录时不同的用户,状态被重置。说得通? (15认同)
  • @SaschaDerungs 我有完全相同的问题。你解决这个问题了吗?我似乎无法找到一种方法来清除注销时的所有提供商。 (2认同)