【问题标题】:how to handle adding null values with eachother如何处理彼此添加空值
【发布时间】:2021-10-17 11:57:55
【问题描述】:

我想在 TextFormFields 中输入三个数字。控制器是 numOneControllernumTwoController 用于放置百分比,totalAmountController 用于放置金额。然后我想检查百分比是否总计为 100,以便我可以显示它们确实如此。当 totalAmountController 为空(null)时,显示其无效输入没有问题,但当 numOneControllernumTwoController 为空时,我收到错误 Invalid number (at character 1)。我知道处理程序不能与另一个添加空数字的事实。但是我该如何处理这个,所以我可以检查它是否为空,然后我想分配一个数字 0 来自动添加它。

  sumHandler() {
    var totalPrecent = int.parse(numOneController.text) +
        int.parse(numTwoController.text) ;

    var totalAmount = totalAmountController;

    if (totalPrecent == 100 && totalAmount.text.isEmpty == false) {
      debugPrint(totalPrecent.toString());
      debugPrint(totalAmount.text.toString());
    } else {
      debugPrint("invalid input");
    }
  }

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    使用tryParse 方法和默认值会有所帮助...


    
     sumHandler() {
        var totalPrecent = int.tryParse(numOneController.text) ?? 0 +
            int.tryParse(numTwoController.text) ?? 0;
    
        var totalAmount = totalAmountController;
    
        if (totalPrecent == 100 && totalAmount.text.isEmpty == false) {
          debugPrint(totalPrecent.toString());
          debugPrint(totalAmount.text.toString());
        } else {
          debugPrint("invalid input");
        }
      }
    
    

    【讨论】:

      【解决方案2】:

      创建一个临时变量并将其与 0 一起存储,如果文本字段有值则将其分配给它。像下面这样

      sumHandler() {
          int firstNumber = 0;
          int secondNumber = 0;
          if(numOneController.text != "")
          {
            firstNumber = int.parse(numOneController.text);
          }
          if(numTwoController.text != "")
          {
            secondNumber = int.parse(numTwoController.text);
          }
          var totalPrecent = firstNumber + secondNumber ;
      
          var totalAmount = totalAmountController;
      
          if (totalPrecent == 100 && totalAmount.text.isEmpty == false) {
            debugPrint(totalPrecent.toString());
            debugPrint(totalAmount.text.toString());
          } else {
            debugPrint("invalid input");
          }
        }
      

      【讨论】:

      • 不幸的是,我仍然收到错误,但我找到了解决方案,幸好我会在 OP 上发布它
      【解决方案3】:

      所以我找到了解决方案:Another exception was thrown: FormatException: Invalid number (at character 1)

      我不得不使用try catch block:

      try {
              firstNumber = int.parse(numOneController.text);
            } on FormatException {
              firstNumber = 0;
            }
      

      这样我可以处理异常并且在 FormatException 上我可以分配数字 0。

      【讨论】:

        猜你喜欢
        • 2014-10-14
        • 2013-04-05
        • 1970-01-01
        • 2019-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        相关资源
        最近更新 更多