Автоматически добавьте два числа в Текстовое поле и покажите результат в третьем текстовом поле.

#android #flutter #setstate

Вопрос:

У меня есть два текстовых поля, которые принимают ввод чисел. Я хочу рассчитать сумму двух текстовых полей, в то время как пользователь вводит числа в текстовые поля и в режиме реального времени показывает результаты в третьем текстовом поле. Это то, что я пробовал до сих пор.

 void _calculation() {
    setState((){
      _total = int.parse(_quantityController.text) * int.parse(feedPrice.text);
    },
    );
    print(_total);
  }
 

И покажите результат в третьем текстовом поле

 TextField(
                readOnly: true,
                textAlign: TextAlign.center,
                decoration: InputDecoration(
                    hintText: _total.toString(),
                ),
              ),
 

Я передаю итог в виде строки в поле подсказки текстового поля. Что я упускаю или что я делаю не так?

Комментарии:

1. Вам нужно вызвать _calculation() внутренние onChanged свойства обоих других TextField s

2. Моя проблема немного более сложна, чем то, как я ее сформулировал. Поэтому я задам его как новый вопрос. Я оставлю этот вопрос и этот ответ здесь для тех, кто хочет ссылаться на него в будущем.

Ответ №1:

вы неправильно настраиваете hintText .Потому что текст подсказки, который подсказывает, какой тип ввода принимает поле.

вы должны установить текст в текстовое поле вместо hinttext, как это

текст:_total.toString()

Комментарии:

1. Я просто попробовал это, и это не сработало.

2. зачем ты положил этот код

3. вам нужно будет поместить код в третье текстовое поле

4. Если вы хотите этого, когда вы изменяете значение любого текстового файла, который у вас есть, и получаете обновленный результат sum в третьем textview. Вы должны добавить прослушиватель как в текстовом представлении, так и в методе прослушивателя onchanged или что-то в этом роде . Вы должны вызвать функцию calculation() в их и установить значение в текстовом поле три в функции вычисления

Ответ №2:

Демонстрационный Виджет

 
class ApplicantsX extends StatefulWidget {
  const ApplicantsX({Key? key}) : super(key: key);

  @override
  State<ApplicantsX> createState() => _ApplicantsXState();
}

class _ApplicantsXState extends State<ApplicantsX> {
  double a = 0;
  double b = 0;

  final TextEditingController controller = TextEditingController();

  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        TextField(onChanged: (value) {
          final x = double.tryParse(value);

          setState(() {
            a = x ?? 0; // handle null and String

            controller.text = (a   b).toStringAsFixed(2);
          });
        }),
        TextField(onChanged: (value) {
          final x = double.tryParse(value);

          setState(() {
            b = x ?? 0;

            controller.text = (a   b).toStringAsFixed(2);
          });
        }),
        TextField(
          controller: controller,
          readOnly: true,
        )
      ],
    );
  }
}

 

Ответ №3:

 import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class _YourPageState extends State<YourPage> {
  int _age1 = 0, _age2 = 0, _totalAge = 0;
  final firstNumber = TextEditingController();
  final secondNumber = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: Padding(
        padding: const EdgeInsets.all(32.0),
        child: Column(
          children: <Widget>[
            TextField(
              controller: firstNumber,
              textInputAction: TextInputAction.next,
              keyboardType: TextInputType.number,
              onSubmitted: (String value) {},
            ),
            TextField(
              controller: secondNumber,
              textInputAction: TextInputAction.next,
              keyboardType: TextInputType.number,
              onSubmitted: (String value) {},
            ),
            Text(
              'Sum is: ${firstNumber.text   secondNumber.text}',
              textAlign: TextAlign.center,
              style: const TextStyle(fontWeight: FontWeight.bold),
            )
          ],
        ),
      ),
    );
  }
}
 

Комментарии:

1. Я не пробовал этот ответ, но, прочитав его, я понял, что это, вероятно, самый простой ответ, который здесь сработает. Дело в том, что моя проблема немного более сложна, чем то, как я ее сформулировал. Поэтому я задам его как новый вопрос. Я оставлю этот вопрос и этот ответ здесь для тех, кто хочет ссылаться на него в будущем.