Получить общее количество при вводе в TextField - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть два textFields, и я хочу получить общее количество обоих textFields в текст, используя Flutter. Я пробовал несколько способов, но я не знаю, как это сделать,

У меня есть количество textFields, и оно меняется в соответствии с моей «буквой» списка, так как я могу получить сумму всех этих textFields, которые появляются ?

List letter;
int letterCount = 0;
int letterCount2 = 0;

for(int count; count<(letters.length); count++){
  TextField(
     onChanged: (text) {
     setState(){
        letterCount = int.parse(text);
     }
  },
}
Text(
     'Total - $letterCount2',
)

Этот код работает некорректно, и я также хочу сработать, если я откажусь от ответа или поменяю его, если кто-то может помочь мне набрать go, это было бы здорово :) 1006 *

Ответы [ 3 ]

1 голос
/ 28 апреля 2020

Возможно, вы не сможете увидеть изменения в выводе, если вы используете stateless widget

Попробуйте использовать Statefull widget

и всякий раз, когда вы хотите, чтобы пользовательский интерфейс обновлялся, уверен, что вы звоните setState метод

попробуйте ниже показанный код

import 'package:flutter/material.dart';

class TestScreen extends StatefulWidget {
  @override
  _TestScreenState createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: ListView(
        children: <Widget>[
          TextField(onChanged: (text) {
            setState(() {
              letterCount = int.parse(text);
            });
          }),
          TextField(onChanged: (text) {
            setState(() {
              letterCount2 = letterCount + (int.parse(text));
            });
          }),
          Text('Total - $letterCount2')
        ],
      ),
    );
  }

  //declare your variables.
  int letterCount = 0;
  int letterCount2 = 0;
}
1 голос
/ 28 апреля 2020

Как вы и другие, изменение первого TextField не изменит результат. Я бы сделал это так:

int letterCount = 0;
int letterCount2 = 0;

TextField(
    onChanged: (text) {
      setState(() {
          letterCount = int.parse(text);
      });
},
TextField(
    onChanged: (text) {
      setState(() {
          letterCount2 = int.parse(text);
      });
},
Text(
    'Total - ${letterCount + letterCount2}',
)

Не забудьте обернуть все это в StatefulWidget, иначе функция setState не будет работать.

1 голос
/ 28 апреля 2020

Вам нужно обернуть свои вычисления в setState, чтобы приложение повторно отображало aws для отображения обновленного итога:

  int letterCount = 0;
  int letterCount2 = 0;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Column(children: <Widget>[
      TextField(
        onChanged: (text) {
          setState(() {
            letterCount = int.parse(text);
          });
        },
      ),
      TextField(
        onChanged: (text) {
          setState(() {
            letterCount2 = letterCount + (int.parse(text));
          });
        },
      ),
      Text(
        'Total - $letterCount2',
      ),
    ]));
  }
...