Flutter Riverpod context.read()只返回提供程序中的数据类型,因此我可以';t更新值
我试图更新Flutter Riverpod context.read()只返回提供程序中的数据类型,因此我可以';t更新值,flutter,riverpod,Flutter,Riverpod,我试图更新RecenterProvider中的值,这是我用StateNotifierProvider创建的,但是read()(更新回调中的值的推荐方法)只是返回一个bool,而不是实际的提供程序 这里是RecenterProvider class RecenterProvider extends StateNotifier<bool> { RecenterProvider() : super(true); void toggle() => state = !state
RecenterProvider
中的值,这是我用StateNotifierProvider
创建的,但是read()
(更新回调中的值的推荐方法)只是返回一个bool
,而不是实际的提供程序
这里是RecenterProvider
class RecenterProvider extends StateNotifier<bool> {
RecenterProvider() : super(true);
void toggle() => state = !state;
}
类RecentrProvider扩展StateNotifier{
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,
);
},
),
...
final recenterProvider=
StateNotifierProvider.autoDispose(
()=>RecenterProvider());
...
@凌驾
小部件构建(构建上下文){
返回脚手架(
...
浮动操作按钮:消费者(
构建器:(上下文,监视,u){
返回浮动操作按钮(
子:图标(
Icons.my_位置,
颜色:手表(recenterProvider)
主题。背景。强调颜色
:Theme.of(context.primarycontheme.color,
),
已按下:(){
//这会失败,因为read()返回bool而不是RecenterProvider
read(recenterProvider.toggle();
},
背景颜色:主题。背景。脚手架背景颜色,
);
},
),
...
我在这里创建StateNotifierProvider
,而不是在main.dart中,因为此提供程序仅在该小部件及其子部件中使用。我使用Consumer
,因为只有FloatingActionButton
使用此值,并且小部件是有状态的,因此ConsumerWidget
不起作用。而不是:
context.read(recenterProvider.toggle())
您需要执行以下操作:
context.read(recenterProvider.notifier).toggle()