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

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

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

International Phone Number Input v2

Pub Version License

intl_phone_number_input_v2 是一个Flutter包,提供了一个可定制的国际电话号码输入小部件。这个包允许开发者轻松地将电话号码输入字段集成到他们的Flutter应用程序中,并支持不同国家的验证和格式化。

Features

  • 支持国际电话号码输入。
  • 可定制的输入字段。
  • 电话号码自动格式化和验证。
  • 带有旗帜图标的国家代码选择器。
  • 轻量级且易于集成。

Installation

在你的 pubspec.yaml 文件中添加 intl_phone_number_input_v2

dependencies:
  intl_phone_number_input_v2: ^0.0.2

然后运行 flutter pub get 来安装该包。

Usage

下面是一个如何使用 intl_phone_number_input_v2 包的基本示例:

import 'package:flutter/material.dart';
import 'package:intl_phone_number_input_v2/intl_phone_number_input.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var darkTheme = ThemeData.dark().copyWith(primaryColor: Colors.blue);

    return MaterialApp(
      title: 'Demo',
      themeMode: ThemeMode.dark,
      darkTheme: darkTheme,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(title: Text('Demo')),
        body: MyHomePage(),
      ),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey<FormState> formKey = GlobalKey<FormState>();

  final TextEditingController controller = TextEditingController();
  String initialCountry = 'NG';
  PhoneNumber number = PhoneNumber(isoCode: 'NG');

  @override
  Widget build(BuildContext context) {
    return Form(
      key: formKey,
      child: Container(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            InternationalPhoneNumberInput(
              onInputChanged: (PhoneNumber number) {
                print(number.phoneNumber);
              },
              onInputValidated: (bool value) {
                print(value);
              },
              selectorConfig: SelectorConfig(
                selectorType: PhoneInputSelectorType.BOTTOM_SHEET,
                useBottomSheetSafeArea: true,
              ),
              ignoreBlank: false,
              autoValidateMode: AutovalidateMode.disabled,
              selectorTextStyle: TextStyle(color: Colors.black),
              initialValue: number,
              textFieldController: controller,
              formatInput: true,
              keyboardType:
                  TextInputType.numberWithOptions(signed: true, decimal: true),
              inputBorder: OutlineInputBorder(),
              onSaved: (PhoneNumber number) {
                print('On Saved: $number');
              },
            ),
            ElevatedButton(
              onPressed: () {
                formKey.currentState?.validate();
              },
              child: Text('Validate'),
            ),
            ElevatedButton(
              onPressed: () {
                getPhoneNumber('+15417543010');
              },
              child: Text('Update'),
            ),
            ElevatedButton(
              onPressed: () {
                formKey.currentState?.save();
              },
              child: Text('Save'),
            ),
          ],
        ),
      ),
    );
  }

  void getPhoneNumber(String phoneNumber) async {
    PhoneNumber number =
        await PhoneNumber.getRegionInfoFromPhoneNumber(phoneNumber, 'US');

    setState(() {
      this.number = number;
    });
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }
}

Documentation

有关更详细的文档和示例,请参阅 pub.dev上的包文档

Contributing

欢迎贡献!请打开一个问题或提交一个包含您更改的拉取请求。确保遵循现有的代码风格,并为任何新功能或错误修复添加测试。

  1. 叉仓库。
  2. 创建一个新的分支:git checkout -b my-branch-name
  3. 进行更改并提交:git commit -m 'Add new feature'
  4. 推送到分支:git push origin my-branch-name
  5. 提交拉取请求。

License

本项目根据MIT许可证授权——详情请参见 LICENSE 文件。

Acknowledgements


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用intl_phone_number_input_v2插件的示例代码。这个插件允许用户以国际格式输入电话号码。

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

dependencies:
  flutter:
    sdk: flutter
  intl_phone_number_input_v2: ^2.0.0  # 请检查最新版本号

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

接下来,在你的Flutter项目中,你可以按如下方式使用这个插件:

import 'package:flutter/material.dart';
import 'package:intl_phone_number_input_v2/intl_phone_number_input.dart';
import 'package:intl_phone_number_input_v2/utils/utils.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> {
  PhoneNumber? phoneNumber;
  final PhoneNumberInputFormatter formatter = PhoneNumberInputFormatter();
  final TextEditingController controller = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('International Phone Number Input'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            IntlPhoneNumberInput(
              initialCountryCode: 'US',
              favorite: ['+1', 'US'],
              selectorConfig: SelectorConfig(
                selectorType: PhoneInputSelectorType.BOTTOM_SHEET,
              ),
              style: TextStyle(fontSize: 18.0),
              onInputChanged: (PhoneNumber number) {
                setState(() {
                  phoneNumber = number;
                });
              },
              textFieldController: controller,
              inputFormatters: [formatter],
            ),
            SizedBox(height: 20),
            if (phoneNumber != null)
              Text(
                'Formatted Number: ${phoneNumber!.formatInternational()}',
                style: TextStyle(fontSize: 18.0),
              ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }
}

解释:

  1. 依赖导入

    • import 'package:intl_phone_number_input_v2/intl_phone_number_input.dart';
    • import 'package:intl_phone_number_input_v2/utils/utils.dart';
  2. PhoneNumberInputFormatter:用于格式化电话号码输入。

  3. TextEditingController:用于控制输入框的内容。

  4. IntlPhoneNumberInput:这是主要的电话号码输入组件。

    • initialCountryCode:设置初始国家代码。
    • favorite:设置常用国家代码列表。
    • selectorConfig:配置选择器类型,如底部表单(BOTTOM_SHEET)。
    • style:设置输入框的文本样式。
    • onInputChanged:当输入变化时的回调函数,返回PhoneNumber对象。
    • textFieldController:绑定TextEditingController
    • inputFormatters:绑定格式化器,以确保输入格式正确。
  5. 显示格式化后的号码

    • 使用phoneNumber!.formatInternational()来获取并显示国际格式的电话号码。
  6. dispose方法:释放TextEditingController资源。

这个示例展示了如何使用intl_phone_number_input_v2插件来创建一个国际电话号码输入字段,并显示格式化后的号码。希望这对你有所帮助!

回到顶部