gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:04:54 24 4
gpt4 key购买 nike

在 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() 设置为 onPressedElevatedButton ,然后按下按钮)给出以下运行时错误:
'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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com