gpt4 book ai didi

flutter - 无需每次调用​​ `of(context)` 的 AppLocalizations

转载 作者:IT王子 更新时间:2023-10-29 06:56:32 29 4
gpt4 key购买 nike

我使用 the official Flutter localization plugin 找到本地化程序麻烦。要显示本地化字符串,我必须调用 AppLocalizations.of(context).myAppTitle - 在包含大量本地化字符串的巨大嵌套 Widget 树中,这不是很流畅或容易浏览。更不用说它看起来很丑了。

有没有办法让使用更好?例如,我可以使用一个全局变量或一个带有 AppLocalizations 实例成员的静态类来使访问更容易吗?例如声明一个顶级 AppLocalizations 变量

// Somewhere in the global scope
AppLocalizations l;


// main.dart
class _MyAppState extends State<MyApp>{

@override
void initState() {
super.initState();
getLocaleSomehow().then((locale){
l = Localization(locale);
setState((){});
});
}
}

然后我可以简单地调用

Text(l.myAppTitle)

所以本质上我要问的是“不调用 AppLocalizations.of(context) 有什么危险和/或缺点?”

如果我真的需要使用 .of(BuildContext) 方法来访问 AppLocalizations 实例 - 我至少可以将它存储在我的 StatefulWidget?我在想类似的事情

class DetailsPage extends StatefulWidget{
AppLocalizations _l;

@override
Widget build(BuildContext context) {
_l = AppLocalizations.of(context);

// ... build widgets ...
}
}

或者有没有其他方法可以让本地化不那么麻烦?

最佳答案

是的,这是需要的。您可以解决它,但这是个坏主意。

原因是Localization.of<T>(context, T)可能会随着时间的推移而更新。它确实存在的一些情况是:

  • 语言环境改变了
  • 获取到的LocalizationsDelegate是异步加载的
  • MaterialApp/CupertinoApp 更新了新的翻译

如果您没有正确调用 Localization.ofbuild 中,那么在这些情况下,您的 UI 可能无法正确更新。

关于flutter - 无需每次调用​​ `of(context)` 的 AppLocalizations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56675248/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com