问题描述
我正在尝试更新 RecenterProvider
中的值,我正在使用 StateNotifierProvider
创建该值,但是 read()
(在回调中更新值的推荐方法)刚刚返回bool
而不是实际的提供者。
这是RecenterProvider
class RecenterProvider extends StateNotifier<bool> {
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,);
},...
我在此处创建 StateNotifierProvider
而不是在 main.dart 中,因为此提供程序仅在此小部件及其子部件中使用。我使用的是 Consumer
,因为只有 FloatingActionButton
使用这个值,而且小部件是有状态的,所以 ConsumerWidget
不起作用。
解决方法
而不是:
context.read(recenterProvider).toggle()
你需要做的:
context.read(recenterProvider.notifier).toggle()