如何通过 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 是否有 TextEditingControlleronChanged

_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,
          ),
        ]),
      ),
    );
  }
}