當其中一個框填充一個值時,我想用計算值自動填充其他框。例如:
當我填寫“米”值時,“英尺”和“厘米”中的值應該自動填充相應的值。其他值也一樣。我想不出任何想法或代碼(在Flutter 中)。請在代碼、插件或擴展方面提供一些幫助。
uj5u.com熱心網友回復:
這只是一個關于如何實作你想要的快速示例,只需使用TextFormField帶有自己的TextEditingController's 的普通小部件。
列舉UnitType將幫助您確定實際修改了哪個欄位并相應地更新其他欄位。

enum UnitType {
meter,
cm,
feet,
}
class ConvertWidget extends StatelessWidget {
ConvertWidget({Key? key}) : super(key: key);
final TextEditingController _feetController = TextEditingController(text: '0');
final TextEditingController _cmController = TextEditingController(text: '0');
final TextEditingController _meterController = TextEditingController(text: '0');
void _convertUnit(UnitType type) {
double? ft = double.tryParse(_feetController.value.text) ?? 0;
double? cm = double.tryParse(_cmController.value.text) ?? 0;
double? meter = double.tryParse(_meterController.value.text) ?? 0;
switch (type) {
case UnitType.feet:
_meterController.text = (ft * 0.3048).toString();
_cmController.text = (ft * 100).toString();
break;
case UnitType.cm:
_meterController.text = (cm / 100).toString();
_feetController.text = (cm * 0.03048).toString();
break;
case UnitType.meter:
_cmController.text = (meter * 100).toString();
_feetController.text = (meter * 0.3048).toString();
break;
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextFormField(
controller: _feetController,
keyboardType: TextInputType.number,
onChanged: (_) => _convertUnit(UnitType.feet),
decoration: const InputDecoration(labelText: 'Feet'),
),
TextFormField(
controller: _cmController,
keyboardType: TextInputType.number,
onChanged: (_) => _convertUnit(UnitType.cm),
decoration: const InputDecoration(labelText: 'CM'),
),
TextFormField(
controller: _meterController,
keyboardType: TextInputType.number,
onChanged: (_) => _convertUnit(UnitType.meter),
decoration: const InputDecoration(labelText: 'Meter'),
),
],
),
),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374032.html
