Can you tell me how I calculate my one currency via listen my another currency textfield?
Now Still I have a problem. whenever my text field is empty i got an exception like
Invalid radix-10 number (at character 1) 0.0 ^
or
Invalid number (at character 1)
^
How can I solve this? Help me out. please. Thanks in advance.
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,
),
]
)
You can copy paste run full code below
Step 1: sliver
use double
Step 2: Check isNotEmpty
for TextEditingController
and onChanged
_silverValue() {
if (silverCoinController.text.isNotEmpty) {
silver = double.parse(silverCoinController.text);
}
}
...
onChanged: (text) {
if (text.isNotEmpty) {
_convertGold();
}
}
Step 3: Two TextField
use the same silverCoinController
need to modify
working demo
full code
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,
),
]),
),
);
}
}