【发布时间】:2021-09-21 03:52:33
【问题描述】:
【问题讨论】:
标签: flutter
【问题讨论】:
标签: flutter
试试下面的代码希望它对你有帮助,或者你可以使用 Some Dependency here 或 here 支付卡
用过的包
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));
}
}
【讨论】: