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

Flutter开发:如何通过国家名称获取对应国家代码?

解决方案:中文国家名称转ISO 3166国家代码

方法1:使用intl包(推荐)

intl包内置多语言国家名称与代码的标准映射,原生支持中文,无需手动维护映射表。

步骤:

  1. 在pubspec.yaml中添加依赖:
dependencies:
  intl: ^0.18.1
  1. 执行flutter pub get安装依赖
  2. 实现转换逻辑:
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文件嵌入项目,比硬编码更易维护。

步骤:

  1. 在项目根目录创建assets/country_mapping.json,内容示例:
{
  "加拿大": "CA",
  "中国": "CN",
  "美国": "US",
  "英国": "GB",
  "澳大利亚": "AU"
}
  1. 在pubspec.yaml中配置资源:
flutter:
  assets:
    - assets/country_mapping.json
  1. 实现读取解析逻辑:
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:28