Flutter国际化电话号码输入插件international_phone_input的使用

Flutter国际化电话号码输入插件international_phone_input的使用

international_phone_input

International Phone Number Input For Flutter



Usage

只需将组件放入您的应用程序中。

import 'package:international_phone_input/international_phone_input.dart';

String phoneNumber;
String phoneIsoCode;

// 当电话号码发生变化时调用此方法
void onPhoneNumberChange(String number, String internationalizedPhoneNumber, String isoCode) {
    setState(() {
       phoneNumber = number;
       phoneIsoCode = isoCode;
    });
}

// 默认带下拉列表的 Widget
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
     body: Center(
       child: InternationalPhoneInput(
          onPhoneNumberChange: onPhoneNumberChange, 
          initialPhoneNumber: phoneNumber,
          initialSelection: phoneIsoCode,
          enabledCountries: ['+233', '+1'] // 可用国家列表
       ),
     ),
 );

// 仅包含文本输入的 Widget
onValidPhoneNumber(
      String number, String internationalizedPhoneNumber, String isoCode) {
    setState(() {
      confirmedNumber = internationalizedPhoneNumber;
    });
  }

[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
     body: Center(
       child: InternationalPhoneInputText(
         onValidPhoneNumber: onValidPhoneNumber,
        ),
     ),
 );

// 带装饰的 Widget
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
     body: Center(
       child: InternationalPhoneInput(
          decoration: InputDecoration.collapsed(hintText: '(416) 123-4567'),
          onPhoneNumberChange: onPhoneNumberChange, 
          initialPhoneNumber: phoneNumber,
          initialSelection: phoneIsoCode,
          enabledCountries: ['+233', '+1'],
          showCountryCodes: false // 隐藏国家代码
       ),
     ),
 );

Customization

以下是可用于自定义 Widget 的属性列表:

名称 类型 描述
initialPhoneNumber String 用于设置初始电话号码
initialSelection String 用于设置初始国家代码
errorText String 用于设置错误消息
hintText String 设置提示
labelText String 设置标签
errorStyle TextStyle 应用于错误消息的样式
hintStyle TextStyle 应用于提示的样式
labelStyle TextStyle 应用于标签的样式
errorMaxLines int 用户可以输入的最大行数
enabledCountries List 显示的可用国家列表
decoration InputDecoration 应用于 TextField 的装饰
showCountryCodes bool 是否显示国家代码(默认为 true)
showCountryFlags bool 是否显示国家标志(默认为 true)
dropdownIcon Widget 用于自定义下拉图标

示例代码

以下是一个完整的示例代码,展示如何使用 international_phone_input 插件:

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

void main() => runApp(MyApp());

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

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

class _MyHomePageState extends State<MyHomePage> {
  String phoneNumber;
  String phoneIsoCode;
  bool visible = false;
  String confirmedNumber = '';

  // 处理电话号码变化
  void onPhoneNumberChange(
      String number, String internationalizedPhoneNumber, String isoCode) {
    print(number);
    setState(() {
      phoneNumber = number;
      phoneIsoCode = isoCode;
    });
  }

  // 处理有效电话号码验证
  onValidPhoneNumber(
      String number, String internationalizedPhoneNumber, String isoCode) {
    setState(() {
      visible = true;
      confirmedNumber = internationalizedPhoneNumber;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('International Phone Input Example'),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            Spacer(flex: 1),
            // 默认 Widget
            InternationalPhoneInput(
              onPhoneNumberChange: onPhoneNumberChange,
              initialPhoneNumber: phoneNumber,
              initialSelection: phoneIsoCode,
              enabledCountries: ['+233', '+1'],
              labelText: "Phone Number",
            ),
            SizedBox(height: 20),
            // 带装饰的 Widget
            InternationalPhoneInput(
              decoration: InputDecoration.collapsed(hintText: '(123) 123-1234'),
              onPhoneNumberChange: onPhoneNumberChange,
              initialPhoneNumber: phoneNumber,
              initialSelection: phoneIsoCode,
              enabledCountries: ['+233', '+1'],
              showCountryCodes: false,
              showCountryFlags: true,
            ),
            SizedBox(height: 20),
            // 分隔线
            Container(
              width: double.infinity,
              height: 1,
              color: Colors.black,
            ),
            SizedBox(height: 50),
            // 仅包含文本输入的 Widget
            InternationalPhoneInputText(
              onValidPhoneNumber: onValidPhoneNumber,
            ),
            // 显示确认的电话号码
            Visibility(
              child: Text(confirmedNumber),
              visible: visible,
            ),
            Spacer(flex: 2)
          ],
        ),
      ), // 这个逗号使自动格式化更美观
    );
  }
}

更多关于Flutter国际化电话号码输入插件international_phone_input的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter国际化电话号码输入插件international_phone_input的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


international_phone_input 是一个用于 Flutter 的插件,它允许用户在输入电话号码时选择国家代码,并自动格式化电话号码。这个插件非常适合需要国际化电话号码输入的场景。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  international_phone_input: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装插件。

使用插件

以下是一个简单的示例,展示如何在 Flutter 应用中使用 international_phone_input 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PhoneInputScreen(),
    );
  }
}

class PhoneInputScreen extends StatefulWidget {
  @override
  _PhoneInputScreenState createState() => _PhoneInputScreenState();
}

class _PhoneInputScreenState extends State<PhoneInputScreen> {
  String phoneNumber = '';
  String phoneIsoCode = '';

  void onPhoneNumberChange(
      String number, String internationalizedPhoneNumber, String isoCode) {
    setState(() {
      phoneNumber = number;
      phoneIsoCode = isoCode;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('International Phone Input'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            InternationalPhoneInput(
              onPhoneNumberChange: onPhoneNumberChange,
              initialPhoneNumber: phoneNumber,
              initialSelection: phoneIsoCode,
              enabledCountries: ['US', 'CN', 'IN', 'JP'], // 可选:限制可选国家
              showCountryCodes: true, // 可选:是否显示国家代码
              showCountryFlags: true, // 可选:是否显示国家国旗
            ),
            SizedBox(height: 20),
            Text('Phone Number: $phoneNumber'),
            Text('ISO Code: $phoneIsoCode'),
          ],
        ),
      ),
    );
  }
}

参数说明

  • onPhoneNumberChange: 当用户输入电话号码或选择国家代码时触发的回调函数。它返回三个参数:

    • number: 用户输入的电话号码(不含国家代码)。
    • internationalizedPhoneNumber: 包含国家代码的完整电话号码。
    • isoCode: 所选国家的 ISO 代码(例如:US, CN)。
  • initialPhoneNumber: 初始的电话号码。

  • initialSelection: 初始的国家 ISO 代码。

  • enabledCountries: 可选参数,限制用户可以选择的国家列表。

  • showCountryCodes: 可选参数,是否在国旗旁边显示国家代码。

  • showCountryFlags: 可选参数,是否显示国家国旗。

自定义样式

你可以通过 decoration 参数来自定义输入框的样式,例如:

InternationalPhoneInput(
  onPhoneNumberChange: onPhoneNumberChange,
  initialPhoneNumber: phoneNumber,
  initialSelection: phoneIsoCode,
  decoration: InputDecoration(
    labelText: 'Phone Number',
    border: OutlineInputBorder(),
  ),
),
回到顶部