Riverpod context.read() 只是 returns 提供程序中的数据类型,所以我无法更新值
Riverpod context.read() just returns the data type in the provider, so I can't update the value
我正在尝试更新 RecenterProvider
中的值,这是我使用 StateNotifierProvider
创建的,但是 read()
(在回调中更新值的推荐方法)是只是返回 bool
而不是实际的提供者。
这里是RecenterProvider
class RecenterProvider extends StateNotifier<bool> {
RecenterProvider() : super(true);
void toggle() => state = !state;
}
这是我的小部件:
final recenterProvider =
StateNotifierProvider.autoDispose<RecenterProvider, bool>(
(_) => RecenterProvider());
...
@override
Widget build(BuildContext context) {
return Scaffold(
...
floatingActionButton: Consumer(
builder: (context, watch, _) {
return FloatingActionButton(
child: Icon(
Icons.my_location,
color: watch(recenterProvider)
? Theme.of(context).accentColor
: Theme.of(context).primaryIconTheme.color,
),
onPressed: () {
// This fails because read() returns a bool instead of a RecenterProvider
context.read(recenterProvider).toggle();
},
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
);
},
),
...
我在此处而不是在 main.dart 中创建 StateNotifierProvider
,因为此提供程序仅用于此小部件及其子项。我正在使用 Consumer
,因为只有 FloatingActionButton
使用此值,并且小部件是有状态的,因此 ConsumerWidget
不起作用。
而不是:
context.read(recenterProvider).toggle()
您需要做的:
context.read(recenterProvider.notifier).toggle()
在我的例子中,我将上下文声明为可为空 BuildContext? context
。在这种情况下,您只能通过空检查访问 read
-方法,如下所示:context!.read(<provider>)
@Vandit Shan 你找到解决办法了吗?我被困在这里。
有的话请分享。
引用:
(
flutter 版本 3.0.1,嘿@remi,我正在使用 context.read,但它显示 BuildContext 没有读取方法。也通过使用 provider.dart 如下 context.read().joinCall(channelName: _chchannel);它抛出错误,因为“运算符 '<' 没有为类型 'T Function()' 定义。\n尝试定义运算符 '<'。”,请帮助 –
万迪沙
5 月 26 日 14:56
)
我正在尝试更新 RecenterProvider
中的值,这是我使用 StateNotifierProvider
创建的,但是 read()
(在回调中更新值的推荐方法)是只是返回 bool
而不是实际的提供者。
这里是RecenterProvider
class RecenterProvider extends StateNotifier<bool> {
RecenterProvider() : super(true);
void toggle() => state = !state;
}
这是我的小部件:
final recenterProvider =
StateNotifierProvider.autoDispose<RecenterProvider, bool>(
(_) => RecenterProvider());
...
@override
Widget build(BuildContext context) {
return Scaffold(
...
floatingActionButton: Consumer(
builder: (context, watch, _) {
return FloatingActionButton(
child: Icon(
Icons.my_location,
color: watch(recenterProvider)
? Theme.of(context).accentColor
: Theme.of(context).primaryIconTheme.color,
),
onPressed: () {
// This fails because read() returns a bool instead of a RecenterProvider
context.read(recenterProvider).toggle();
},
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
);
},
),
...
我在此处而不是在 main.dart 中创建 StateNotifierProvider
,因为此提供程序仅用于此小部件及其子项。我正在使用 Consumer
,因为只有 FloatingActionButton
使用此值,并且小部件是有状态的,因此 ConsumerWidget
不起作用。
而不是:
context.read(recenterProvider).toggle()
您需要做的:
context.read(recenterProvider.notifier).toggle()
在我的例子中,我将上下文声明为可为空 BuildContext? context
。在这种情况下,您只能通过空检查访问 read
-方法,如下所示:context!.read(<provider>)
@Vandit Shan 你找到解决办法了吗?我被困在这里。 有的话请分享。
引用:
(
flutter 版本 3.0.1,嘿@remi,我正在使用 context.read,但它显示 BuildContext 没有读取方法。也通过使用 provider.dart 如下 context.read