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 如何在Flatter中的文本字段上设置输入货币的格式(从右到左)?_Flutter_Dart - Fatal编程技术网

Flutter 如何在Flatter中的文本字段上设置输入货币的格式(从右到左)?

Flutter 如何在Flatter中的文本字段上设置输入货币的格式(从右到左)?,flutter,dart,Flutter,Dart,在TextField中,我有一个初始文本0.00,那么一旦用户开始在flatter中键入,我如何格式化键入的值?我目前正在使用该软件包,但无法达到预期效果 例如,如果用户键入数字,我需要以下行为:1.800.45: 当用户点击1时。我们应该有0.01 当用户点击8时。我们应该显示0.18 当用户点击0时。我们应该显示1.80 当用户点击0时。我们应该显示1.800 当用户点击4时。我们应该显示1.800,4 当用户点击5时。我们应该显示1.800,45 我当前的代码: class\u Money

TextField
中,我有一个初始文本
0.00
,那么一旦用户开始在flatter中键入,我如何格式化键入的值?我目前正在使用该软件包,但无法达到预期效果

例如,如果用户键入数字,我需要以下行为:
1.800.45

当用户点击1时。我们应该有
0.01

当用户点击8时。我们应该显示
0.18

当用户点击0时。我们应该显示
1.80

当用户点击0时。我们应该显示
1.800

当用户点击4时。我们应该显示
1.800,4

当用户点击5时。我们应该显示
1.800,45

我当前的代码:

class\u MoneyTextFormField扩展了无状态小部件{
TextEditingController _controller=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回TextFormField(
控制器:_控制器,
样式:TextStyle(颜色:context.primaryColor),
键盘类型:TextInputType.number,
输入格式化程序:[
TextInputFormatter.withFunction((旧值、新值){
//删除字符以将值转换为双精度(因为其中一个字符可能出现在键盘上)
字符串newText=newValue.text.replaceAll(MoneyTextFormField.\u cents,'')
.replaceAll('.','')
.replaceAll(“,”,“)
.replaceAll(“”,“”)
.replaceAll(“-”,“”);
字符串值=新文本;
int cursorPosition=newText.length;
if(newText.isNotEmpty){
value=formatCurrency(double.parse(newText),fractionDigits:0);
光标位置=value.length;
}
返回TextEditingValue(
文本:值,
选择:文本选择。折叠(偏移:光标位置)
);
}),
],
);
}
}
设置值格式的函数:

///格式化给定值并将值作为字符串返回
///注意:参数应为int或double
静态字符串格式货币(数值,{int fractionDigits=2}){
ArgumentError.checkNotNull(值,'value');
返回格式化程序(
金额:value.toDouble(),
设置:MoneyFormatterSettings(
千分位分隔符:''',
小数分隔符:',',
fractionDigits:fractionDigits
),
).output.nonSymbol;
}

注意:这不是的副本,因为该解决方案不适用于颤振。

我刚刚使用Intl软件包找到了解决方案。只要使用下面的
formatCurrency
方法,一切都会得到解决

注意:该值应始终以美分为单位。这就是为什么我们将其除以100,得到美分,并将结果传递给格式化程序

静态字符串格式货币(num值,{int fractionDigits=2}){
ArgumentError.checkNotNull(值,'value');
//把美分换成几百美元。
数值=数值/100;
返回号码格式货币(
customPattern:“####,###.##”,
//使用荷兰,因为这个国家
//使用逗号表示千,点表示小数分隔符。
区域设置:“nl_nl”
).格式(值);
}
您可以使用这种方式

  bool isFirst = true; 


TextFormField(
                  controller: addAmountController,
                  keyboardType: TextInputType.number,
                  inputFormatters: <TextInputFormatter>[FilteringTextInputFormatter.digitsOnly],
                  onChanged: (value) {
                    String newValue = value.replaceAll(',', '').replaceAll('.', '');
                    if (value.isEmpty || newValue == '00') {
                      addAmountController.clear();
                      isFirst = true;
                      return;
                    }
                    double value1 = double.parse(newValue);
                    if (!isFirst) value1 = value1 * 100;
                    value = NumberFormat.currency(customPattern: '###,###.##').format(value1 / 100);
                    addAmountController.value = TextEditingValue(
                      text: value,
                      selection: TextSelection.collapsed(offset: value.length),
                    );
                  },
                )
bool isFirst=true;
TextFormField(
控制器:addAmountController,
键盘类型:TextInputType.number,
inputFormatters:[FilteringtInputFormatter.digitsOnly],
一旦更改:(值){
字符串newValue=value.replaceAll('','','').replaceAll('.','');
如果(value.isEmpty | | newValue='00'){
addAmountController.clear();
isFirst=true;
返回;
}
double value1=double.parse(newValue);
如果(!isFirst)value1=value1*100;
value=NumberFormat.currency(customPattern:'#########.##')。格式(值1/100);
addAmountController.value=文本编辑值(
文本:值,
选择:TextSelection.collapsed(偏移量:value.length),
);
},
)

嗨!我也有同样的问题。你能告诉我这个功能在哪里实现吗?在控制器或inputFormatter中?通过此方法在格式化程序中传递返回值。