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

Flutter如何获取仅含国家名与代码的下拉选择组件国家列表

目标下拉选择效果

Flutter 获取国家名称+对应国家代码下拉数据源实现

下面三种方案按需选择即可,都能直接拿到仅包含国家名称、国家代码的结构化数据,适配下拉选择组件:

方案1:引入轻量纯数据依赖(最省事,数据维护成本为0)

不用自己整理国家数据,直接用社区维护的合规ISO标准数据源,不带冗余UI逻辑,包体积极小。

  1. 在pubspec.yaml添加依赖(版本号可自行查找最新稳定版):
dependencies:
  world_countries: ^2.3.0
  1. 直接提取需要的两个字段生成列表:
import 'package:world_countries/world_countries.dart';

// 返回的列表可以直接传给DropdownButton的items属性
List<Map<String, String>> getSimpleCountryList() {
  return WorldCountries.values.map((item) {
    return {
      // 国家名称,需要中文的话可以搭配本地化配置
      "name": item.name,
      // ISO 3166-1 alpha-2标准二位国家代码,比如CN、US、JP
      "code": item.codeShort,
    };
  }).toList();
}

方案2:本地内置静态数据(最灵活,完全可控)

不想引入第三方依赖的话,直接自己维护精简的国家列表,只保留需要的字段,多余内容全删掉。

  • 可以直接把数据写成Dart常量,不用额外读资源文件:
// 可以放在全局常量文件里,全局直接调用
const List<Map<String, String>> simpleCountryList = [
  {"name": "中国", "code": "CN"},
  {"name": "美国", "code": "US"},
  {"name": "日本", "code": "JP"},
  {"name": "韩国", "code": "KR"},
  {"name": "英国", "code": "GB"},
  // 按需补全你需要展示的国家即可
];

如果国家数量多,也可以把数据存成json文件放在assets目录,启动时读取加载,逻辑和常量写法一致。这种方式可以自由筛选要展示的国家,不需要把所有主权国家都列出来,完全适配业务需求。

方案3:直接用封装好的国家选择组件(省掉自己写下拉UI的成本)

如果不需要高度自定义UI,直接用现成的国家选择组件包,内置的数据源已经包含国家名称、代码、国旗、区号等信息,你只需要配置隐藏不需要的字段,只展示名称和代码即可,不用单独处理数据源。

下拉组件适配示例

拿到列表数据之后,直接传给Flutter原生的DropdownButton就能实现目标效果:

String? selectedCode;

@override
Widget build(BuildContext context) {
  return DropdownButton<String>(
    value: selectedCode,
    hint: const Text("请选择国家"),
    items: simpleCountryList.map((country) {
      return DropdownMenuItem<String>(
        value: country["code"],
        child: Text("${country["name"]} (${country["code"]})"),
      );
    }).toList(),
    onChanged: (value) {
      setState(() {
        selectedCode = value;
      });
    },
  );
}

注意事项

  • 国家代码统一用ISO 3166-1标准编码,不要自定义编码规则,避免后续对接接口、做多语言适配时出现兼容问题
  • 需要多语言切换的场景,不要硬编码国家名称,搭配Flutter本地化arb文件做不同语言的名称映射即可

内容的提问来源于stack exchange,提问作者bidyut das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:42:30