You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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插件:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  device_info_plus: ^9.0.2
  1. 编写代码跨平台获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:18:12