我正在使用 Flutter 构建一个番茄钟计时器应用程序,并决定使用 Riverpod 进行状态管理,因为它针对可扩展项目推荐了实践。我遇到了阻碍我进步的两个主要问题:
BuildContext“读取”方法错误:
在
_countDownController
PomodoroIntervals's
中初始化 initState
时,出现错误:
_countDownController = context.read(countDownControllerProvider.notifier);
Error: The method 'read' isn't defined for the type 'BuildContext'.
CountDownController 'timerString' Getter 错误:
尝试从 _countDownController 访问timerString会导致:
if (_countDownController.timerString == '00:00:00') {
_tabController.animateTo(1, duration: const Duration(milliseconds: 300));
}
Error: The getter 'timerString' isn't defined for the type 'CountDownController'.
尝试的解决方案:
context.read
的类似问题,怀疑是生命周期问题。timerString
缺少的定义或导入,但没有找到。如何解决这些错误并在我的 Flutter 应用程序中正确实现 Riverpod 进行状态管理?
没错,因为
context
没有这个参数。以下是具体操作方法(并使用 ConsumerStatefulWidget
):
class PomodoroIntervals extends ConsumerStatefulWidget {
const PomodoroIntervals ({super.key});
@override
ConsumerState createState() => _PomodoroIntervalsState();
}
class _PomodoroIntervalsState extends ConsumerState<PomodoroIntervals> {
@override
void initState() {
...
_countDownController = ref.read(countDownControllerProvider);
}
@override
Widget build(BuildContext context) {
ref.watch(myProvider); // and here...
return Container();
}
}
ref
实例可用作ConsumerStatefulWidget
类的字段