【发布时间】:2021-05-23 19:49:51
【问题描述】:
我正在尝试更新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,
);
},
),
...
我在此处而不是在 main.dart 中创建 StateNotifierProvider,因为此提供程序仅在此小部件及其子级中使用。我使用的是Consumer,因为只有FloatingActionButton 使用这个值,并且小部件是有状态的,所以ConsumerWidget 不起作用。
【问题讨论】: