我需要根据当前应用区域设置使用提供程序在 initState 方法中获取数据。
这是我的代码:
initState() {
super.initState();
Locale myLocale = Localizations.localeOf(context);
context.read<ApiProvider>().getHomeData(myLocale.languageCode);
}
导致此错误:
dependOnInheritedWidgetOfExactType<_LocalizationsScope>() or dependOnInheritedElement() was called before _HomePageState.initState() completed.
最佳答案
显然,您不能在 initState 期间访问current App Locale
(更具体地说:在它完成之前)。
我相信,原因是 Locale
试图在树中向上查找 InheritedWidget 祖先,但树刚刚被构建(您的小部件是在父小部件构建期间创建的)
- 尽量不要在构建小部件时执行该操作。保持检查
- 有一个变量来检查小部件何时构建,然后您可以调用它
class _HomePageState extends State<Test> {
bool isInitialized = false;
@override
void initState() {
super.initState();
}
void _initializeLocale(BuildContext context){
Locale myLocale = Localizations.localeOf(context);
context.read<ApiProvider>().getHomeData(myLocale.languageCode);
}
@override
Widget build(BuildContext context) {
// Setting the initialize to true, when widget is built
// to perform our operation
setState(() {
isInitialized = true;
// calling our method when it is ready and initialized
_initializeLocale(context);
});
return Scaffold();
}
}
或者您可以简单地在此 Widget build()
中调用您的方法,因为所有方法都有效,仅在此处构建 Widget 之后
@override
Widget build(BuildContext context) {
// simply call your method here, no initialize variable required
_initializeLocale(context);
return Scaffold();
}
希望对您有所帮助。继续学习:)
关于flutter - 如何在 Flutter 的 initState 中获取当前的 App Locale?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62363577/