YANGANANDY上计算3个彼此依赖的文本字段,例如Flutter

问题描述 投票:0回答:1

因此,我的财务应用程序中有这三个字段,名为金额,费率和总数。我使用控制器来获取值。通常是用户给出的费率。我希望金额字段动态更改给定的速率,反之亦然。 金额=总/费率 总计=金额*费率 我希望值以用户类型为变化。任何帮助都非常感谢

flutter google-cloud-firestore textformfield
1个回答
0
投票
也许不是最好的/最简洁的代码,但它有效:

import 'package:flutter/material.dart'; class Test extends StatefulWidget { const Test({super.key}); @override State<StatefulWidget> createState() => _TestState(); } class _TestState extends State<Test> { final TextEditingController amountController = TextEditingController(); final TextEditingController rateController = TextEditingController(); final TextEditingController totalController = TextEditingController(); double amount = 0; double rate = 0; double total = 0; @override void initState() { super.initState(); } @override void dispose() { amountController.dispose(); rateController.dispose(); totalController.dispose(); super.dispose(); } onChangedAmount(String? value) { try { amount = double.parse(value ?? amount.toString()); totalController.text = (amount * rate).toString(); } catch (e) { debugPrint('Error when parsing amount value: $value, error: $e'); } } onChangedRate(String? value) { try { rate = double.parse(value ?? rate.toString()); totalController.text = (amount * rate).toString(); } catch (e) { debugPrint('Error when parsing rate value: $value, error: $e'); } } onChangedTotal(String? value) { try { total = double.parse(value ?? total.toString()); amountController.text = (total / rate).toString(); } catch (e) { debugPrint('Error when parsing total value: $value, error: $e'); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: Padding( padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 25), child: Column( children: [ TextField( controller: amountController, decoration: InputDecoration(labelText: "Amount"), onChanged: onChangedAmount, ), SizedBox(height: 10), TextField( controller: rateController, decoration: InputDecoration(labelText: "Rate"), onChanged: onChangedRate, ), SizedBox(height: 10), TextField( controller: totalController, decoration: InputDecoration(labelText: "Total"), onChanged: onChangedTotal, ), ], ), ), ); } }
您还应改进代码(速率!= 0之前,将输入限制为数字等...)。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.