产品动态
公告
简体中文 | 繁体中文 | 英文 | 日语 | 韩语 | 阿拉伯语 |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
LocaleProvider 和 AtomicLocalizations 配置国际化语言。需要在您的应用的主入口使用 MultiProvider 包装,并在 MaterialApp 中做如下配置,可以参考 demo 实现:@overrideWidget build(BuildContext context) {return ComponentTheme(child: MultiProvider(providers: [// 切换语言的 provider,可监听语言变化并通知组件动态切换语言ChangeNotifierProvider.value(value: LocaleProvider()),],child: Builder(builder: (context) {final themeState = BaseThemeProvider.of(context);final isDarkMode = themeState.isDarkMode;// 获取语言 providerfinal localeProvider = Provider.of<LocaleProvider>(context);return MaterialApp(// ...... 省略其他配置localizationsDelegates: const [AtomicLocalizations.delegate,// ...... 可以添加其他组件的国际化语言],supportedLocales: AtomicLocalizations.supportedLocales, // 添加应用支持的语言locale: localeProvider.locale, // 设置当前语言);}),),);
LocaleProvider提供了切换语言的方法 changeLanguage,并且会把上一次选择的语言缓存在本地,当应用再次启动时可以获取 locale 字段得到前一次选择的语言。final localeProvider = Provider.of<LocaleProvider>(context, listen: false);// 切换语言:英文localeProvider.changeLanguage('en');
StatefulWidget 界面的State 子类会执行生命周期方法 didChangeDependencies,在该方法中初始化 AtomicLocalizations 对象,并使用自带的国际化词条。class ContactList extends StatefulWidget {const ContactList({super.key,});@overrideState<ContactList> createState() => _ContactListState();}class _ContactListState extends State<ContactList> {late AtomicLocalizations atomicLocale;// 省略其他代码@overridevoid didChangeDependencies() {super.didChangeDependencies();// 动态初始化atomicLocale = AtomicLocalizations.of(context);}@overrideWidget build(BuildContext context) {// 根据语言变化,选择 addFriend 词条对应的语言return Text(atomicLocale.addFriend);}}
l10n_<语言代码>.arb(如西班牙语:l10n_es.arb)。
flutter gen-l10n 命令后,localizations 目录下会增加该语言文件。
locale_provider.dart 中增加西班牙语缓存到本地的逻辑,调用 changeLanguage('es')方法即可切换为西班牙语。
flutter gen-l10n 命令即可。文档反馈