gpt4 book ai didi

dart - 文本字段更新不适用于 flutter_masked_text

转载 作者:IT王子 更新时间:2023-10-29 07:22:31 25 4
gpt4 key购买 nike

我正在创建一个应用程序,其中一个功能是更新文本字段基于另一个文本字段的更改。

这些字段是关于产品价格的:美元、欧元、雷亚尔。

如果用户更改了美元价格,则欧元和实际价格也会更改,依此类推...

问题是,如果我使用普通的 TextEditingController 一切正常,但如果我使用 flutter_masked_text 包中的 MoneyMaskedTextController,更新就会停止。

谁能测试我的代码并回答我为什么 MoneyMaskedTextController 停止更新?

要进行测试,请不要忘记在 pubspec.yaml 中安装 flutter_masked_text: ^0.8.0。

如果我不能为它使用 flutter_masked_text,我怎么能使用掩码和更新文本字段?

谢谢。

import 'package:flutter/material.dart';
import 'package:flutter_masked_text/flutter_masked_text.dart';

void main() {
runApp(MaterialApp(
home: ProductType(),
));
}

class ProductType extends StatefulWidget {
_ProductTypeScreen createState() => _ProductTypeScreen();
}

class _ProductTypeScreen extends State<ProductType> {

@override
Widget build(BuildContext context) {

double dollarRate = 3.70;
double euroRate = 4.20;

//Normal controllers
/* final ctrl_real = TextEditingController();
final ctrl_dollar = TextEditingController();
final ctrl_euro = TextEditingController();*/
//Money Mask controllers
final ctrl_real = MoneyMaskedTextController();
final ctrl_dollar = MoneyMaskedTextController();
final ctrl_euro = MoneyMaskedTextController();

void change_real(String text) {
double real = double.parse(text);
ctrl_dollar.text = (real / dollarRate).toString();
ctrl_euro.text = (real / euroRate).toString();
}

void change_dollar(String text) {
double dolar = double.parse(text);
ctrl_real.text = (dolar * dollarRate).toString();
ctrl_euro.text = (dolar * dollarRate / euroRate).toString();
}

void change_euro(String text) {
double euro = double.parse(text);
ctrl_real.text = (euro * euroRate).toString();
ctrl_dollar.text = (euro * euroRate / dollarRate).toString();
}

return Scaffold(
body: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[

Container(
width: 160.0,
height: 200.0,
padding: EdgeInsets.all(20.0),
child: TextField(
controller: ctrl_euro,
decoration: InputDecoration(
labelText: "Euro price",
prefixText: "€"),
onChanged: change_euro,
keyboardType: TextInputType.numberWithOptions(
decimal: true),
)),

Container(
width: 160.0,
height: 200.0,
padding: EdgeInsets.all(20.0),
child: TextField(
controller: ctrl_dollar,
decoration: InputDecoration(
labelText: "Dolar price",
prefixText: "US\$"),
onChanged: change_dollar,
keyboardType: TextInputType.numberWithOptions(
decimal: true),
)),

Container(
width: 160.0,
height: 200.0,
padding: EdgeInsets.all(20.0),
child: TextField(
controller: ctrl_real,
decoration: InputDecoration(
labelText: "Real price",
prefixText: "R\$"),
onChanged: change_real,
keyboardType: TextInputType.numberWithOptions(
decimal: true),
)),

]
)
)
);
}
}

最佳答案

如果您检查每个方法收到的值,您会在十进制值中看到一个逗号“,”。

void change_real(String text) {
print("Text : $text");
}

所以每次你尝试解析这些值时,它都会在这里崩溃:

 double real = double.parse(text);

解决问题的一种方法是将 decimalSeparator 更改为“.”。 ,像这样:

final ctrl_real = MoneyMaskedTextController(decimalSeparator: ".");
final ctrl_dollar = MoneyMaskedTextController(decimalSeparator: ".");
final ctrl_euro = MoneyMaskedTextController(decimalSeparator: ".");

关于dart - 文本字段更新不适用于 flutter_masked_text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54916723/

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