我正在尝试更新 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
不起作用。
答案 0 :(得分:1)
而不是:
context.read(recenterProvider).toggle()
你需要做的:
context.read(recenterProvider.notifier).toggle()