如何通过 flutter 中的另一种货币文本字段更改一种货币文本字段?
How to change one currency textfield via another currency textfield in flutter?
你能告诉我如何通过收听我的另一种货币文本字段来计算我的一种货币吗?
现在我还是有问题。每当我的文本字段为空时,我都会遇到类似
的异常
无效的 radix-10 数字(在字符 1 处)
0.0
^
或
无效数字(第 1 个字符)
^
我该如何解决这个问题?帮帮我。请。
提前致谢。
final silverCoinController = TextEditingController();
final goldCoinController = TextEditingController();
int silver = 0;
double gold = 0.0;
_convertSilver() {
setState(() {
//define your own formula
silverCoinController.text = (gold * 1000).toString();
print(gold);
});
}
_convertGold() {
setState(() {
//define your own formula
goldCoinController.text = (silver / 1000).toString();
print(silver);
});
}
_silverValue() {
silver = int.parse(silverCoinController.text);
}
_goldValue() {
gold = double.parse(goldCoinController.text);
}
@override
void initState() {
silverCoinController.addListener(_silverValue);
goldCoinController.addListener(_goldValue);
super.initState();
}
@override
void dispose() {
silverCoinController.dispose();
goldCoinController.dispose();
super.dispose();
}
。
.
.
Column(
children: <Widget> [
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true)
onChanged: (text) {
_convertGold();
},
controller: silverCoinController,
),
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true)
onChanged: (text) {
_convertSilver();
},
controller: silverCoinController,
),
]
)
您可以复制粘贴运行下面的完整代码
第 1 步:sliver
使用 double
第 2 步:检查 isNotEmpty
是否有 TextEditingController
和 onChanged
_silverValue() {
if (silverCoinController.text.isNotEmpty) {
silver = double.parse(silverCoinController.text);
}
}
...
onChanged: (text) {
if (text.isNotEmpty) {
_convertGold();
}
}
第三步:两个TextField
使用相同silverCoinController
需要修改
工作演示
完整代码
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final silverCoinController = TextEditingController();
final goldCoinController = TextEditingController();
double silver = 0.0;
double gold = 0.0;
_convertSilver() {
setState(() {
//define your own formula
silverCoinController.text = (gold * 1000).toString();
print(gold);
});
}
_convertGold() {
setState(() {
//define your own formula
goldCoinController.text = (silver / 1000).toString();
print(silver);
});
}
_silverValue() {
if (silverCoinController.text.isNotEmpty) {
silver = double.parse(silverCoinController.text);
}
}
_goldValue() {
if (goldCoinController.text.isNotEmpty) {
gold = double.parse(goldCoinController.text);
}
}
@override
void initState() {
silverCoinController.addListener(_silverValue);
goldCoinController.addListener(_goldValue);
super.initState();
}
@override
void dispose() {
silverCoinController.dispose();
goldCoinController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(children: <Widget>[
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Sliver',
),
keyboardType: TextInputType.numberWithOptions(decimal: true),
onChanged: (text) {
if (text.isNotEmpty) {
_convertGold();
}
},
controller: silverCoinController,
),
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Gold',
),
keyboardType: TextInputType.numberWithOptions(decimal: true),
onChanged: (text) {
if (text.isNotEmpty) {
_convertSilver();
}
},
controller: goldCoinController,
),
]),
),
);
}
}
你能告诉我如何通过收听我的另一种货币文本字段来计算我的一种货币吗?
现在我还是有问题。每当我的文本字段为空时,我都会遇到类似
的异常无效的 radix-10 数字(在字符 1 处) 0.0 ^
或
无效数字(第 1 个字符)
^
我该如何解决这个问题?帮帮我。请。 提前致谢。
final silverCoinController = TextEditingController();
final goldCoinController = TextEditingController();
int silver = 0;
double gold = 0.0;
_convertSilver() {
setState(() {
//define your own formula
silverCoinController.text = (gold * 1000).toString();
print(gold);
});
}
_convertGold() {
setState(() {
//define your own formula
goldCoinController.text = (silver / 1000).toString();
print(silver);
});
}
_silverValue() {
silver = int.parse(silverCoinController.text);
}
_goldValue() {
gold = double.parse(goldCoinController.text);
}
@override
void initState() {
silverCoinController.addListener(_silverValue);
goldCoinController.addListener(_goldValue);
super.initState();
}
@override
void dispose() {
silverCoinController.dispose();
goldCoinController.dispose();
super.dispose();
}
。 . .
Column(
children: <Widget> [
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true)
onChanged: (text) {
_convertGold();
},
controller: silverCoinController,
),
TextField(
keyboardType: TextInputType.numberWithOptions(decimal: true)
onChanged: (text) {
_convertSilver();
},
controller: silverCoinController,
),
]
)
您可以复制粘贴运行下面的完整代码
第 1 步:sliver
使用 double
第 2 步:检查 isNotEmpty
是否有 TextEditingController
和 onChanged
_silverValue() {
if (silverCoinController.text.isNotEmpty) {
silver = double.parse(silverCoinController.text);
}
}
...
onChanged: (text) {
if (text.isNotEmpty) {
_convertGold();
}
}
第三步:两个TextField
使用相同silverCoinController
需要修改
工作演示
完整代码
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final silverCoinController = TextEditingController();
final goldCoinController = TextEditingController();
double silver = 0.0;
double gold = 0.0;
_convertSilver() {
setState(() {
//define your own formula
silverCoinController.text = (gold * 1000).toString();
print(gold);
});
}
_convertGold() {
setState(() {
//define your own formula
goldCoinController.text = (silver / 1000).toString();
print(silver);
});
}
_silverValue() {
if (silverCoinController.text.isNotEmpty) {
silver = double.parse(silverCoinController.text);
}
}
_goldValue() {
if (goldCoinController.text.isNotEmpty) {
gold = double.parse(goldCoinController.text);
}
}
@override
void initState() {
silverCoinController.addListener(_silverValue);
goldCoinController.addListener(_goldValue);
super.initState();
}
@override
void dispose() {
silverCoinController.dispose();
goldCoinController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(children: <Widget>[
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Sliver',
),
keyboardType: TextInputType.numberWithOptions(decimal: true),
onChanged: (text) {
if (text.isNotEmpty) {
_convertGold();
}
},
controller: silverCoinController,
),
TextField(
decoration: InputDecoration(
border: OutlineInputBorder(),
labelText: 'Gold',
),
keyboardType: TextInputType.numberWithOptions(decimal: true),
onChanged: (text) {
if (text.isNotEmpty) {
_convertSilver();
}
},
controller: goldCoinController,
),
]),
),
);
}
}