flutter - 如何在 Flutter 的 initState 中获取当前的 App Locale?

标签 flutter

我需要根据当前应用区域设置使用提供程序在 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/

相关文章:

flutter - 如何在flutter中使用FileSystemEntity.watch()?

dart - 触发从小部件到状态对象的函数

Flutter - 将 24 小时格式转换为 12 小时格式

flutter - 在Flutter Firestore中, 'Future<dynamic>'类型不是 '() => void'类型的子类型

Flutter:如何为任何容器实现旋转和平移/移动手势?

flutter - Flutter检测Navigator准备就绪的时间

flutter 如何在不占用任何空间的情况下从 ui 中隐藏小部件

dart - Flutter中 "context"的 "Widget build(BuildContext context)"是什么意思?

flutter - inappwebview中的全屏图标太小了

flutter - 如何将共享功能添加到 flutter 中的图标[在社交媒体中单击按钮共享应用程序]