Flutter国家列表选择插件list_country_picker的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter国家列表选择插件list_country_picker的使用

插件简介

list_country_picker 是一个用于自定义国家选择的Flutter插件,支持多语言(如阿拉伯语、英语和法语)。以下是该插件的使用说明和完整示例代码。

封面图

演示图

安装

  1. pubspec.yaml 文件中添加以下依赖:
dependencies:
  list_country_picker: any
  1. 使用IDE的GUI或命令行安装包:
$ pub get
  1. 在应用中导入 list_country_picker.dart 文件:
import 'package:list_country_picker/list_country_picker.dart';

功能

  • 通过国家名称或代码选择国家
  • 支持阿拉伯语、英语和法语

使用方法

默认用法

ListCountryPicker(
    onCountryChanged: (value) {
        setState(() {
            _country = value;
        });
    },
    child: const Icon(Icons.arrow_drop_down),
)

阿拉伯语示例

ListTile(
    title: Text(_country?.name ?? 'إختر الدوله'),
    trailing: ListCountryPicker(
        dialogTitle: 'إختر الدوله',
        locale: const Locale('ar'),
        onCountryChanged: (value) {
             setState(() {
                _country = value;
            });
        },
        child: const Icon(Icons.arrow_drop_down),
    ),
),

英语示例

ListTile(
    title: Text(_country?.name ?? 'Select country'),
    trailing: ListCountryPicker(
        onCountryChanged: (value) {
            setState(() {
                _country = value;
            });
        },
        child: const Icon(Icons.arrow_drop_down),
    ),
),

法语示例

ListTile(
    title: Text(_country?.name ?? 'Choisissez un pays'),
    trailing: ListCountryPicker(
        dialogTitle: 'Choisissez un pays',
        locale: const Locale('fr'),
        onCountryChanged: (value) {
            setState(() {
                _country = value;
            });
        },
        child: const Icon(Icons.arrow_drop_down),
    ),
),

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 list_country_picker 插件,并支持阿拉伯语、英语和法语切换。

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

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

  String selectedLang = 'ar';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("List Country Picker"),
      ),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            // 语言选择按钮
            Row(
              children: ['ar', 'en', 'fr']
                  .map((e) => Expanded(
                        child: GestureDetector(
                          onTap: () {
                            selectedLang = e;
                            _country = null;
                            setState(() {});
                          },
                          child: Container(
                            padding: const EdgeInsets.all(16),
                            decoration: BoxDecoration(
                              color: selectedLang == e
                                  ? Colors.green
                                  : Colors.green.withOpacity(0.1),
                            ),
                            child: Text(
                              e.toString(),
                              textScaleFactor: 2,
                              textAlign: TextAlign.center,
                            ),
                          ),
                        ),
                      ))
                  .toList(),
            ),

            // 根据选择的语言显示不同的国家选择器
            if (selectedLang == 'ar')
              ListTile(
                title: Text(_country?.name ?? 'إختر الدوله'),
                trailing: ListCountryPicker(
                  dialogTitle: 'إختر الدوله',
                  locale: const Locale('ar'),
                  onCountryChanged: (value) {
                    print(value);
                    setState(() {
                      _country = value;
                    });
                  },
                  child: const Icon(Icons.arrow_drop_down),
                ),
              ),
            if (selectedLang == 'en')
              ListTile(
                title: Text(_country?.name ?? 'Select country'),
                trailing: ListCountryPicker(
                  locale: const Locale('en'),
                  onCountryChanged: (value) {
                    setState(() {
                      _country = value;
                    });
                  },
                  child: const Icon(Icons.arrow_drop_down),
                ),
              ),
            if (selectedLang == 'fr')
              ListTile(
                title: Text(_country?.name ?? 'Choisissez un pays'),
                trailing: ListCountryPicker(
                  dialogTitle: 'Choisissez un pays',
                  locale: const Locale('fr'),
                  onCountryChanged: (value) {
                    setState(() {
                      _country = value;
                    });
                  },
                  child: const Icon(Icons.arrow_drop_down),
                ),
              ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用list_country_picker插件来选择国家列表的一个简单示例。这个插件允许用户从下拉列表中选择一个国家,并获取相关的国家信息。

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

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

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

接下来,你可以在你的Flutter项目中使用CountryPicker小部件。下面是一个完整的示例代码:

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Country Picker Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            CountryPickerDropdown(
              initialSelection: 'US',
              favorite: ['+1', 'CN', 'IN'],
              onChanged: (Country country) {
                setState(() {
                  selectedCountry = country;
                });
              },
              itemBuilder: (Country country) {
                return Text("${country.name} (+${country.phoneCode})");
              },
              searchDecoratorStyle: InputDecoration(
                labelText: 'Search for a country',
              ),
            ),
            SizedBox(height: 20),
            if (selectedCountry != null)
              Text(
                'Selected Country: ${selectedCountry!.name} (+${selectedCountry!.phoneCode})',
                style: TextStyle(fontSize: 20),
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的Flutter应用,包含一个CountryPickerDropdown小部件。
  2. initialSelection参数设置了初始选中的国家代码(这里是美国,代码为’US’)。
  3. favorite参数设置了一些常用的国家代码,以便它们在搜索时出现在列表顶部。
  4. onChanged回调在选中国家改变时被调用,我们在这里更新selectedCountry状态。
  5. itemBuilder参数允许我们自定义每个国家项在列表中的显示方式。
  6. searchDecoratorStyle参数允许我们自定义搜索输入框的样式。

当用户选择一个国家时,selectedCountry状态将被更新,并在页面上显示选中的国家名称和电话代码。

请确保你已经正确安装了list_country_picker插件,并根据需要调整代码中的参数和样式。

回到顶部