ChangeNotifierProvider 未被调用
ChangeNotifierProvider Not Being called
未调用我的 ChangeNotifierProvider....
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyGlobals>(
builder: (context) => MyGlobals(),
child: MaterialApp(
theme: MyGlobals().GetTheme() == "dark" ? ThemeData(fontFamily: 'ERAS', primaryColor: Colors.black, accentColor: Colors.amberAccent, secondaryHeaderColor: Colors.black54):
ThemeData(fontFamily: 'ERAS', primaryColor: Colors.white, accentColor: Colors.black, secondaryHeaderColor: Colors.white70),
home: MyHomePage(),
));
}
}
这是 MyGlobals:
String _theme = "dark";
class MyGlobals with ChangeNotifier {
getTheme() => _theme;
void setTheme(String _themecolor) {
_theme = _themecolor;
notifyListeners();
}
}
我没有收到任何错误,只是没有被调用。我从另一个 .dart 文件调用 setTheme 并且它不是 changenotifierprovider 没有被调用。 MyGlobals 是一个独立于上面 ChangeNotifierProvider 代码的 .dart 文件。
您需要一个 Consumer
小部件来监听您在 Model
中所做的更改,如下所示:
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyGlobals>(
builder: (context) => MyGlobals(),
child: Consumer<MyGlobals>(
builder: (_, model, __) {
return MaterialApp(
theme: model.getTheme() == "dark"
? ThemeData(
fontFamily: 'ERAS',
primaryColor: Colors.black,
accentColor: Colors.amberAccent,
secondaryHeaderColor: Colors.black54)
: ThemeData(
fontFamily: 'ERAS',
primaryColor: Colors.white,
accentColor: Colors.black,
secondaryHeaderColor: Colors.white70),
home: MyHomePage(),
);
},
),
);
}
那么你可以这样更新你的主题:
Provider.of<MyGlobals>(context).setTheme("your_theme")
未调用我的 ChangeNotifierProvider....
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyGlobals>(
builder: (context) => MyGlobals(),
child: MaterialApp(
theme: MyGlobals().GetTheme() == "dark" ? ThemeData(fontFamily: 'ERAS', primaryColor: Colors.black, accentColor: Colors.amberAccent, secondaryHeaderColor: Colors.black54):
ThemeData(fontFamily: 'ERAS', primaryColor: Colors.white, accentColor: Colors.black, secondaryHeaderColor: Colors.white70),
home: MyHomePage(),
));
}
}
这是 MyGlobals:
String _theme = "dark";
class MyGlobals with ChangeNotifier {
getTheme() => _theme;
void setTheme(String _themecolor) {
_theme = _themecolor;
notifyListeners();
}
}
我没有收到任何错误,只是没有被调用。我从另一个 .dart 文件调用 setTheme 并且它不是 changenotifierprovider 没有被调用。 MyGlobals 是一个独立于上面 ChangeNotifierProvider 代码的 .dart 文件。
您需要一个 Consumer
小部件来监听您在 Model
中所做的更改,如下所示:
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyGlobals>(
builder: (context) => MyGlobals(),
child: Consumer<MyGlobals>(
builder: (_, model, __) {
return MaterialApp(
theme: model.getTheme() == "dark"
? ThemeData(
fontFamily: 'ERAS',
primaryColor: Colors.black,
accentColor: Colors.amberAccent,
secondaryHeaderColor: Colors.black54)
: ThemeData(
fontFamily: 'ERAS',
primaryColor: Colors.white,
accentColor: Colors.black,
secondaryHeaderColor: Colors.white70),
home: MyHomePage(),
);
},
),
);
}
那么你可以这样更新你的主题:
Provider.of<MyGlobals>(context).setTheme("your_theme")