'StateNotifierProvider'类型声明有2个类型参数,但给出了1个类型参数

在 Flutter 2.0.5 应用程序的上下文中,我想使用 Riverpod 管理其状态,我想我可以这样声明StateNotifierProvider

import 'package:flutter_riverpod/flutter_riverpod.dart';


final counterProvider = StateNotifierProvider<CounterStateNotifier>((ref) => CounterStateNotifier());

class CounterStateNotifier extends StateNotifier<int> {
  CounterStateNotifier([int count = 0]) : super(count);

  void increment() => state++;
}

但是 Android Studio(以及后来的 Dart 编译器)抱怨我声明counterProvider变量的行:

类型 'StateNotifierProvider' 用 2 个类型参数声明,但给出了 1 个类型参数。

删除中的<CounterStateNotifier>类型参数StateNotifierProvider<CounterStateNotifier>会删除错误。然而,试图读取提供者和调用其increment方法(设置() => context.read(counterProvider).increment()onPressed一个ElevatedButton,然后按下按钮)给出以下运行时错误:

'increment'
method not found
Receiver: 0
Arguments: []

为什么context.read(counterProvider)返回int状态而不是通知程序?我的问题的第一部分中提到的类型参数错误背后的原因是什么?


我应该提到我正在网络上运行我的应用程序(使用flutter run -d Chrome)。

回答

从 Riverpod 0.14.0 开始,State 是 StateNotifierProvider 公开的默认值。

声明 StateNotifierProvider 的语法现在如下:

final counterProvider = StateNotifierProvider<CounterStateNotifier, int>((ref) => CounterStateNotifier());

访问函数现在需要添加.notifier(访问 StateNotifier 本身):

context.read(counterProvider.notifier).increment();

正如您所注意到的,您现在可以像这样访问状态:

final count = context.read(counterProvider);

更多关于这里的变化。


以上是'StateNotifierProvider'类型声明有2个类型参数,但给出了1个类型参数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>