以下 NoSuchMethodError 被抛出构建 Builder(dirty):方法 '>=' 在 null 上被调用。接收器:空 导致的相关错误是:



因此,我想通过调用方法并将数据传递到String中,将数据传递给新屏幕。第一个方法calc.calculateBMI((已成功传入bmiResult。。但我得到了以下calc.getInterpretation 的错误

第一屏幕的代码。

ButtomButton(
buttonTitle: 'CALCULATE',
onTap: (){
CalculatorBrain calc = CalculatorBrain(height: height, weight: weight);
Navigator.push(context, MaterialPageRoute(builder: (context){
return ResultsPage(
bmiResult: calc.calculateBMI(),
interpretation: calc.getInterpretation(),
);
}));
},
),
import 'dart:math';
class CalculatorBrain {
CalculatorBrain({this.height, this.weight});
final int height;
final int weight;
double _bmi;
String calculateBMI() {
double _bmi = weight / pow(height/100, 2);
return _bmi.toStringAsFixed(1);
}
String getInterpretation() {
if (_bmi >= 25){
return 'You have a higher than normal body weight. try to exercise more';
} else if (_bmi > 18.5) {
return 'You have a normal body weight. Good job!';
} else {
return 'You have a lower than normal body weight. You can eat a bit more';
}
}
}

错误我得到

======== Exception caught by widgets library =======================================================
The following NoSuchMethodError was thrown building Builder(dirty):
The method '>=' was called on null.
Receiver: null
Tried calling: >=(27)
The relevant error-causing widget was: 
MaterialApp file:///C:/Users/MICHEAL/AndroidStudioProjects/bmi_calculator/lib/main.dart:9:12
When the exception was thrown, this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      CalculatorBrain.getInterpretation (package:bmi_calculator/calculator_brain.dart:27:14)
#2      _InputPageState.build.<anonymous closure>.<anonymous closure> (package:bmi_calculator/screens/input_page.dart:214:40)
#3      MaterialPageRoute.buildContent (package:flutter/src/material/page.dart:55:55)
#4      MaterialRouteTransitionMixin.buildPage (package:flutter/src/material/page.dart:108:27)
...
====================================================================================================

上面代码中的错误是由于我们没有初始化CalculatorBrain类中的_bmi变量。

为此,我们可以使用以下代码继续:

import 'dart:math';
class CalculatorBrain {
CalculatorBrain({this.height, this.weight}) {
_bmi = weight / pow(height/100, 2);
}
final int height;
final int weight;
double _bmi;
String calculateBMI() =>
_bmi.toStringAsFixed(1);
String getInterpretation() {
if (_bmi >= 25){
return 'You have a higher than normal body weight. try to exercise more';
} else if (_bmi > 18.5) {
return 'You have a normal body weight. Good job!';
} else {
return 'You have a lower than normal body weight. You can eat a bit more';
}
}
}

具有空安全性的相同代码段是:

import 'dart:math';
class CalculatorBrain {
CalculatorBrain({required this.height, required this.weight}) {
_bmi = weight / pow(height / 100, 2);
}
final int height;
final int weight;
late double _bmi;
String calculateBMI() => _bmi.toStringAsFixed(1);
String getInterpretation() {
if (_bmi >= 25) {
return 'You have a higher than normal body weight. try to exercise more';
} else if (_bmi > 18.5) {
return 'You have a normal body weight. Good job!';
} else {
return 'You have a lower than normal body weight. You can eat a bit more';
}
}
}

最新更新