Flutter中的Provider在App的第一次构建时不返回。在我的应用程序中,您可以选择应用程序的主要颜色。因此,当我将其设置为颜色2(int表示颜色)时,我使用共享首选项保存它,并使用provider在每个页面和小部件中使用它。很简单!但在应用程序的第一次构建时,它并没有获取颜色。图片更好地理解:
当应用程序启动时:App
使用导航栏时:App
希望你能理解使用图片的问题。有人可以帮助它获取颜色立即在应用程序的第一个构建。这是用于切换颜色的提供程序:
class ColorProvider with ChangeNotifier {
int _selectedColor = 0;
Color _mainColor = Colors.blue;
ColorProvider() {
_getColor();
}
int get selectedColor => _selectedColor;
set selectedColor(int index) {
_selectedColor = index;
_saveColor();
notifyListeners();
}
Color get mainColor => _mainColor;
Future<void> _saveColor() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setInt('_selectedColorKey', _selectedColor);
}
Future<void> _getColor() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final savedSelectedColor = prefs.getInt('_selectedColorKey');
if (savedSelectedColor != null) {
_selectedColor = savedSelectedColor;
}
}
// This code can be used in another widget the
// provider and prefs only saves an int so with this you can choose (this isn't too important)
_getMainClr(int no) {
switch (no) {
case 0:
_mainColor = blueClr;
return blueClr;
case 1:
_mainColor = tifBlueClr;
return tifBlueClr;
case 2:
_mainColor = yellowClr;
return yellowClr;
default:
_mainColor = blueClr;
return blueClr;
}
}
}
}
我试图实现这段代码,以便它可以在开始时获取getPrefs
,但上面的color Provider
已经基本做到了这一点,但这段代码值得一试。
@override
void initState() {
super.initState();
getPrefs();
}
Future<void> getPrefs() async {
//Get the int selected Color
setState(() {});
}
1条答案
按热度按时间zphenhs41#
您遇到的问题是由于从SharedPreferences获取数据的异步性质。为了解决这个问题,您可以在
ColorProvider
中创建一个名为init()
的方法,并像这样调用它:然后像这样调用
init()
:快乐编码...