Я немного потерялся и пару дней чешу голову, я получаю эту ошибку
Оператор проверки null, используемый для нулевого значения
На этом фрагменте кода
percent = (scores[section] ?? 0 / totalPerSection[section]!) * 100;
раздел внутри здесь (scores[section] ?? 0
выдает нулевой указатель, но значение содержит данные из кода выше. Вот более подробный код
num getSectionScore(int section) {
log("getSectionScore($section) called");
var data = scores[section] ?? 0;
log("getSectionScoredata($data) called");
return scores[section] ?? 0;
}
num getSectionPtsPoss(int section) {
return totalPerSection[section]!;
}
String getPercentage(int section) {
log("getPercentage($section) called");
num percent = 0;
try {
percent = (scores[section] ?? 0 / totalPerSection[section]!) * 100;
} on NoSuchMethodError catch (_) { }
if (percent % 1 == 0.0) { // if number is an int, return it as is
return percent.truncate().toString();
} else if (percent % 10 == 0.0) { // else if num comes out to an even tenth (ex 0.1), return with 1 decimal
return percent.toStringAsFixed(1);
} else {
return percent.toStringAsFixed(2);
}
}
Эту функцию я использую для получения разделов и оценок. Когда я делаю консольный журнал на этом бите здесь
var data = scores[section] ?? 0;
log("getSectionScoredata($data) called");
нулевой указатель не выбрасывается, так как когда scores[section]
оказывается нулевым, передается 0. Почему я получаю сообщение об ошибке в этой строке percent = (scores[section] ?? 0
и передаю значение по умолчанию, если раздел оказывается нулевым.
Любая помощь в том, что я делаю неправильно, приветствуется.
и метод, в котором значение totalPerSection[section] получено.
ВсегоPerSection[раздел]! является причиной проблемы. totalPerSection[раздел] имеет значение null.
Вы ошибаетесь, эта ошибка не возникает для этого фрагмента кода:
(scores[section] ?? 0
Вместо этого ошибка относится к этому коду:
totalPerSection[section]!
Либо totalPerSection
все еще null
в то время, когда вы его используете, либо вы пытаетесь получить доступ к несуществующему index
из totalPerSection
(помните, что index
начинается с 0)
Он выдает эту ошибку в строке
percent = (scores[section] ?? 0 / totalPerSection[section]!) * 100;
потому что totalPerSection[section]!
вместо scores[section] ?? 0
как вы думаете
Вы должны проверить значение totalPerSection[section]
, я уверен, что оно равно нулю
я думаю, что это ошибка: totalPerSection[section]!
Нулевой оператор проверки - это пометка ":!
.
scores[section]
может быть обнулено, и вы уже установили 0
, когда оно равно нулю,
но вы пропустите totalPerSection[section]
это тоже nullable
ценность.
Обходной путь:
Удалите отметку !
из `totalPerSection[section] и передайте значение по умолчанию.
вам также нужно поймать ошибку, когда 0/0
если вы установите 0 в качестве значения по умолчанию
можете ли вы указать, чему равны эти значения, просто распечатайте их и включите в свой пост