ChangeNotifier 不更新消费者
ChangeNotifier not updating Consumer
不确定为什么我的 ChangeNotifier 不工作。
这是我的 Class:
class LoadingProv with ChangeNotifier {
bool globalLoading;
void setGlobalLoading(bool truefalse) {
if (truefalse == true) {
globalLoading = true;
} else {
globalLoading = false;
}
notifyListeners();
}
bool get getGlobalLoadingState {
return globalLoading;
}
}
这是我在 main.dart 中的多供应商:
MultiProvider(
providers: [
ChangeNotifierProvider<MapData>(create: (ctx) => MapData()),
ChangeNotifierProvider<LoadingProv>(create: (ctx) => LoadingProv()),
],
child: MaterialApp(
这是我在 main.dart 小部件构建(BuildContext 上下文)中的代码:
Consumer<LoadingProv>(builder: (context, loadingState, child) {
return Text(loadingState.getGlobalLoadingState.toString());
}),
这就是我调用 setGlobalLoading 的方式:
final loadingProv = LoadingProv();
loadingProv.setGlobalLoading(true);
不幸的是,我的 loadingState.getGlobalLoadingState 总是打印为假。但我可以调试它变成真的。
据我了解,您正在创建 2 个 LoadingProv 对象。
一种是在初始化 Provider
时
ChangeNotifierProvider<LoadingProv>(create: (ctx) => LoadingProv()),
一个是当你打电话给某些地方时
final loadingProv = LoadingProv();
所以你更新的不是widget上继承的,那么你是看不到更新Consumer的值的。
(1) 如果想在创建方法的同时继续创建,应该通过
调用setGlobalLoading
Provider.of<LoadingProv>(context).setGlobalLoading(true);
(2) 或者如果你想直接访问像 loadingProv.setGlobalLoading(true) 这样的值,你应该像这样初始化你的提供者
final loadingProv = LoadingProv();
MultiProvider(
providers: [
ChangeNotifierProvider<MapData>(create: (ctx) => MapData()),
ChangeNotifierProvider<LoadingProv>.value(value: loadingProv),
],
您可以使用此代码在更改时读取数据,它会自动刷新文本小部件
Text(context.watch<LoadingProv>().getGlobalLoadingState.toString());
on 调用 void 你可以使用这个
context.read<LoadingProv>().setGlobalLoading(true);
不确定为什么我的 ChangeNotifier 不工作。
这是我的 Class:
class LoadingProv with ChangeNotifier {
bool globalLoading;
void setGlobalLoading(bool truefalse) {
if (truefalse == true) {
globalLoading = true;
} else {
globalLoading = false;
}
notifyListeners();
}
bool get getGlobalLoadingState {
return globalLoading;
}
}
这是我在 main.dart 中的多供应商:
MultiProvider(
providers: [
ChangeNotifierProvider<MapData>(create: (ctx) => MapData()),
ChangeNotifierProvider<LoadingProv>(create: (ctx) => LoadingProv()),
],
child: MaterialApp(
这是我在 main.dart 小部件构建(BuildContext 上下文)中的代码:
Consumer<LoadingProv>(builder: (context, loadingState, child) {
return Text(loadingState.getGlobalLoadingState.toString());
}),
这就是我调用 setGlobalLoading 的方式:
final loadingProv = LoadingProv();
loadingProv.setGlobalLoading(true);
不幸的是,我的 loadingState.getGlobalLoadingState 总是打印为假。但我可以调试它变成真的。
据我了解,您正在创建 2 个 LoadingProv 对象。 一种是在初始化 Provider
时ChangeNotifierProvider<LoadingProv>(create: (ctx) => LoadingProv()),
一个是当你打电话给某些地方时
final loadingProv = LoadingProv();
所以你更新的不是widget上继承的,那么你是看不到更新Consumer的值的。
(1) 如果想在创建方法的同时继续创建,应该通过
调用setGlobalLoadingProvider.of<LoadingProv>(context).setGlobalLoading(true);
(2) 或者如果你想直接访问像 loadingProv.setGlobalLoading(true) 这样的值,你应该像这样初始化你的提供者
final loadingProv = LoadingProv();
MultiProvider(
providers: [
ChangeNotifierProvider<MapData>(create: (ctx) => MapData()),
ChangeNotifierProvider<LoadingProv>.value(value: loadingProv),
],
您可以使用此代码在更改时读取数据,它会自动刷新文本小部件
Text(context.watch<LoadingProv>().getGlobalLoadingState.toString());
on 调用 void 你可以使用这个
context.read<LoadingProv>().setGlobalLoading(true);