Flutter中如何获取全量可用货币列表(支持多语言名称)
Flutter 获取多语言全量货币列表方案
方法一:使用官方 intl 包(推荐)
intl 是Flutter官方的国际化工具包,可直接获取系统支持的货币信息并支持多语言本地化。
步骤1:添加依赖
在 pubspec.yaml 中引入 intl 包:
dependencies: flutter: sdk: flutter intl: ^0.18.1
步骤2:实现获取货币列表的代码
import 'package:intl/intl.dart'; import 'package:intl/number_symbols_data.dart'; import 'package:intl/number_symbols.dart'; // 获取指定语言的全量货币列表(含代码、名称、符号) Future<List<Map<String, String>>> fetchCurrencies(String localeCode) async { // 初始化指定语言的本地化数据 await initializeDateFormatting(localeCode); final locale = Locale(localeCode); // 获取所有可用货币代码 final allCurrencyCodes = NumberFormat.getCurrencyCodes(); final currencyList = <Map<String, String>>[]; for (final code in allCurrencyCodes) { // 获取货币符号 final symbol = _getCurrencySymbol(code, locale); // 获取指定语言下的货币名称 final name = await _getLocalizedCurrencyName(code, locale); currencyList.add({ 'code': code, 'name': name, 'symbol': symbol, }); } return currencyList; } // 获取指定语言的货币符号 String _getCurrencySymbol(String currencyCode, Locale locale) { final numberSymbols = numberSymbols[locale.toString()] ?? numberSymbols['en_US']; return numberSymbols?.currencySymbolMap?[currencyCode] ?? currencyCode; } // 获取指定语言的货币名称 Future<String> _getLocalizedCurrencyName(String currencyCode, Locale locale) async { final formatter = CurrencyNameFormatter(locale); return formatter.format(currencyCode); }
调用示例
void main() async { // 获取中文简体环境下的货币列表 final zhCurrencies = await fetchCurrencies('zh_CN'); print(zhCurrencies.first); // 输出: {code: AED, name: 阿联酋迪拉姆, symbol: د.إ} // 获取英文美国环境下的货币列表 final enCurrencies = await fetchCurrencies('en_US'); print(enCurrencies.first); // 输出: {code: AED, name: UAE Dirham, symbol: د.إ} }
注意事项
- 首次调用需执行
initializeDateFormatting加载本地化数据,避免名称或符号获取失败 - 部分小众货币在特定语言环境下无本地化名称时,会返回货币代码本身
- 货币符号会随语言环境变化,部分地区可能显示本地化符号
方法二:使用第三方 currency_picker 包
如果需要更全的货币数据(如小数位数、国家关联信息),可使用封装好的第三方包:
步骤1:添加依赖
dependencies: flutter: sdk: flutter currency_picker: ^2.0.16
步骤2:获取货币列表
import 'package:currency_picker/currency_picker.dart'; void getFullCurrencyList() { // 获取全量货币数据 final allCurrencies = CurrencyService().getAll(); for (final currency in allCurrencies) { print('代码: ${currency.code}, 名称: ${currency.name}, 符号: ${currency.symbol}'); // 获取指定语言的货币名称 final zhName = CurrencyService().getLocalizedName(currency.code, const Locale('zh')); print('中文名称: $zhName'); } }
优势
- 无需手动初始化本地化数据,自带多语言支持
- 包含额外货币属性(如小数位数、国家代码)
- 货币数据更全面,覆盖更多小众币种
内容的提问来源于stack exchange,提问作者Vergiliy
相关产品推荐
相关产品推荐

