在文本字段上键入时获得总计

时间:2020-04-28 12:50:54

标签: flutter dart int calculation

我有两个textField,我想使用Flutter将两个textField的总和转换为Text。 我尝试了几种方法,但我不知道该怎么做,

我有许多textField,并且它会根据我的列表“字母”而变化,那么如何获取所有出现的所有textField的总数?

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',
)

此代码无法正常工作,如果我退格或更改答案,我也想使用它 如果有人可以帮助我解决这个问题,那就太好了:)

3 个答案:

答案 0 :(得分:1)

您需要将计算结果包装到setState中,以便应用程序重新绘制以显示更新的总数:

  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',
      ),
    ]));
  }

答案 1 :(得分:1)

如果使用stateless小部件

,可能看不到输出中的更改。

尝试使用Statefull小部件

,每当您要更新ui时,请确保您正在调用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;
}

答案 2 :(得分:1)

就像您和其他人一样,更改第一个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函数将无法工作。