Flutter国家选择器插件easy_country_picker的使用

Flutter国家选择器插件easy_country_picker的使用

特性

  • 当用户在文本框中开始输入国家名称时,会根据用户输入的内容建议相应的国家名称。
  • 用户可以从建议列表中选择一个国家。
  • 这将返回一个包含以下信息的Country对象:
    • 国家代码,
    • 国家名称,
    • 货币代码,
    • 电话区号,
    • 大洲名称。

开始使用

安装该插件并开始使用。

使用方法

这个插件可以在注册表单中使用,以获取用户的国家信息。用户无需手动输入电话区号或货币代码,你可以在用户选择国家后自动填充这些信息。

示例代码

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

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Country? country;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: [
            // 用于选择国家的字段
            SizedBox(
              width: 400,
              child: CountrySelectionField(
                onCountrySelect: (val) {
                  setState(() {
                    country = val;
                  });
                },
                inputDecoration: InputDecoration(
                  prefixIcon: const Icon(Icons.public),
                  hintText: 'Select Country',
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(8.0),
                  ),
                  filled: true,
                  fillColor: Colors.grey[200],
                ),
              ),
            ),
            const SizedBox(height: 20),
            // 显示所选国家的详细信息
            SizedBox(
              width: 400,
              child: Card(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      const Text("Selected Country Details"),
                      Text("Country Code: ${country?.countryCode}"),
                      Text("Country Name: ${country?.countryName}"),
                      Text("Phone Code: ${country?.phoneNumberPrefix}"),
                      Text("Continent: ${country?.continentName}"),
                      Text("Currency: ${country?.currencyCode}"),
                    ],
                  ),
                ),
              ),
            ),
            const SizedBox(height: 10),
            // 按钮用于显示模态底部选择器
            ElevatedButton(
              onPressed: () async {
                await CountryPicker.selectCountry(
                  context,
                ).then((value) {
                  if (value != null) {
                    setState(() {
                      country = value;
                    });
                  }
                });
              },
              child: const Text("Select Country"),
            ),
          ],
        ),
      ),
    );
  }
}

效果图

配置模态底部选择器

你可以通过以下参数配置模态底部选择器:

  • double? height,
  • ShapeBorder shape = const RoundedRectangleBorder(borderRadius: BorderRadius.zero),
  • Color? backgroundColor,
  • double contentpadding = 10,
  • bool showCloseButton = false,

附加信息

Country

Country 类包含了国家的相关信息。

class Country {
  String? countryCode;
  String? countryName;
  String? currencyCode;
  String? phoneNumberPrefix;
  String? continentName;

  Country({
    this.countryCode,
    this.countryName,
    this.currencyCode,
    this.phoneNumberPrefix,
    this.continentName,
  });

  factory Country.fromMap(Map<String, dynamic> map) {
    return Country(
      countryCode: map['countryCode'],
      countryName: map['countryName'],
      currencyCode: map['currencyCode'],
      phoneNumberPrefix: map['phoneNumberPrefix'],
      continentName: map['continentName'],
    );
  }
}

国家列表

一个包含所有国家数据的列表。

List<Map<String, String>> countryList = [
  {
    "countryCode": "AD",
    "countryName": "安道尔",
    "currencyCode": "EUR",
    "phoneNumberPrefix": "+376",
    "continentName": "欧洲"
  },
  {
    "countryCode": "AE",
    "countryName": "阿拉伯联合酋长国",
    "currencyCode": "AED",
    "phoneNumberPrefix": "+971",
    "continentName": "亚洲"
  },
  {
    "countryCode": "AF",
    "countryName": "阿富汗",
    "currencyCode": "AFN",
    "phoneNumberPrefix": "+93",
    "continentName": "亚洲"
  },
  // 所有国家数据...
];

CountrySelectionField

这个类有两个参数:

  • final Function(Country?)? onCountrySelect;:用户选择国家时返回的Country对象。
  • final InputDecoration inputDecoration;:用于更新文本框的外观。

文本框大小

文本框没有特定的大小,可以将其包裹在SizedBox中以设置所需的大小。

body: SizedBox(
  width: 100,
  child: CountrySelectionField(),
),

更多关于Flutter国家选择器插件easy_country_picker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter国家选择器插件easy_country_picker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用easy_country_picker插件的一个示例。这个插件允许你轻松地在应用中实现国家选择器。

首先,确保你已经在pubspec.yaml文件中添加了easy_country_picker依赖:

dependencies:
  flutter:
    sdk: flutter
  easy_country_picker: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Dart文件中,你可以按照以下步骤使用easy_country_picker

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Country Picker Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CountryPickerDemo(),
    );
  }
}

class CountryPickerDemo extends StatefulWidget {
  @override
  _CountryPickerDemoState createState() => _CountryPickerDemoState();
}

class _CountryPickerDemoState extends State<CountryPickerDemo> {
  String? selectedCountryCode;
  String? selectedCountryName;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Country Picker Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Country: ${selectedCountryName ?? 'None'} (${selectedCountryCode ?? ''})',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            EasyCountryPicker(
              onSelect: (CountryCode countryCode) {
                setState(() {
                  selectedCountryCode = countryCode.code;
                  selectedCountryName = countryCode.name;
                });
              },
              favorite: ['US', 'CN', 'IN'], // 可选:设置初始的收藏国家代码列表
              searchCursorColor: Colors.blue,
              searchActiveColor: Colors.lightBlueAccent,
              searchInactiveColor: Colors.grey,
              pickerTextStyle: TextStyle(fontSize: 18),
              searchDecoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Search for a country',
              ),
              itemFilter: (CountryCode code) => true, // 可选:用于过滤显示的国家
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的Flutter应用,其中包含一个CountryPickerDemo页面。
  2. CountryPickerDemo页面中,我们使用EasyCountryPicker小部件来显示国家选择器。
  3. 当用户选择一个国家时,onSelect回调会被触发,并更新选中的国家代码和名称。
  4. 我们还设置了一些可选参数,比如收藏的国家代码列表、搜索栏的样式和颜色等。

你可以根据需要进一步自定义这个示例,比如添加更多的样式、处理用户输入等。希望这个示例能帮助你更好地理解如何在Flutter项目中使用easy_country_picker插件。

回到顶部