Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 无法解决货币中的数字格式?_Flutter_Dart_Currency_Number Formatting_Flutter Intl - Fatal编程技术网

Flutter 无法解决货币中的数字格式?

Flutter 无法解决货币中的数字格式?,flutter,dart,currency,number-formatting,flutter-intl,Flutter,Dart,Currency,Number Formatting,Flutter Intl,我试过数字格式“#,##0.#” 我试过数字格式“#,##0.00” 我试过数字格式“#,##0.#0” 我想要的格式是(1234567.89) 我在textformfield小部件中调用这种货币格式 ''' Widget mrpTextField() { return Padding( padding: const EdgeInsets.all(8.0), child: TextFormField( keyboardType: TextInput

我试过数字格式“#,##0.#”

我试过数字格式“#,##0.00”

我试过数字格式“#,##0.#0”

我想要的格式是(1234567.89)

我在textformfield小部件中调用这种货币格式

'''
Widget mrpTextField() {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        keyboardType: TextInputType.number,
        inputFormatters: [
          FilteringTextInputFormatter.digitsOnly,
          CurrencyFormat()
        ],
        controller: _mrp,
        validator: (value) {
          if (value.isEmpty) {
            return "MRP";
          }else if (value.length > 6) {
            return "";
          }
          return null;
        },
        decoration: InputDecoration(
          labelText: "Enter MRP",
        ),
        maxLines: null,
      ),
    );
  }
'''

TextFormField
中,将
FilteringTestExputFormatter.digitsOnly更改为
FilteringTestExputFormatter.allow(RegExp([0-9\.]),

CurrencyFormat

  class CurrencyFormat extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    if (newValue.text.isEmpty) {
      return newValue.copyWith(text: '');
    } else if (newValue.text == ".") {
      return newValue.copyWith(
        text: '0.00',
        selection: TextSelection.collapsed(offset: 2),
      );
    } else {
      NumberFormat f = NumberFormat("#,###0.00", "en_US");
      double newNumber = 0;
      if ((!newValue.text.contains(".")) && oldValue.text.contains('.')) {
        String tempString = newValue.text.replaceAll(f.symbols.GROUP_SEP, '');
        tempString = tempString.substring(0, tempString.length - 2) +
            "." +
            tempString.substring(tempString.length - 2);
        newNumber = double.parse(tempString);
      } else {
        newNumber = double.parse(newValue.text
            .replaceAll(f.symbols.GROUP_SEP, '')
            .replaceAll("..", '.'));
      }
      String newString = f.format(newNumber);
      int cursorPosition = 0;
      if (oldValue.text.length > newString.length) {
        cursorPosition = -1;
      } else if (oldValue.text.length < newString.length) {
        cursorPosition = 1;
      } else {
        if (oldValue.text.replaceAll(f.symbols.GROUP_SEP, '').length >
            newValue.text.replaceAll(f.symbols.GROUP_SEP, '').length) {
          cursorPosition = -1;
          if (newString == "0.00" && oldValue.selection.baseOffset == 0) {
            newString = "";
          }
        } else if (oldValue.text.replaceAll(f.symbols.GROUP_SEP, '').length <
            newValue.text.replaceAll(f.symbols.GROUP_SEP, '').length) {
          cursorPosition = 1;
        } else if (oldValue.selection.extentOffset >
            oldValue.selection.baseOffset) {
          cursorPosition =
              oldValue.selection.baseOffset - oldValue.selection.extentOffset;
          newString =
              newString.substring(0, oldValue.selection.baseOffset - 1) +
                  newString.substring(oldValue.selection.baseOffset + 1);
          newNumber = double.parse(newString
              .replaceAll(f.symbols.GROUP_SEP, '')
              .replaceAll("..", '.'));
          newString = f.format(newNumber);
          if (newString == "0.00" && oldValue.selection.baseOffset == 0) {
            newString = "";
          }
        }
      }
      return TextEditingValue(
        text: newString,
        selection: TextSelection.collapsed(
            offset: oldValue.selection.extent.offset +
                cursorPosition +
                (f.symbols.GROUP_SEP.allMatches(newString).length -
                    f.symbols.GROUP_SEP.allMatches(oldValue.text).length)),
      );
    }
  }
}
类CurrencyFormat扩展了TextInputFormatter{
@凌驾
文本编辑值格式编辑更新(
TextEditingValue旧值,TextEditingValue新值){
if(newValue.text.isEmpty){
返回newValue.copyWith(文本:“”);
}else if(newValue.text==”){
返回newValue.copyWith(
文本:“0.00”,
选择:文本选择。折叠(偏移量:2),
);
}否则{
NumberFormat f=NumberFormat(“#,#,###0.00”,“en#u US”);
双newNumber=0;
如果((!newValue.text.contains(“.”)和&oldValue.text.contains('.')){
String tempString=newValue.text.replaceAll(f.symbols.GROUP_SEP');
tempString=tempString.substring(0,tempString.length-2)+
"." +
tempString.substring(tempString.length-2);
newNumber=double.parse(tempString);
}否则{
newNumber=double.parse(newValue.text
.replaceAll(f.symbols.GROUP_SEP.))
.replaceAll(“…”,“.”);
}
字符串newString=f.format(newNumber);
int cursorPosition=0;
if(oldValue.text.length>newString.length){
光标位置=-1;
}else if(oldValue.text.length
newValue.text.replaceAll(f.symbols.GROUP_SEP.)。长度){
光标位置=-1;
if(newString==“0.00”&&oldValue.selection.baseOffset==0){
新闻字符串=”;
}
}else if(oldValue.text.replaceAll(f.symbols.GROUP_SEP.)。长度<
newValue.text.replaceAll(f.symbols.GROUP_SEP.)。长度){
光标位置=1;
}else if(oldValue.selection.extendtoffset>
oldValue.selection.baseOffset){
光标位置=
oldValue.selection.baseOffset-oldValue.selection.extentOffset;
新闻字符串=
newString.substring(0,oldValue.selection.baseOffset-1)+
newString.substring(oldValue.selection.baseOffset+1);
newNumber=double.parse(newString
.replaceAll(f.symbols.GROUP_SEP.))
.replaceAll(“…”,“.”);
newString=f.format(newNumber);
if(newString==“0.00”&&oldValue.selection.baseOffset==0){
新闻字符串=”;
}
}
}
返回TextEditingValue(
文本:新闻字符串,
选择:TextSelection.collapsed(
偏移量:oldValue.selection.extent.offset+
光标位置+
(f.symbols.GROUP_SEP.allMatches(新闻字符串).长度-
f、 symbols.GROUP_SEP.allMatches(oldValue.text.length)),
);
}
}
}

同样,
“#,#####0.00”
是正确的

那么您希望格式是货币格式还是普通数字格式?你可以一直使用
NumberFormat.currency
NumberFormat.simpleCurrency
来代替。实际情况是,我正在尝试创建一个应用程序,其中我想限制用户输入最多6位数字,如果他使用十进制数字,则应该只使用十进制数字后的2个数字。我希望你明白我的意思,然后你就不用了想要
NumberFormat
,你想要。@sadhanchilka在你的情况下,你应该使用
“#,####0.00”
,你可以在伟大的工作中找到解决方案,谢谢,
  class CurrencyFormat extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    if (newValue.text.isEmpty) {
      return newValue.copyWith(text: '');
    } else if (newValue.text == ".") {
      return newValue.copyWith(
        text: '0.00',
        selection: TextSelection.collapsed(offset: 2),
      );
    } else {
      NumberFormat f = NumberFormat("#,###0.00", "en_US");
      double newNumber = 0;
      if ((!newValue.text.contains(".")) && oldValue.text.contains('.')) {
        String tempString = newValue.text.replaceAll(f.symbols.GROUP_SEP, '');
        tempString = tempString.substring(0, tempString.length - 2) +
            "." +
            tempString.substring(tempString.length - 2);
        newNumber = double.parse(tempString);
      } else {
        newNumber = double.parse(newValue.text
            .replaceAll(f.symbols.GROUP_SEP, '')
            .replaceAll("..", '.'));
      }
      String newString = f.format(newNumber);
      int cursorPosition = 0;
      if (oldValue.text.length > newString.length) {
        cursorPosition = -1;
      } else if (oldValue.text.length < newString.length) {
        cursorPosition = 1;
      } else {
        if (oldValue.text.replaceAll(f.symbols.GROUP_SEP, '').length >
            newValue.text.replaceAll(f.symbols.GROUP_SEP, '').length) {
          cursorPosition = -1;
          if (newString == "0.00" && oldValue.selection.baseOffset == 0) {
            newString = "";
          }
        } else if (oldValue.text.replaceAll(f.symbols.GROUP_SEP, '').length <
            newValue.text.replaceAll(f.symbols.GROUP_SEP, '').length) {
          cursorPosition = 1;
        } else if (oldValue.selection.extentOffset >
            oldValue.selection.baseOffset) {
          cursorPosition =
              oldValue.selection.baseOffset - oldValue.selection.extentOffset;
          newString =
              newString.substring(0, oldValue.selection.baseOffset - 1) +
                  newString.substring(oldValue.selection.baseOffset + 1);
          newNumber = double.parse(newString
              .replaceAll(f.symbols.GROUP_SEP, '')
              .replaceAll("..", '.'));
          newString = f.format(newNumber);
          if (newString == "0.00" && oldValue.selection.baseOffset == 0) {
            newString = "";
          }
        }
      }
      return TextEditingValue(
        text: newString,
        selection: TextSelection.collapsed(
            offset: oldValue.selection.extent.offset +
                cursorPosition +
                (f.symbols.GROUP_SEP.allMatches(newString).length -
                    f.symbols.GROUP_SEP.allMatches(oldValue.text).length)),
      );
    }
  }
}