Flutter国际电话号码输入插件intl_phone_number_input_v2的使用
Flutter国际电话号码输入插件intl_phone_number_input_v2的使用
International Phone Number Input v2
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
欢迎贡献!请打开一个问题或提交一个包含您更改的拉取请求。确保遵循现有的代码风格,并为任何新功能或错误修复添加测试。
- 叉仓库。
- 创建一个新的分支:
git checkout -b my-branch-name
。 - 进行更改并提交:
git commit -m 'Add new feature'
。 - 推送到分支:
git push origin my-branch-name
。 - 提交拉取请求。
License
本项目根据MIT许可证授权——详情请参见 LICENSE 文件。
Acknowledgements
- intl_phone_number_input 为提供基本实现而致谢。
更多关于Flutter国际电话号码输入插件intl_phone_number_input_v2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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();
}
}
解释:
-
依赖导入:
import 'package:intl_phone_number_input_v2/intl_phone_number_input.dart';
import 'package:intl_phone_number_input_v2/utils/utils.dart';
-
PhoneNumberInputFormatter:用于格式化电话号码输入。
-
TextEditingController:用于控制输入框的内容。
-
IntlPhoneNumberInput:这是主要的电话号码输入组件。
initialCountryCode
:设置初始国家代码。favorite
:设置常用国家代码列表。selectorConfig
:配置选择器类型,如底部表单(BOTTOM_SHEET)。style
:设置输入框的文本样式。onInputChanged
:当输入变化时的回调函数,返回PhoneNumber
对象。textFieldController
:绑定TextEditingController
。inputFormatters
:绑定格式化器,以确保输入格式正确。
-
显示格式化后的号码:
- 使用
phoneNumber!.formatInternational()
来获取并显示国际格式的电话号码。
- 使用
-
dispose方法:释放
TextEditingController
资源。
这个示例展示了如何使用intl_phone_number_input_v2
插件来创建一个国际电话号码输入字段,并显示格式化后的号码。希望这对你有所帮助!