gpt4 book ai didi

flutter - Backspace 不能与 TextInputFormatter 一起正常工作

转载 作者:行者123 更新时间:2023-12-04 11:14:20 30 4
gpt4 key购买 nike

我正在尝试创建自定义 InputTextFormatter。
格式化程序用空格分隔数千个,并将点后的字符数限制为 2 个字符。
我想将光标移动到 TextField 值的末尾,但根据我在达到限制(2 个字符)后尝试输入其他字符的次数,实际光标看起来会进一步移动。
看起来选择不适用于生成的 TextEditingValue。
重现步骤:

  • 在 TextField 中输入“12.34”。
  • 保持以前的值(value)尝试添加
    例如“111”。
  • 按退格键。没发生什么事。

  • 预期行为:按一次退格键必须删除 TextField 中的最后一个字符。

    class MoneyFormatter extends TextInputFormatter {
    MoneyFormatter({this.maxLength = 30, this.decimals = 0});
    final int maxLength;
    final int decimals;

    @override
    TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
    print('---------- newValue.selection.extentOffset : ${newValue.selection.extentOffset}');
    String output = newValue.text.formatAsCurrency(decimals: decimals);
    var result = TextEditingValue(
    text: output,
    //this line doesn't have any effect
    selection: TextSelection.collapsed(offset: output.length),
    );
    print('---------- result.selection.extentOffset : ${result.selection.extentOffset}');
    return result;
    }
    }

    每增加一个字符 result.selection.extentOffset保持不变,但 newValue.selection.extentOffset增加 1尽管返回 selection: TextSelection.collapsed(offset: output.length)
    extension FormatAsCurrency on String {
    String formatAsCurrency({int decimals = 0, String ifNullReturn}) {
    if (this == null) return ifNullReturn;
    if (this.isEmpty) return '';
    String output = this;
    if (output[0] == '.') output = '0' + output;
    var chunks = this.withoutTrailingDots.split('.');
    output = chunks[0].separatedThousands;
    if (decimals == 0 || chunks.length == 1) return output;
    output += '.' + chunks[1].limitLengthTo(decimals).withoutTrailingZeros;
    return output;
    }
    }

    我知道还有其他 TextInputFormatter在 pub.dev 上像 flutter_multi_formatter ,我都试过了,问题还是一样。

    最佳答案

    当我尝试使用带有键盘类型数字的格式化程序时,我发现了退格问题。光标倾向于跳过每个退格的字符。如果我使用键盘类型文本,它工作正常。

    关于flutter - Backspace 不能与 TextInputFormatter 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64213551/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com