Простым решением будет выполнение метода вычисления onChange
для каждого TextField
.
Вот пример, в котором у нас есть три TextField
, и мы хотим показать сумму первых двух TextField
в третьем TextField
.
Вы можете отключить TextField
с помощью свойства enabled
или использовать AbsorbPointer
.
import 'package:flutter/material.dart';
class StackOverFlow extends StatefulWidget {
@override
_StackOverFlowState createState() => _StackOverFlowState();
}
class _StackOverFlowState extends State<StackOverFlow> {
TextEditingController _firstController = TextEditingController();
TextEditingController _secondController = TextEditingController();
TextEditingController _thirdController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Container(
child: Column(
children: <Widget>[
TextField(
controller: _firstController,
onChanged: (value) {
_calculate();
},
keyboardType: TextInputType.number,
),
TextField(
controller: _secondController,
onChanged: (value) {
_calculate();
},
keyboardType: TextInputType.number,
),
AbsorbPointer(
child: TextField(
controller: _thirdController,
keyboardType: TextInputType.number,
),
),
],
),
),
);
}
void _calculate() {
if (_firstController.text.trim().isNotEmpty &&
_secondController.text.trim().isNotEmpty) {
final firstValue = double.parse(_firstController.text);
final secondValue = double.parse(_secondController.text);
_thirdController.text = (firstValue + secondValue).toString();
}
}
}