Flutter国际电话号码输入插件intl_phone_number_input_perci的使用
Flutter国际电话号码输入插件intl_phone_number_input_perci的使用
简介
intl_phone_number_input_perci
是一个用于在Flutter应用中输入和验证国际电话号码的插件。它是 natintosh/intl_phone_number_input
的分支版本,修复了iOS编译时缺少 PhoneNumberKit
类的问题。当前版本解决了iOS编译问题,并提供了更稳定的电话号码输入功能。
完整示例Demo
以下是一个完整的示例代码,展示了如何使用 intl_phone_number_input_perci
插件来创建一个包含国际电话号码输入功能的Flutter应用。
import 'package:flutter/material.dart';
import 'package:intl_phone_number_input_perci/intl_phone_number_input_perci.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/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](/user/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](/user/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](/user/override)
void dispose() {
controller.dispose(); // 释放文本控制器资源
super.dispose();
}
}
更多关于Flutter国际电话号码输入插件intl_phone_number_input_perci的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际电话号码输入插件intl_phone_number_input_perci的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用intl_phone_number_input_perci
插件的一个示例代码案例。这个插件用于国际电话号码输入,支持格式化、验证等功能。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加intl_phone_number_input_perci
依赖:
dependencies:
flutter:
sdk: flutter
intl_phone_number_input_perci: ^0.7.0+2 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:flutter/material.dart';
import 'package:intl_phone_number_input_perci/intl_phone_number_input.dart';
import 'package:intl_phone_number_input_perci/utils/utils.dart';
3. 使用插件
下面是一个完整的示例,展示了如何在Flutter应用中使用intl_phone_number_input_perci
插件:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Intl Phone Number Input Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
PhoneNumber? _selectedPhoneNumber;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Intl Phone Number Input Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
IntlPhoneNumberInput(
onInputChanged: (PhoneNumber number) {
setState(() {
_selectedPhoneNumber = number;
});
},
onInputValidated: (bool isValid) {
print("${_selectedPhoneNumber!.completeNumber} is $isValid");
},
initialSelection: "US",
favorite: ['+1', 'US'],
inputBorder: OutlineInputBorder(),
enabled: true,
autoValidateMode: AutovalidateMode.onUserInteraction,
selectorConfig: SelectorConfig(
selectorType: PhoneInputSelectorType.DIALOG,
),
textFieldController: TextEditingController(),
ignoreBlank: false,
style: TextStyle(fontSize: 16),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// Do something with the valid phone number
print("Valid phone number: ${_selectedPhoneNumber!.completeNumber}");
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
}
4. 运行应用
确保你的开发环境已经设置好,然后运行应用:
flutter run
解释
- IntlPhoneNumberInput: 这是主要的电话号码输入组件。
- onInputChanged: 当电话号码输入改变时,这个回调会被触发。
- onInputValidated: 当电话号码验证完成时,这个回调会被触发。
- initialSelection: 初始选择的国家代码。
- favorite: 常用的国家代码列表。
- selectorConfig: 配置选择器类型,这里使用的是对话框选择器。
- textFieldController: 文本控制器,用于控制输入框。
- ignoreBlank: 如果设置为
false
,空输入会被视为无效。
这个示例展示了如何使用intl_phone_number_input_perci
插件来创建一个国际电话号码输入字段,并进行基本的验证和处理。你可以根据需求进一步自定义和扩展这个示例。