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()