- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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
的那一行。多变的:
The type 'StateNotifierProvider' is declared with 2 type parameters, but 1 type arguments were given.
<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);
更多关于变化的信息
here .
关于flutter - 类型 'StateNotifierProvider' 声明了 2 个类型参数,但给出了 1 个类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67233449/
我有一个非常大、复杂的应用程序,其中包含许多页面,其中包含带有大量字段(文本、日期选择、组合框等)的输入表单,因此状态相当大。我正在从 Provider 切换到 Riverpod,建议的状态管理方式似
我有一个 StateNotifierProvider这取决于 FutureProvider .目前它们如下所示。 final catalogProvider = StateNotifierProvid
我有这样一个模型: class TimerModel { const TimerModel(this.timeLeft, this.buttonState); final String tim
在 Flutter 2.0.5 应用程序的上下文中,我想使用 Riverpod 管理其状态,我想我可以声明一个 StateNotifierProvider像这样: import 'package:fl
我是一名优秀的程序员,十分优秀!