Flutter开发:如何通过国家名称获取对应国家代码?
解决方案:中文国家名称转ISO 3166国家代码
方法1:使用intl包(推荐)
intl包内置多语言国家名称与代码的标准映射,原生支持中文,无需手动维护映射表。
步骤:
- 在
pubspec.yaml中添加依赖:
dependencies: intl: ^0.18.1
- 执行
flutter pub get安装依赖 - 实现转换逻辑:
import 'package:intl/intl.dart'; import 'package:intl/locale_data.dart'; // 建议在App启动时初始化一次本地化数据 Future<void> initCountryMapping() async { await initializeLocaleData('zh'); } // 根据中文国家名称获取两位国家代码 String? getCountryCode(String countryName) { final countryNames = CountryNames('zh'); return countryNames.nameToCode(countryName); } // 使用示例 void main() async { await initCountryMapping(); print(getCountryCode('加拿大')); // 输出 CA }
注意:输入的国家名称需要和intl内置的中文名称完全匹配,比如“美国”“美利坚合众国”都能识别,但要避免使用非标准简称。
方法2:嵌入轻量JSON映射文件
如果不想依赖第三方包,可以把常用的国家名称-代码映射做成JSON文件嵌入项目,比硬编码更易维护。
步骤:
- 在项目根目录创建
assets/country_mapping.json,内容示例:
{ "加拿大": "CA", "中国": "CN", "美国": "US", "英国": "GB", "澳大利亚": "AU" }
- 在
pubspec.yaml中配置资源:
flutter: assets: - assets/country_mapping.json
- 实现读取解析逻辑:
import 'dart:convert'; import 'package:flutter/services.dart'; Future<String?> getCountryCode(String countryName) async { final jsonString = await rootBundle.loadString('assets/country_mapping.json'); final Map<String, String> countryMap = json.decode(jsonString); return countryMap[countryName]; } // 使用示例 void main() async { print(await getCountryCode('加拿大')); // 输出 CA }
这种方法可以自定义需要支持的国家列表,避免冗余数据,适合仅需覆盖部分国家的场景。
方法3:检查所用国旗包的内置映射
部分Flutter国旗包本身内置了国家代码与名称的双向映射,你可以查看所用包的官方文档,比如country_flags或flutter_flag,有些包提供了反向查询API,可直接通过名称获取代码。
内容的提问来源于stack exchange,提问作者Zaid
相关产品推荐
相关产品推荐

