【问题标题】:How can i do same credit style in flutter?我怎样才能在颤振中做同样的信用风格?
【发布时间】:2021-09-21 03:52:33
【问题描述】:

我怎样才能在颤振中做同样的信用风格,任何人都可以帮助我吗? ??? 我只需要Formfield。如果我找到了所有的表单域。我可以自定义所有字段文本。 谢谢❤️

【问题讨论】:

    标签: flutter


    【解决方案1】:

    试试下面的代码希望它对你有帮助,或者你可以使用 Some Dependency herehere 支付卡

    用过的包

    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));
      }
    }
    

    您的结果屏幕->

    【讨论】:

    • ibb.co/qDyJb7n 如何删除这个 maxLenth 文本。
    • 只删除 CardWidget、DateWidget 和 CVV Widget 中的 maxLenth
    • 那行得通,counterText: '',当我使用这个时。
    • 您的问题解决了吗?
    • 没有兄弟,到期日期字段有问题,你能帮我怎么办 - ''4/6/2031'' 这种风格
    猜你喜欢
    • 2023-02-02
    • 2020-11-09
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多