Flutter中如何获取主机操作系统配置的Locales列表?
获取Flutter主机系统配置的Locales列表
方法一:通过WidgetsBinding直接获取(推荐,无需额外插件)
你可以利用Flutter框架自带的WidgetsBinding相关API,按需读取系统配置的完整Locales列表,无需依赖首次启动时的回调缓存:
- 对于Flutter 3.0及以上版本,使用
PlatformDispatcher的locales属性:
final locales = WidgetsBinding.instance.platformDispatcher.locales; // locales为List<Locale>类型,包含系统所有配置的区域设置
- 针对Flutter 3.0以下的旧版本,可使用已标记为Deprecated的
window.locales:
final locales = WidgetsBinding.instance.window.locales;
该方式随时调用都能获取当前系统的完整Locales列表,完全满足按需读取的需求。
方法二:借助第三方插件获取(补充方案)
如果需要更细化的设备区域信息,可使用device_info_plus插件:
- 在
pubspec.yaml中添加依赖:
dependencies: device_info_plus: ^9.0.2
- 编写代码跨平台获取Locales:
import 'package:device_info_plus/device_info_plus.dart'; import 'dart:io'; import 'package:flutter/material.dart'; Future<List<Locale>> getSystemLocales() async { final deviceInfo = DeviceInfoPlugin(); List<Locale> locales = []; if (Platform.isAndroid) { final androidInfo = await deviceInfo.androidInfo; locales = androidInfo.systemLocales.map((item) => Locale.fromSubtags(languageCode: item.language, countryCode: item.country) ).toList(); } else if (Platform.isIOS) { final iosInfo = await deviceInfo.iosInfo; locales = iosInfo.preferredLanguages.map((lang) => Locale(lang)).toList(); } return locales; }
注意事项
- 多数平台下上述方法均可正常获取Locales列表,仅极少数特殊设备可能存在权限限制。
PlatformDispatcher.locales返回的列表顺序与系统配置的优先级一致,第一个元素即为当前活跃的区域设置。
内容的提问来源于stack exchange,提问作者SePröbläm
相关产品推荐
相关产品推荐

