我需要根据当前应用程序区域设置使用提供程序在 initState 方法中获取数据。
这是我的代码:
initState() {
super.initState();
Locale myLocale = Localizations.localeOf(context);
context.read<ApiProvider>().getHomeData(myLocale.languageCode);
}
Run Code Online (Sandbox Code Playgroud)
导致此错误:
在 _HomePageState.initState() 完成之前调用 dependentOnInheritedWidgetOfExactType<_LocalizationsScope>() 或 dependentOnInheritedElement()。
显然,您无法在 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();
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以简单地在 this 中调用您的方法Widget build(),因为只有在此处构建小部件之后,所有方法才有效
@override
Widget build(BuildContext context) {
// simply call your method here, no initialize variable required
_initializeLocale(context);
return Scaffold();
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助。保持学习 :)
| 归档时间: |
|
| 查看次数: |
3188 次 |
| 最近记录: |