Flutter文本格式化插件flutter_masked_text3的使用
Flutter文本格式化插件flutter_masked_text3的使用
flutter_masked_text
Masked text input for flutter.
Alert
Hi guys!
Unfortunately, I’m not developing mobile anymore. This repo will not receive updates.
Install
Follow this GUIDE
Usage
导入库:
import 'package:flutter_masked_text3/flutter_masked_text3.dart';
MaskedText
创建你的掩码控制器:
var controller = new MaskedTextController(mask: '000.000.000-00');
将控制器设置到文本字段中:
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new SafeArea(
child: new Scaffold(
body: new Column(
children: <Widget>[
new TextField(controller: controller,) // 这里
],
),
),
),
);
这将是结果:
Mask Options
在掩码中,你可以使用以下字符:
0
: 接受数字A
: 接受字母@
: 接受数字和字母*
: 接受任何字符
Initial Value
要以初始值开始一个掩码,只需在构造函数中使用text
属性:
var controller = new MaskedTextController(mask: '000-000', text: '123456');
Update text programaticaly
如果你想要在控制器初始化后设置新的文本,可以使用updateText
方法:
var controller = new MaskedTextController(text: '', mask: '000-000');
controller.updateText('123456');
print(controller.text); //123-456
Using custom translators
如果你想使用自定义的正则表达式来允许值,你可以传递一个自定义的翻译字典:
const translator = {
'#': new RegExp(r'my regex here')
};
var controller = new MaskedTextController(mask: '####', translator: translator);
如果你想使用默认翻译器但覆盖其中的一些,只需要从getDefaultTranslator
获取基础并覆盖你想要的部分(这里是一个用于模糊信用卡号码的示例):
var translator = MaskedTextController.getDefaultTranslator(); // 获取默认翻译器的新实例。
translator.remove('*'); // 移除通配符翻译器。
var controller = new MaskedTextController(mask: '0000 **** **** 0000', translator: translator);
controller.updateText('12345678');
print(controller.text); //1234 **** **** 5678
Change the mask in runtime
你可以在创建控制器后使用updateMask
方法更改掩码。
var cpfController = new MaskedTextController(text: '12345678901', mask: '000.000.000-00');
print(cpfController.text); //'123.456.789-01'
cpfController.updateMask('000.000.0000-0');
print(cpfController.text); //'123.456.7890-1'
Hook: beforeChange [v0.7.0+]
在某些情况下,你可能希望验证掩码值以决定是否允许输入。
它很简单:你只需要设置beforeChange
并返回true
或false
。如果你返回true
,它将接受新值并尝试应用掩码。否则,它将拒绝新值。
该函数接收两个参数:
previous
: 控制器的前一个文本。next
: 将要被掩码的下一个文本。
var controller = new MaskedTextController(mask: '(00) 0000-0000');
controller.beforeChange = (String previous, String next) {
// 我的逻辑在这里
return true;
};
Hook: afterChange [v0.7.0+]
此函数将在控制器设置后调用。
该函数接收两个参数:
previous
: 控制器的前一个文本。next
: 将要被掩码的下一个文本。
var controller = new MaskedTextController(mask: '(00) 0000-0000');
controller.afterChange = (String previous, String next) {
print("$previous | $next");
};
Money Mask
要使用货币掩码,创建一个MoneyMaskedTextController
:
var controller = new MoneyMaskedTextController();
//....
new TextField(controller: controller, keyboardType: TextInputType.number)
Decimal and Thousand separator
你可以自定义decimal
和thousand
分隔符:
var controller = new MoneyMaskedTextController(decimalSeparator: '.', thousandSeparator: ',');
Set value programaticaly
要程序化地设置值,使用updateValue
:
controller.updateValue(1234.0);
Get double value
要从掩码文本获取数字值,使用numberValue
属性:
double val = controller.numberValue;
Using decoration symbols
如果你愿意,可以使用货币符号:
// 左边的符号
var controller = new MoneyMaskedTextController(leftSymbol: 'R\$ ');
controller.updateValue(123.45);
print(controller.text); //-> R$ 123,45
// 右边的符号
var controller = new MoneyMaskedTextController(rightSymbol: ' US\$');
controller.updateValue(99.99);
print(controller.text); //-> 99,99 US$
// 两边都有
var controller = new MoneyMaskedTextController(leftSymbol: 'to pay:', rightSymbol: ' US\$');
controller.updateValue(123.45);
print(controller.text); //-> to pay: 123,45 US$
Hook: afterChange [v0.7.0+]
你可以监视掩码和值的变化。为此,只需设置afterChange
钩子。
该函数接收两个参数:
masked
: 控制器的掩码文本。raw
: 文本的双精度值。
var controller = new MoneyMaskedTextController();
controller.afterChange = (String masked, double raw) {
print("$masked | $raw");
};
Defining decimal places [v0.8.0+]
你可以使用precision
属性定义小数点后的位数:
var controller = new MoneyMaskedTextController(precision: 3);
controller.updateValue(123.45);
print(controller.text); //-> 123,450
更多关于Flutter文本格式化插件flutter_masked_text3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文本格式化插件flutter_masked_text3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,flutter_masked_text3
是一个用于 Flutter 的文本格式化插件,常用于格式化输入字段,比如电话号码、信用卡号等。以下是一个使用 flutter_masked_text3
的代码示例,展示如何在 Flutter 应用中格式化文本输入。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_masked_text3
依赖:
dependencies:
flutter:
sdk: flutter
flutter_masked_text3: ^latest_version # 请替换为最新版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Dart 文件中,你可以按照以下方式使用 flutter_masked_text3
:
import 'package:flutter/material.dart';
import 'package:flutter_masked_text3/flutter_masked_text3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Masked Text Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MaskedTextExample(),
);
}
}
class MaskedTextExample extends StatefulWidget {
@override
_MaskedTextExampleState createState() => _MaskedTextExampleState();
}
class _MaskedTextExampleState extends State<MaskedTextExample> {
final TextEditingController _controller = TextEditingController();
MaskedTextController? _maskedController;
@override
void initState() {
super.initState();
// 设置掩码格式,例如:电话号码掩码
_maskedController = MaskedTextController(mask: '(000) 000-0000');
_maskedController!.addListener(() {
// 更新控制器内容
_controller.value = _maskedController!.textEditingValue.copyWith(
text: _maskedController!.text,
selection: _maskedController!.textEditingValue.selection,
);
});
}
@override
void dispose() {
_maskedController?.dispose();
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Masked Text Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: TextField(
controller: _controller,
decoration: InputDecoration(
labelText: 'Enter Phone Number',
),
inputFormatters: [
FilteringTextInputFormatter.digitsOnly, // 仅允许输入数字
],
onChanged: (value) {
// 更新掩码控制器内容
_maskedController!.updateValue(value);
},
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 创建了一个
MaskedTextController
并设置了掩码格式(000) 000-0000
。 - 使用
TextEditingController
来管理TextField
的文本。 - 在
initState
中,将MaskedTextController
的监听器添加到_maskedController
上,以便在掩码文本更改时更新TextEditingController
的内容。 - 在
TextField
中,使用inputFormatters
仅允许输入数字,并在onChanged
回调中更新MaskedTextController
的值。
这样,当你输入数字时,TextField
会根据掩码格式自动格式化输入的文本。