有没有办法在声明后更新 River pod 中状态提供者的值

Lik*_*h M 7 provider state-management dart flutter riverpod

final itemCountProvider = StateProvider<int>((ref) {
  return 0;
});
Run Code Online (Sandbox Code Playgroud)

我需要跟踪项目中选择的项目数量,最初项目计数为零,但后来我需要给它计算值如何更新 itemCountProvider 中的值,因为它已经声明为最终值

Jos*_*eve 8

您可以像这样更新状态提供者的值:

ref.read(itemCountProvider.state).state = 10;
Run Code Online (Sandbox Code Playgroud)

这是一个计数器应用程序示例:

final itemCountProvider = StateProvider((ref) => 0);
class HomePage extends ConsumerWidget {
  const HomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final counter = ref.watch(itemCountProvider);
    return Scaffold(
      body: Center(
        child: Text(
          counter.toString(),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          ref.read(counterProvider.state).state += 1;
        },
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • (itemCountProvider.state) 中的 .state 现已弃用 (itemCountProvider.notifier) (5认同)

nag*_*nag 7

您可以使用以下命令更新状态read

  1. 如果你想每次更新一个新值
ref.read(itemCountProvider.state).state = newValue;
Run Code Online (Sandbox Code Playgroud)
  1. 如果您想更新基于先前的状态值
ref.read(itemCountProvider.state).state = ref.read(itemCountProvider.state).state + newValue;
Run Code Online (Sandbox Code Playgroud)

或者

ref.read(itemCountProvider.state).state += newValue;
Run Code Online (Sandbox Code Playgroud)

或者

ref.read(counterProvider.notifier).update((state) => state + newValue);
Run Code Online (Sandbox Code Playgroud)