'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);
更多关于这里的变化。
THE END
二维码