Flutter:如何在构建开始前获取设备语言环境列表?
Flutter: How can I get list of device locales before building starts?
我想将我的应用程序国际化。为了简化翻译,我想使用 i18n_extension 包。
在任何小部件构建过程开始之前,我需要获取设备区域设置列表(任何设备,甚至网络)。
这对于 I18n
和 Localizations
(在 WidgetsApp
中)初始设置正确的语言环境(可以从服务器获取)是必需的。
我发现获取设备语言环境列表的唯一方法是:
MaterialApp(
localeListResolutionCallback: (deviceLocales, appLocales) => myLocaleResolution(deviceLocales, appLocales),
locale: thisAppsLocale,
home: I18n(
child: MyHomePage(),
initialLocale: thisAppsLocale, ),
方法 myLocaleResolution
设置 thisAppsLocale
。方法在启动时和用户更改设备区域设置时调用一次。因此 thisAppsLocale
仅在第一个构建过程 之后可用,不能用于设置 locale
和 initialLocale
。在 myLocaleResolution
中使用 setState()
会在启动调用时引发异常。
使用window.locales
:
import 'dart:ui';
import 'package:flutter/material.dart';
void main(){
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
locale: window.locale,
supportedLocales: window.locales,
home: Scaffold(),
);
}
}
window
单例允许您访问 Window class。
我想将我的应用程序国际化。为了简化翻译,我想使用 i18n_extension 包。
在任何小部件构建过程开始之前,我需要获取设备区域设置列表(任何设备,甚至网络)。
这对于 I18n
和 Localizations
(在 WidgetsApp
中)初始设置正确的语言环境(可以从服务器获取)是必需的。
我发现获取设备语言环境列表的唯一方法是:
MaterialApp(
localeListResolutionCallback: (deviceLocales, appLocales) => myLocaleResolution(deviceLocales, appLocales),
locale: thisAppsLocale,
home: I18n(
child: MyHomePage(),
initialLocale: thisAppsLocale, ),
方法 myLocaleResolution
设置 thisAppsLocale
。方法在启动时和用户更改设备区域设置时调用一次。因此 thisAppsLocale
仅在第一个构建过程 之后可用,不能用于设置 locale
和 initialLocale
。在 myLocaleResolution
中使用 setState()
会在启动调用时引发异常。
使用window.locales
:
import 'dart:ui';
import 'package:flutter/material.dart';
void main(){
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
locale: window.locale,
supportedLocales: window.locales,
home: Scaffold(),
);
}
}
window
单例允许您访问 Window class。