在Flutter中使用Riverpod的手表时,出现错误:“表达式不计算为函数,因此无法调用,”

qgzx9mmu  于 2023-06-24  发布在  Flutter
关注(0)|答案(1)|浏览(131)

我正在尝试在Flutter项目中将代码从GetX迁移到Riverpod。然而,当在Riverpod的Consumer中使用watch时,我遇到了一个错误,说“表达式不计算为函数,所以它不能被调用”。
下面是发生错误的代码段:

child: Consumer(
          builder: (ref, watch, child) {
            final startPausedText =
                watch(countDownControllerProvider).state.isAnimating;

           //  Rest of the code...
          },
        ),

错误具体指向直线:final startPausedText = watch(countDownControllerProvider).state.isAnimating ;.我不确定是什么导致了这个问题。
这是完整的代码,它提供了问题的上下文:

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:pomoworkojunio2023/home_screen/5.pomodoro_intervals/5.pomodoro_intervals.dart';

final countDownControllerProvider =
    StateProvider<CountDownController>((ref) => CountDownController());

class StartStopGroupButton extends ConsumerStatefulWidget {
  const StartStopGroupButton({Key? key}) : super(key: key);

  @override
  ConsumerState<StartStopGroupButton> createState() =>
      _StartStopGroupButtonState();
}

class _StartStopGroupButtonState extends ConsumerState<StartStopGroupButton> {
  late final countDownController;

  @override
  void initState() {
    super.initState();
    countDownController = ref.read(countDownControllerProvider);
  }

  @override
  Widget build(BuildContext context, ) {
    return Scaffold(
      backgroundColor: Colors.grey,
      body: Center(
        child: Consumer(
          builder: (ref, watch, child) {
            final startPausedText =
                watch(countDownControllerProvider).state.isAnimating;

            return FloatingActionButton.extended(
              heroTag: 'btn1',
              elevation: 0,
              backgroundColor: Colors.white,
              onPressed: countDownController.startPaused,
              label: Text(
                startPausedText,
                style: TextStyle(
                  color: Colors.black,
                  fontSize: 24.0,
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

有人能帮助我理解为什么我得到这个错误以及我如何解决它吗?我尝试使用Riverpod的手表从countDownControllerProvider访问状态并相应地更新UI。
提前感谢您提供的任何帮助或指导。

jei2mxaa

jei2mxaa1#

builder: (ref, watch, child)不是Consumer的正确参数。你想要(context, ref, child)。然后调用ref.watch来完成您想要使用watch完成的操作

相关问题