Flutter Riverpod:在 BuildContext 和 CountDownController 中找不到“read”方法和“timerString”getter

问题描述 投票:0回答:1

我正在使用 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'.

尝试的解决方案:

  • 检查 Riverpod 包的导入是否正确。
  • 搜索了关于initState中使用
    context.read
    的类似问题,怀疑是生命周期问题。
  • 查找
    timerString
    缺少的定义或导入,但没有找到。

如何解决这些错误并在我的 Flutter 应用程序中正确实现 Riverpod 进行状态管理?

flutter dart state-management riverpod
1个回答
1
投票

没错,因为

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
类的字段

© www.soinside.com 2019 - 2024. All rights reserved.