Flutter国际化手机号码输入插件intl_mobile_field的使用
Flutter国际化手机号码输入插件intl_mobile_field的使用
International Mobile Number Field Package
这是一个定制的Flutter TextFormField
,用于输入带有国家代码的国际手机号码。该包受intl_phone_field
启发,但原包自2023年中以来未进行更新维护。因此我们决定创建一个新包,包含更多功能,使其更加灵活和兼容。如果您想了解该包的更新内容,请查阅CHANGELOG.md文件。
Installing
要使用这个包:
- 运行命令:
flutter pub add intl_mobile_field
- 或者,在您的
pubspec.yaml
文件中添加以下内容:dependencies: intl_mobile_field: ^<latest_version>
有时您可能想要使用最新版本的包,而不是已发布的版本。为此,请使用git
语法:
dependencies:
intl_mobile_field:
git:
url: https://github.com/MdAshrafUllah/intl_mobile_field.git
ref: master
How to Use
简单地创建一个IntlMobileField
widget,并传递所需的参数即可。
示例1(无收藏)
IntlMobileField(
decoration: const InputDecoration(
labelText: 'Mobile Number',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
initialCountryCode: 'BD',
disableLengthCounter: true,
languageCode: "en",
),
示例2(有收藏 - 样式一)
IntlMobileField(
favorite: const ['BD', 'US', 'MY'],
favoriteIcon: Icon(
Icons.star,
color: Colors.amber,
),
favoriteIconIsLeft: false,
decoration: const InputDecoration(
labelText: 'Mobile Number',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
initialCountryCode: 'BD',
disableLengthCounter: true,
languageCode: "en",
onChanged: (mobile) {
log(mobile.completeNumber);
},
onCountryChanged: (country) {
log('Country changed to: ${country.name}');
},
),
示例3(有收藏 - 样式二)
IntlMobileField(
favorite: const ['BD', 'US', 'MY'],
favoriteIcon: Icon(
Icons.favorite,
color: Colors.pinkAccent,
),
countryCodePositionRight: false,
favoriteIconIsLeft: false,
decoration: const InputDecoration(
labelText: 'Mobile Number',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
pickerDialogStyle: PickerDialogStyle(
countryCodeStyle:
TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
initialCountryCode: 'BD',
disableLengthCounter: true,
languageCode: "en",
),
对于PickerDialogStyle
,您需要从import 'package:intl_mobile_field/country_picker_dialog.dart';
导入它。
完整示例Demo
下面是一个完整的示例demo,展示了如何在项目中集成并使用IntlMobileField
组件。
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:intl_mobile_field/intl_mobile_field.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final GlobalKey<FormState> _formKey = GlobalKey();
final TextEditingController controller = TextEditingController();
FocusNode focusNode = FocusNode();
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('Mobile Field Example'),
backgroundColor: Colors.blueAccent,
foregroundColor: Colors.white,
centerTitle: true,
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const SizedBox(height: 30),
const TextField(
decoration: InputDecoration(
labelText: 'Name',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
),
const SizedBox(
height: 10,
),
const TextField(
decoration: InputDecoration(
labelText: 'Email',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
),
const SizedBox(
height: 10,
),
IntlMobileField(
favorite: const ['BD', 'US', 'MY'],
favoriteIcon: Icon(
Icons.star,
color: Colors.amber,
),
favoriteIconIsLeft: false,
decoration: const InputDecoration(
labelText: 'Mobile Number',
border: OutlineInputBorder(
borderSide: BorderSide(),
),
),
initialCountryCode: 'BD',
disableLengthCounter: true,
languageCode: "en",
onChanged: (mobile) {
log(mobile.completeNumber);
},
onCountryChanged: (country) {
log('Country changed to: ${country.name}');
},
),
const SizedBox(
height: 10,
),
Center(
child: SizedBox(
height: 50,
width: double.infinity,
child: MaterialButton(
shape: ContinuousRectangleBorder(
borderRadius: BorderRadius.circular(15)),
color: Colors.blue,
textColor: Colors.white,
onPressed: () {
log(controller.text);
_formKey.currentState?.validate();
},
child: const Text(
'Submit',
style: TextStyle(
fontSize: 20,
),
),
),
),
),
],
),
),
),
),
);
}
}
以上是关于intl_mobile_field
插件的详细使用说明,希望对您有所帮助!如果您有任何问题或建议,欢迎随时提出。
更多关于Flutter国际化手机号码输入插件intl_mobile_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter国际化手机号码输入插件intl_mobile_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用intl_mobile_field
插件来实现国际化手机号码输入的示例代码。这个插件能够帮助你快速实现电话号码格式化和验证功能,支持多种语言和地区的号码格式。
首先,你需要在你的pubspec.yaml
文件中添加这个插件的依赖:
dependencies:
flutter:
sdk: flutter
intl_mobile_field: ^0.5.0 # 请注意版本号,确保使用最新版本
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用这个插件。以下是一个简单的示例,展示了如何在一个页面中集成国际化手机号码输入功能:
import 'package:flutter/material.dart';
import 'package:intl_mobile_field/intl_mobile_field.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Intl Mobile Field Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _formKey = GlobalKey<FormState>();
String? phoneNumber;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Intl Mobile Field Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
IntlMobileField(
labelText: 'Phone Number',
initialCountry: 'us', // 初始国家代码,可以是 'us', 'cn', 'in' 等
onChanged: (value) {
setState(() {
phoneNumber = value;
});
},
validator: (value) {
if (value == null || value.isEmpty) {
return 'Phone number is required';
}
return null;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
// 处理表单提交
print('Phone Number: $phoneNumber');
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个表单,表单中使用了IntlMobileField
组件来输入国际化手机号码。以下是代码的主要部分:
-
IntlMobileField:
labelText
:输入框的标签文本。initialCountry
:设置初始的国家代码,例如'us'
表示美国。onChanged
:当输入的电话号码发生变化时,会调用这个回调函数,并将当前的电话号码作为参数传递。validator
:用于表单验证的回调函数,如果电话号码为空或无效,则返回一个错误消息字符串;否则返回null
。
-
ElevatedButton:提交按钮,当点击按钮时,会调用
_formKey.currentState!.validate()
方法来验证表单。如果验证通过,则打印出输入的电话号码。
通过这种方式,你可以很方便地在Flutter应用中实现国际化手机号码输入功能。插件还提供了更多的配置选项,例如自定义样式、显示国旗图标等,你可以根据需求进行进一步的配置。