【问题标题】:Problem with adding two numbers stored in textfield in flutter. I don't know what is wrong在颤动中添加存储在文本字段中的两个数字时出现问题。我不知道出了什么问题
【发布时间】:2021-05-17 08:23:19
【问题描述】:

我正在尝试添加两个数字,但无法做到。 我认为它应该足够简单,但我想并非如此。我认为一切都很好,但它根本不起作用。

 import 'package:flutter/material.dart';
 void main() {  runApp(ClassMaterial());  }
 class ClassMaterial extends StatefulWidget {  @override  _Tax 
 createState() => _Tax();    }
   class _Tax extends State<ClassMaterial> {
 bool _value = false;
 bool a = false;
 bool b = false;

 final TextEditingController x = TextEditingController();
 final TextEditingController y = TextEditingController();
 var basic = 0, other = 0, sum = 0;

 void doSum() {
   setState(() {
     basic = int.parse(x.text);
     other = int.parse(y.text);
     sum += basic + other;
   });
 }

 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     home: Scaffold(
       appBar: AppBar(
         title: Text('SALARY TAX CALCULATOR'),
         centerTitle: true,
       ),
       body: Card(
           child:
               Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
         Container(
           margin: EdgeInsets.fromLTRB(10, 10, 0, 0),
           child: Text('GENDER',
               textAlign: TextAlign.left,
               style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold)),
         ),
         Row(
           children: <Widget>[
             Container(margin: EdgeInsets.fromLTRB(20, 0, 15, 0)),
             Text('Male'),
             (Checkbox(
                 value: _value,
                 onChanged: (value) {
                   setState(() {
                     _value = value;
                     a = false;
                     b = false;
                   });
                 }))
           ],
         ),
         Row(
           children: <Widget>[
             Container(margin: EdgeInsets.fromLTRB(20, 0, 0, 0)),
             Text('Female'),
             (Checkbox(
                 value: a,
                 onChanged: (value) {
                   setState(() {
                     a = value;
                     _value = false;
                     b = false;
                   });
                 }))
           ],
         ),
         Row(
           children: <Widget>[
             Container(margin: EdgeInsets.fromLTRB(20, 0, 3, 0)),
             Text('Couple'),
             (Checkbox(
                 value: b,
                 onChanged: (value) {
                   setState(() {
                     b = value;
                     _value = false;
                     a = false;
                   });
                 }))
           ],
         ),
         Container(
           margin: EdgeInsets.fromLTRB(10, 10, 0, 0),
           child: Text('SALARY DETAILS',
               textAlign: TextAlign.left,
               style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold)),
         ),
         TextField(
           controller: x,
           decoration: InputDecoration(
             labelText: "Basic Salary(Monthly)",
             fillColor: Colors.white,
             border: new OutlineInputBorder(
               borderRadius: new BorderRadius.circular(25.0),
               borderSide: new BorderSide(),
             ),
             //fillColor: Colors.green
           ),
           keyboardType: TextInputType.number,
           style: new TextStyle(
             fontFamily: "Poppins",
           ),
         ),
         TextField(
           controller: y,
           decoration: InputDecoration(
             labelText: "Other Salary(Monthly)",
             fillColor: Colors.white,
             border: new OutlineInputBorder(
               borderRadius: new BorderRadius.circular(25.0),
               borderSide: new BorderSide(),
             ),
             //fillColor: Colors.green
           ),
           keyboardType: TextInputType.number,
           style: new TextStyle(
             fontFamily: "Poppins",
           ),
         ),
         Text("$sum")
       ])),
     ),
   );
 }    }

【问题讨论】:

  • 你没有在任何地方调用 doSum() 函数对吗?
  • 请不要在您的问题中多次复制粘贴相同的文本,也不要忽略其他的内容。

标签: flutter addition


【解决方案1】:

像这样更改 doSum():

  void doSum() {
    setState(() {
      basic = x.text.isEmpty ? 0 : int.parse(x.text);
      other = y.text.isEmpty ? 0 : int.parse(y.text);
      sum = basic + other;
    });
  }

并像这样在 TextFields 中添加 onChnad:

onChanged: (String value) {
              doSum();
            },

如果这能解决您的问题,请告诉我。

【讨论】:

    【解决方案2】:

    在您的代码中,您添加了 2 个文本框,您可以在其中输入两个数据。您的代码中没有调用添加这两个数据的任何内容。

    现在您需要添加一个名为“add”的按钮并添加另一个文本框,显示两个数字相加的结果。

    【讨论】:

    • 不加按钮就不能做到吗?我的意思是直接在文本框中显示它
    • 当然!你可以。我认为在不了解基础知识的情况下对您来说还为时过早。查看有关如何添加或删除数字的 java 示例。在 youtube 上练习一些示例(大量教程),然后再返回。
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 2023-01-30
    • 2021-10-06
    相关资源
    最近更新 更多