#flutter #dart
#flutter #dart
Вопрос:
Я создал приложение и создаю простую логику. Но когда я запускаю его, он выбрасывает меня
The method '>' was called on null.
Receiver: null
Tried calling: >(25)
Я имею в виду базовое математическое сравнение, я не знаю, почему оно меня так выдает, вот мой файл
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 getResult() {
if (_bmi >= 25) {
return 'Overweight';
} else if (_bmi > 18.5) {
return 'Normal';
} else {
return 'Underweight';
}
}
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 aa lower than normal body weight. You can eat a bit more.';
}
}
}
Можете ли вы помочь мне разобраться в этой ошибке?
Ответ №1:
В calculateBMI()
вы объявляете новую локальную переменную _bmi
, объявляя ее тип, поэтому _bmi
поле класса CalculatorBrain
по-прежнему равно null. Просто удалите объявление типа _bmi
переменной в calculateBMI()
. Вы также можете перейти calculateBMI()
на getter и полностью удалить _bmi
поле. И отметьте height
и weight
как обязательный. Также вы можете добавить утверждения, чтобы убедиться, что эти значения больше 0 и не равны нулю.
import 'dart:math';
import 'meta';
class CalculatorBrain {
CalculatorBrain({@required this.height,
@required this.weight,
}) : assert(height > 0), assert(weight > 0);
final int height;
final int weight;
double get _bmi => weight / pow(height / 100, 2);
String getResult() {
if (_bmi >= 25) {
return 'Overweight';
} else if (_bmi > 18.5) {
return 'Normal';
} else {
return 'Underweight';
}
}
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 aa lower than normal body weight. You can eat a bit more.';
}
}
}
Ответ №2:
Возможно, вы вызываете getResult()
или getInterpretation()
перед присвоением значения _bmi
.
Чтобы предотвратить это, вы можете проверить, _bmi
есть null
ли это, прежде чем сравнивать его. Вот пример для вашей getResult
функции:
String getResult() {
if (_ bmi != null){
if (_bmi >= 25) {
return 'Overweight';
} else if (_bmi > 18.5) {
return 'Normal';
} else {
return 'Underweight';
}
}
}