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

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

国际化电话字段包

该插件是一个自定义的Flutter TextFormField,用于输入国际电话号码,并附带国家代码。

此小部件可用于创建一个定制的文本字段,以便为任何国家输入电话号码,并且可以选择从下拉菜单中选择国家代码。

警告:该插件已废弃,此仓库不再维护

截至2021年6月,@marcaureln正在维护由@vanshg395最初创建的Flutter插件。遗憾的是,Vansh目前未响应,因此无法发布新版本(最新发布的版本已有6个月未更新)。

鉴于此情况,建议用户在pub.dev上探索替代方案,或者有兴趣的话可以fork此仓库以获得持续支持。生活可能会很忙,我希望Vansh一切顺利。

感谢您的理解和持续支持。

旧文档

屏幕截图

安装

要使用此包:

运行以下命令:

flutter pub add intl_phone_field_fork

或者,在pubspec.yaml文件中添加以下内容:

dependencies:
  intl_phone_field_fork: ^<latest_version>

有时你可能想使用包的最新版本而不是已发布的版本。为此,使用git语法:

dependencies:
  intl_phone_field_fork:
    git:
      url: git://github.com/vanshg395/intl_phone_field_fork.git
      ref: master
如何使用

只需创建一个IntlPhoneField小部件,并传递所需参数:

IntlPhoneField(
    decoration: InputDecoration(
        labelText: 'Phone Number',
        border: OutlineInputBorder(
            borderSide: BorderSide(),
        ),
    ),
    initialCountryCode: 'IN',
    onChanged: (phone) {
        print(phone.completeNumber);
    },
)

使用initialCountryCode来设置初始国家代码。

示例代码

以下是一个完整的示例,展示了如何在Flutter应用中使用intl_phone_field_fork插件:

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

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

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

class _MyAppState extends State<MyApp> {
  GlobalKey<FormState> _formKey = GlobalKey();

  FocusNode focusNode = FocusNode();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text('Phone Field Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.symmetric(horizontal: 16.0),
          child: Form(
            key: _formKey,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                SizedBox(height: 30),
                TextField(
                  decoration: InputDecoration(
                    labelText: 'Name',
                    border: OutlineInputBorder(
                      borderSide: BorderSide(),
                    ),
                  ),
                ),
                SizedBox(
                  height: 10,
                ),
                TextField(
                  decoration: InputDecoration(
                    labelText: 'Email',
                    border: OutlineInputBorder(
                      borderSide: BorderSide(),
                    ),
                  ),
                ),
                SizedBox(
                  height: 10,
                ),
                IntlPhoneField(
                  focusNode: focusNode,
                  decoration: InputDecoration(
                    labelText: 'Phone Number',
                    border: OutlineInputBorder(
                      borderSide: BorderSide(),
                    ),
                  ),
                  languageCode: "en",
                  onChanged: (phone) {
                    print(phone.completeNumber);
                  },
                  onCountryChanged: (country) {
                    print('Country changed to: ' + country.name);
                  },
                ),
                SizedBox(
                  height: 10,
                ),
                MaterialButton(
                  child: Text('Submit'),
                  color: Theme.of(context).primaryColor,
                  textColor: Colors.white,
                  onPressed: () {
                    _formKey.currentState?.validate();
                  },
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


intl_phone_field_fork 是一个 Flutter 插件,用于在应用程序中实现国际化的电话号码输入。它提供了一个带有国家选择器的电话号码输入框,支持自动格式化电话号码,并且可以轻松地集成到你的 Flutter 应用中。

以下是如何使用 intl_phone_field_fork 插件的步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 intl_phone_field_fork 依赖:

dependencies:
  flutter:
    sdk: flutter
  intl_phone_field_fork: ^2.1.0

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

2. 导入包

在你的 Dart 文件中导入 intl_phone_field_fork 包:

import 'package:intl_phone_field_fork/intl_phone_field_fork.dart';

3. 使用 IntlPhoneField 组件

你可以直接在 build 方法中使用 IntlPhoneField 组件。以下是一个简单的示例:

class PhoneInputScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Phone Input'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            IntlPhoneField(
              decoration: InputDecoration(
                labelText: 'Phone Number',
                border: OutlineInputBorder(
                  borderSide: BorderSide(),
                ),
              ),
              initialCountryCode: 'US',
              onChanged: (phone) {
                print(phone.completeNumber);
              },
            ),
          ],
        ),
      ),
    );
  }
}

4. 主要参数说明

  • decoration: 用于自定义输入框的样式,比如 labelTextborder 等。
  • initialCountryCode: 设置默认的国家代码,例如 'US' 表示美国。
  • onChanged: 当用户输入或选择国家时触发的回调函数,返回一个 PhoneNumber 对象,你可以通过 phone.completeNumber 获取完整的电话号码。

5. 获取完整的电话号码

onChanged 回调中,你可以通过 phone.completeNumber 获取用户输入的电话号码,包括国家代码和区号。

onChanged: (phone) {
  print('Complete Number: ${phone.completeNumber}');
  print('Country Code: ${phone.countryCode}');
  print('Phone Number: ${phone.number}');
},

6. 自定义国家选择器

你可以通过 countries 参数来限制显示的国家列表。例如,只显示美国和加拿大的国家选择器:

IntlPhoneField(
  decoration: InputDecoration(
    labelText: 'Phone Number',
    border: OutlineInputBorder(),
  ),
  initialCountryCode: 'US',
  countries: ['US', 'CA'],
  onChanged: (phone) {
    print(phone.completeNumber);
  },
);

7. 验证电话号码

你可以使用 validator 参数来验证电话号码的输入。例如,确保电话号码不为空:

IntlPhoneField(
  decoration: InputDecoration(
    labelText: 'Phone Number',
    border: OutlineInputBorder(),
  ),
  initialCountryCode: 'US',
  validator: (value) {
    if (value == null || value.isEmpty) {
      return 'Please enter a phone number';
    }
    return null;
  },
  onChanged: (phone) {
    print(phone.completeNumber);
  },
);

8. 自动格式化

IntlPhoneField 会自动根据所选国家格式化电话号码。例如,美国电话号码会显示为 (123) 456-7890

9. 自定义样式

你可以通过 style 参数来设置输入框中的文本样式:

IntlPhoneField(
  decoration: InputDecoration(
    labelText: 'Phone Number',
    border: OutlineInputBorder(),
  ),
  initialCountryCode: 'US',
  style: TextStyle(fontSize: 16, color: Colors.black),
  onChanged: (phone) {
    print(phone.completeNumber);
  },
);
回到顶部