Flutter电话号码格式化输入插件phone_number_text_input_formatter的使用
Flutter电话号码格式化输入插件phone_number_text_input_formatter的使用
这个是用于在文本输入时提供电话号码格式化的Flutter插件。它是一个关键辅助工具,用于创建需要限制和验证用户输入格式的电话号码输入字段。
特性
- 零依赖
- 高效地实时格式化电话号码,性能优于基于正则表达式的解决方案。
- 可以根据需要自定义格式,给你更多的灵活性和控制。
- 提供了预实现的流行国际和国家电话号码格式。
使用方法
格式化所有可用的国际格式
TextField(
keyboardType: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const PhoneNumberTextInputFormatter(prefix: '+'), // 设置前缀为 +
],
)
格式化美国电话号码(国际格式)
TextField(
keyboardType: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const NationalPhoneNumberTextInputFormatter.US(prefix: '+'), // 设置前缀为 +,并使用美国格式
],
)
自定义电话号码格式
TextField(
keyboardType: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const NationalPhoneNumberTextInputFormatter(
prefix: '+',
countryCode: '28', // 国家码为28
groups: [
(length: 4, leading: ' [', trailing: '] '), // 每4个字符后添加 "[ ] "
(length: 3, leading: '', trailing: '-'), // 每3个字符后添加 "-"
(length: 3, leading: '', trailing: ' '), // 每3个字符后添加 " "
],
),
],
)
完整示例Demo
以下是一个完整的示例,展示了如何在Flutter应用中使用phone_number_text_input_formatter
插件。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:phone_number_text_input_formatter/phone_number_text_input_formatter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Phone Number Text Input Formatter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const ExamplePage(title: 'Phone Number Text Input Formatter Demo Home Page'),
);
}
}
class ExamplePage extends StatelessWidget {
final String title;
const ExamplePage({super.key, required this.title});
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(title),
),
body: Padding(
padding: const EdgeInsets.all(32.0),
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
decoration: const InputDecoration(
labelText: 'All supported countries',
helperText: ' '
),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const PhoneNumberTextInputFormatter(prefix: '+'), // 设置前缀为 +
],
),
TextField(
decoration: const InputDecoration(
labelText: 'US',
hintText: '+1 (000) 000-0000',
helperText: ' '
),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const NationalPhoneNumberTextInputFormatter.US(prefix: '+'), // 设置前缀为 +,并使用美国格式
],
),
TextField(
decoration: const InputDecoration(
labelText: 'Denmark',
hintText: '+45 00 000 0000',
helperText: 'Default format'
),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
NationalPhoneNumberTextInputFormatter.DK(prefix: '+'), // 使用丹麦格式
],
),
TextField(
decoration: const InputDecoration(
labelText: 'Custom',
hintText: '+28 [0000] 000-000',
),
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp(r'[0-9,+]')), // 允许输入数字和加号
const NationalPhoneNumberTextInputFormatter(
prefix: '+',
countryCode: '28', // 国家码为28
groups: [
(length: 4, leading: ' [', trailing: '] '), // 每4个字符后添加 "[ ] "
(length: 3, leading: '', trailing: '-'), // 每3个字符后添加 "-"
(length: 3, leading: '', trailing: ' '), // 每3个字符后添加 " "
],
),
],
)
],
),
),
),
);
}
}
更多关于Flutter电话号码格式化输入插件phone_number_text_input_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter电话号码格式化输入插件phone_number_text_input_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 phone_number_text_input_formatter
插件在 Flutter 中实现电话号码格式化输入的示例代码。
首先,确保你已经在 pubspec.yaml
文件中添加了 phone_number_text_input_formatter
依赖:
dependencies:
flutter:
sdk: flutter
phone_number_text_input_formatter: ^x.y.z # 替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来,在你的 Dart 文件中使用 PhoneNumberTextInputFormatter
。这里是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:phone_number_text_input_formatter/phone_number_text_input_formatter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Phone Number Formatting Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('Phone Number Formatting Demo'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: PhoneNumberInputField(),
),
),
),
);
}
}
class PhoneNumberInputField extends StatefulWidget {
@override
_PhoneNumberInputFieldState createState() => _PhoneNumberInputFieldState();
}
class _PhoneNumberInputFieldState extends State<PhoneNumberInputField> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return TextField(
controller: _controller,
keyboardType: TextInputType.phone,
decoration: InputDecoration(
labelText: 'Enter Phone Number',
prefixIcon: Icon(Icons.phone),
),
inputFormatters: [
FilteringTextInputFormatter.digitsOnly, // 仅允许输入数字
PhoneNumberTextInputFormatter(
keyboardAppearance: Brightness.light, // 设置键盘外观(可选)
withCountryCode: false, // 是否包含国家代码(可选)
inputFormat: PhoneNumberFormat.international, // 设置输入格式(可选)
),
],
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个 TextField
,用于输入电话号码。TextField
使用了 PhoneNumberTextInputFormatter
来格式化输入的电话号码。
FilteringTextInputFormatter.digitsOnly
确保用户只能输入数字。PhoneNumberTextInputFormatter
负责格式化输入的电话号码。你可以通过调整其参数来改变格式化的行为,例如是否包含国家代码,以及输入格式(国际格式、E.164格式等)。
这样,当用户输入电话号码时,它会自动按照设定的格式进行格式化。例如,如果你选择的是国际格式,当用户输入 +1234567890
时,它会自动格式化为 +1 234 567 890
(具体格式取决于你的设置)。