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