我正在尝试在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。
提前感谢您提供的任何帮助或指导。
1条答案
按热度按时间jei2mxaa1#
builder: (ref, watch, child)
不是Consumer
的正确参数。你想要(context, ref, child)
。然后调用ref.watch
来完成您想要使用watch
完成的操作