类型 'StateNotifierProvider' 使用 2 个类型参数声明,但给出了 1 个类型参数
The type 'StateNotifierProvider' is declared with 2 type parameters, but 1 type arguments were given
在我想使用 Riverpod 管理其状态的 Flutter 2.0.5 应用程序的上下文中,我想我可以声明一个 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
变量的行:
The type 'StateNotifierProvider' is declared with 2 type parameters, but 1 type arguments were given.
删除 StateNotifierProvider<CounterStateNotifier>
中的 <CounterStateNotifier>
类型参数可消除错误。但是,尝试读取提供程序并调用其 increment
方法(将 () => context.read(counterProvider).increment()
设置为 ElevatedButton
的 onPressed
,然后按下按钮)会出现以下运行时错误:
'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);
有关更改的更多信息 here。
如果 StateNotifierProvider 的值
,您也可以使用 dynamic 来接受任何类型
final modelProvider =
StateNotifierProvider.autoDispose<ModelClassName, dynamic>(
(ref) => ModelClassName());
在我想使用 Riverpod 管理其状态的 Flutter 2.0.5 应用程序的上下文中,我想我可以声明一个 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
变量的行:
The type 'StateNotifierProvider' is declared with 2 type parameters, but 1 type arguments were given.
删除 StateNotifierProvider<CounterStateNotifier>
中的 <CounterStateNotifier>
类型参数可消除错误。但是,尝试读取提供程序并调用其 increment
方法(将 () => context.read(counterProvider).increment()
设置为 ElevatedButton
的 onPressed
,然后按下按钮)会出现以下运行时错误:
'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);
有关更改的更多信息 here。
如果 StateNotifierProvider 的值
,您也可以使用 dynamic 来接受任何类型final modelProvider =
StateNotifierProvider.autoDispose<ModelClassName, dynamic>(
(ref) => ModelClassName());