flutter - 我怎样才能在颤振中做同样的信用风格?
解决方案
试试下面的代码希望它对你有帮助,或者你可以在这里或这里使用一些依赖来支付卡
使用过的包裹
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
为您的设计创建小部件
SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(height:30),
Container(
margin: EdgeInsets.symmetric(
horizontal: 20,
),
child: TextFormField(
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
CardNumberFormatter(),
],
textInputAction: TextInputAction.next,
keyboardType: TextInputType.number,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'XXXX XXXX XXXX XXXX',
labelText: 'Card Number',
),
maxLength: 19,
),
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 20,
),
child: TextFormField(
textCapitalization: TextCapitalization.sentences,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Name',
hintText: 'Card Holder Name',
),
),
),
Container(
margin: EdgeInsets.symmetric(horizontal: 20, vertical: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: TextFormField(
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
DateFormatter(),
],
textInputAction: TextInputAction.next,
keyboardType: TextInputType.datetime,
decoration: InputDecoration(
border: OutlineInputBorder(),
hintText: 'Card Expiry',
labelText: 'MM/YY'),
maxLength: 5,
),
),
SizedBox(width: 20),
Flexible(
child: TextFormField(
textInputAction: TextInputAction.next,
keyboardType: TextInputType.number,
obscureText: true,
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'CVV',
hintText: 'CVV Number',
),
maxLength: 3,
),
),
],
),
),
Container(
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: 20),
child: ElevatedButton(
child: Text('Pay'),
onPressed: () {},
),
),
],
),
),
为卡号验证创建一个类
class CardNumberFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue previousValue,
TextEditingValue nextValue,
) {
var inputText = nextValue.text;
if (nextValue.selection.baseOffset == 0) {
return nextValue;
}
var bufferString = new StringBuffer();
for (int i = 0; i < inputText.length; i++) {
bufferString.write(inputText[i]);
var nonZeroIndexValue = i + 1;
if (nonZeroIndexValue % 4 == 0 && nonZeroIndexValue != inputText.length) {
bufferString.write(' ');
}
}
var string = bufferString.toString();
return nextValue.copyWith(
text: string,
selection: new TextSelection.collapsed(
offset: string.length,
),
);
}
}
为日期验证创建一个类
class DateFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
var text = newValue.text;
if (newValue.selection.baseOffset == 0) {
return newValue;
}
var buffer = new StringBuffer();
for (int i = 0; i < text.length; i++) {
buffer.write(text[i]);
var nonZeroIndex = i + 1;
if (nonZeroIndex % 2 == 0 && nonZeroIndex != text.length) {
buffer.write('/');
}
}
var string = buffer.toString();
return newValue.copyWith(
text: string,
selection: new TextSelection.collapsed(offset: string.length));
}
}
推荐阅读
- talend - tSetKeystore 无法在 talend 云上运行
- paypal - 根据使用情况,每月支付不同金额的 Paypal 定期付款
- asp.net - .NET Core 5 - 从 VSCode 手动编写 Docker 不会运行应用程序
- c++ - 创建包含字符串和 std::endl 的变量,可用于输出流到 std::cout
- php - 使用令牌登录 Moodle
- azure - 如何在 Azure 数据资源管理器中备份数据库架构?
- php - 使用 Yii2.0.43 的 PHP8 OCI 连接问题
- java - Gradle 的 Spotbugs 显示了这两个报告
- intershop - 排除客户客户细分
- r - 使用方差分析计算重复测量时的对比度误差