Flutter国际化电话号码输入插件international_phone_input的使用
Flutter国际化电话号码输入插件international_phone_input的使用
international_phone_input
International Phone Number Input For Flutter
Usage
只需将组件放入您的应用程序中。
import 'package:international_phone_input/international_phone_input.dart';
String phoneNumber;
String phoneIsoCode;
// 当电话号码发生变化时调用此方法
void onPhoneNumberChange(String number, String internationalizedPhoneNumber, String isoCode) {
setState(() {
phoneNumber = number;
phoneIsoCode = isoCode;
});
}
// 默认带下拉列表的 Widget
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
body: Center(
child: InternationalPhoneInput(
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
enabledCountries: ['+233', '+1'] // 可用国家列表
),
),
);
// 仅包含文本输入的 Widget
onValidPhoneNumber(
String number, String internationalizedPhoneNumber, String isoCode) {
setState(() {
confirmedNumber = internationalizedPhoneNumber;
});
}
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
body: Center(
child: InternationalPhoneInputText(
onValidPhoneNumber: onValidPhoneNumber,
),
),
);
// 带装饰的 Widget
[@override](/user/override)
Widget build(BuildContext context) => Scaffold(
body: Center(
child: InternationalPhoneInput(
decoration: InputDecoration.collapsed(hintText: '(416) 123-4567'),
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
enabledCountries: ['+233', '+1'],
showCountryCodes: false // 隐藏国家代码
),
),
);
Customization
以下是可用于自定义 Widget 的属性列表:
名称 | 类型 | 描述 |
---|---|---|
initialPhoneNumber | String | 用于设置初始电话号码 |
initialSelection | String | 用于设置初始国家代码 |
errorText | String | 用于设置错误消息 |
hintText | String | 设置提示 |
labelText | String | 设置标签 |
errorStyle | TextStyle | 应用于错误消息的样式 |
hintStyle | TextStyle | 应用于提示的样式 |
labelStyle | TextStyle | 应用于标签的样式 |
errorMaxLines | int | 用户可以输入的最大行数 |
enabledCountries | List | 显示的可用国家列表 |
decoration | InputDecoration | 应用于 TextField 的装饰 |
showCountryCodes | bool | 是否显示国家代码(默认为 true) |
showCountryFlags | bool | 是否显示国家标志(默认为 true) |
dropdownIcon | Widget | 用于自定义下拉图标 |
示例代码
以下是一个完整的示例代码,展示如何使用 international_phone_input
插件:
import 'package:flutter/material.dart';
import 'package:international_phone_input/international_phone_input.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Example Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String phoneNumber;
String phoneIsoCode;
bool visible = false;
String confirmedNumber = '';
// 处理电话号码变化
void onPhoneNumberChange(
String number, String internationalizedPhoneNumber, String isoCode) {
print(number);
setState(() {
phoneNumber = number;
phoneIsoCode = isoCode;
});
}
// 处理有效电话号码验证
onValidPhoneNumber(
String number, String internationalizedPhoneNumber, String isoCode) {
setState(() {
visible = true;
confirmedNumber = internationalizedPhoneNumber;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('International Phone Input Example'),
),
body: Center(
child: Column(
children: <Widget>[
Spacer(flex: 1),
// 默认 Widget
InternationalPhoneInput(
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
enabledCountries: ['+233', '+1'],
labelText: "Phone Number",
),
SizedBox(height: 20),
// 带装饰的 Widget
InternationalPhoneInput(
decoration: InputDecoration.collapsed(hintText: '(123) 123-1234'),
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
enabledCountries: ['+233', '+1'],
showCountryCodes: false,
showCountryFlags: true,
),
SizedBox(height: 20),
// 分隔线
Container(
width: double.infinity,
height: 1,
color: Colors.black,
),
SizedBox(height: 50),
// 仅包含文本输入的 Widget
InternationalPhoneInputText(
onValidPhoneNumber: onValidPhoneNumber,
),
// 显示确认的电话号码
Visibility(
child: Text(confirmedNumber),
visible: visible,
),
Spacer(flex: 2)
],
),
), // 这个逗号使自动格式化更美观
);
}
}
更多关于Flutter国际化电话号码输入插件international_phone_input的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化电话号码输入插件international_phone_input的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
international_phone_input
是一个用于 Flutter 的插件,它允许用户在输入电话号码时选择国家代码,并自动格式化电话号码。这个插件非常适合需要国际化电话号码输入的场景。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 international_phone_input
插件的依赖:
dependencies:
flutter:
sdk: flutter
international_phone_input: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装插件。
使用插件
以下是一个简单的示例,展示如何在 Flutter 应用中使用 international_phone_input
插件:
import 'package:flutter/material.dart';
import 'package:international_phone_input/international_phone_input.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: PhoneInputScreen(),
);
}
}
class PhoneInputScreen extends StatefulWidget {
@override
_PhoneInputScreenState createState() => _PhoneInputScreenState();
}
class _PhoneInputScreenState extends State<PhoneInputScreen> {
String phoneNumber = '';
String phoneIsoCode = '';
void onPhoneNumberChange(
String number, String internationalizedPhoneNumber, String isoCode) {
setState(() {
phoneNumber = number;
phoneIsoCode = isoCode;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('International Phone Input'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
InternationalPhoneInput(
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
enabledCountries: ['US', 'CN', 'IN', 'JP'], // 可选:限制可选国家
showCountryCodes: true, // 可选:是否显示国家代码
showCountryFlags: true, // 可选:是否显示国家国旗
),
SizedBox(height: 20),
Text('Phone Number: $phoneNumber'),
Text('ISO Code: $phoneIsoCode'),
],
),
),
);
}
}
参数说明
-
onPhoneNumberChange
: 当用户输入电话号码或选择国家代码时触发的回调函数。它返回三个参数:number
: 用户输入的电话号码(不含国家代码)。internationalizedPhoneNumber
: 包含国家代码的完整电话号码。isoCode
: 所选国家的 ISO 代码(例如:US
,CN
)。
-
initialPhoneNumber
: 初始的电话号码。 -
initialSelection
: 初始的国家 ISO 代码。 -
enabledCountries
: 可选参数,限制用户可以选择的国家列表。 -
showCountryCodes
: 可选参数,是否在国旗旁边显示国家代码。 -
showCountryFlags
: 可选参数,是否显示国家国旗。
自定义样式
你可以通过 decoration
参数来自定义输入框的样式,例如:
InternationalPhoneInput(
onPhoneNumberChange: onPhoneNumberChange,
initialPhoneNumber: phoneNumber,
initialSelection: phoneIsoCode,
decoration: InputDecoration(
labelText: 'Phone Number',
border: OutlineInputBorder(),
),
),