Flutter世界信息获取插件world_info_plus的使用

Flutter世界信息获取插件world_info_plus的使用

world_info_plus 是一个为Flutter开发提供的插件,可以用来获取全球250个国家的详细信息。这些信息包括国家的电话区号、时区、国家代码(ISO Alpha-2/Alpha-3/数字码)等。此外,该插件还支持基于设备语言环境的本地化国家名称。

演示图

特性

  • 详尽的国家数据:可访问多达250个国家的详细信息,如首都、大陆、货币、电话区号、时区等。
  • 本地化支持:根据用户的设备语言环境自动提供本地化的国家名称(如果可用)。
  • 易于集成:简单的API来获取所有国家、获取设备所在国家或通过其Alpha-2代码获取特定国家。
  • 可选的本地化加载:如果您希望使用每个国家的localizedName字段,则必须先调用initializeLocalizedName()函数。

快速开始

可选:初始化本地化名称

如果您想使用每个国家的本地化名称字段,您必须首先初始化本地化名称。这将加载适合设备语言环境的JSON文件。

import 'package:world_info_plus/world_info_plus.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 重要:调用此方法以加载本地化的国家名称(如果需要)
  await initializeLocalizedName();

  runApp(const MyApp());
}

基本用法

// 获取所有国家
List<Country> countries = WorldInfoPlus.countries;
print('Total countries: ${countries.length}');

// 获取设备语言环境
Locale deviceLocale = WorldInfoPlus.deviceLocale;
print('Device Locale: ${deviceLocale.toString()}');

// 获取设备所在的国家(基于设备语言环境)
Country? deviceCountry = WorldInfoPlus.deviceCountry;
print('Device Country: ${deviceCountry?.name ?? "Unknown"}');

// 通过Alpha-2代码获取特定国家(例如:"US", "KR", "FR")
Country? countryUS = WorldInfoPlus.getCountryByAlpha2('US');
print('Country Name: ${countryUS?.name}');
print('Country Localized Name: ${countryUS?.localizedName ?? "N/A"}');

公共API

world_info_plus 库通过 WorldInfoPlus 类提供了以下静态方法和属性:

API 返回类型 描述
WorldInfoPlus.countries List<Country> 返回所有可用国家的列表。
WorldInfoPlus.deviceLocale Locale 当前设备的语言环境,由 WidgetsBinding.instance.platformDispatcher.locale 衍生而来。
WorldInfoPlus.deviceCountry Country? 尝试匹配设备的语言环境国家代码到一个 Country。如果没有找到则返回 null
WorldInfoPlus.getCountryByAlpha2(String alpha2) Country? 通过ISO Alpha-2代码(例如:“US”, “FR”)获取一个 Country。如果没有找到则返回 null
initializeLocalizedName() Future<void> 基于设备的语言环境加载本地化的国家名称。在访问 localizedName 之前必须调用此函数。建议在 main 函数中调用此函数,以便在运行应用程序之前进行加载。

国家模型

每个国家由 Country 类表示,包含以下字段:

属性 类型 描述
name String 国家的正式英文名称(例如:“United States of America”)。
shortName String 较短或常见的英文名称(例如:“USA”)。
nativeName String 国家在其主要本地语言中的名称。
capital String 国家首都城市的名字。
continent String 大洲的名称(例如:“North America”, “Asia”)。
currency String 官方货币代码(例如:“Dollar”, “Euro”)。
callingCode String 国家的电话区号(例如:“1” 用于美国,“82” 用于韩国)。
timeZoneInCapital String 首都的主要时区(例如:“Asia/Seoul”)。
alpha2 String ISO Alpha-2 国家代码(例如:“US”, “KR”)。
alpha3 String ISO Alpha-3 国家代码(例如:“USA”, “KOR”)。
numeric String ISO 数字国家代码(例如:“840” 用于美国)。
tld String 国家的顶级域名(例如:“us”, “kr”)。
fips String 联邦信息处理标准代码。
localizedName String? 如果调用了 initializeLocalizedName() 则为本地化的名称;否则为 null
extra Map<String, dynamic>? 如果可用,则为附加信息。
imagePath String 国旗图像的路径,例如 "packages/world_info_plus/assets/flags/us.png"

示例代码

final country = WorldInfoPlus.getCountryByAlpha2('US');
if (country != null) {
  print('Name: ${country.name}');
  print('Short Name: ${country.shortName}');
  print('Localized Name: ${country.localizedName ?? "No localized name loaded"}');
  print('Capital: ${country.capital}');
  print('Continent: ${country.continent}');
  print('Currency: ${country.currency}');
  print('Calling Code: +${country.callingCode}');
  print('TimeZone: ${country.timeZoneInCapital}');
  print('Alpha2/Alpha3: ${country.alpha2} / ${country.alpha3}');
  print('Numeric: ${country.numeric}');
  print('TLD: ${country.tld}');
  print('FIPS: ${country.fips}');
  print('Image Path: ${country.imagePath}');
  print('Extra Info: ${country.extra}');
}

更多关于Flutter世界信息获取插件world_info_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter世界信息获取插件world_info_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


world_info_plus 是一个用于 Flutter 的插件,它可以帮助开发者获取与世界各地相关的信息,如国家、城市、时区、货币等。这个插件通常用于需要国际化或地理相关信息的应用程序中。

以下是使用 world_info_plus 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 world_info_plus 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  world_info_plus: ^1.0.0  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:world_info_plus/world_info_plus.dart';

3. 使用插件

接下来,你可以使用 WorldInfoPlus 类来获取世界各地的信息。

获取所有国家

List<Country> countries = await WorldInfoPlus.getCountries();
for (var country in countries) {
  print('Country: ${country.name}, Code: ${country.code}');
}

获取所有城市

List<City> cities = await WorldInfoPlus.getCities();
for (var city in cities) {
  print('City: ${city.name}, Country: ${city.countryCode}');
}

获取所有时区

List<Timezone> timezones = await WorldInfoPlus.getTimezones();
for (var timezone in timezones) {
  print('Timezone: ${timezone.name}, Offset: ${timezone.offset}');
}

获取所有货币

List<Currency> currencies = await WorldInfoPlus.getCurrencies();
for (var currency in currencies) {
  print('Currency: ${currency.code}, Name: ${currency.name}');
}

4. 处理数据

你可以根据应用程序的需求处理这些数据。例如,你可以在下拉列表中显示国家列表,或者根据用户的时区显示时间。

5. 错误处理

在使用插件时,建议添加错误处理逻辑,以应对可能出现的网络问题或数据解析错误。

try {
  List<Country> countries = await WorldInfoPlus.getCountries();
  // 处理数据
} catch (e) {
  print('Failed to load countries: $e');
}

6. 示例代码

以下是一个完整的示例代码,展示如何获取并显示所有国家的名称和代码:

import 'package:flutter/material.dart';
import 'package:world_info_plus/world_info_plus.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('World Info Plus Example'),
        ),
        body: CountryList(),
      ),
    );
  }
}

class CountryList extends StatefulWidget {
  [@override](/user/override)
  _CountryListState createState() => _CountryListState();
}

class _CountryListState extends State<CountryList> {
  List<Country> countries = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    loadCountries();
  }

  Future<void> loadCountries() async {
    try {
      List<Country> loadedCountries = await WorldInfoPlus.getCountries();
      setState(() {
        countries = loadedCountries;
      });
    } catch (e) {
      print('Failed to load countries: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: countries.length,
      itemBuilder: (context, index) {
        final country = countries[index];
        return ListTile(
          title: Text(country.name),
          subtitle: Text(country.code),
        );
      },
    );
  }
}
回到顶部