_CastError Оператор проверки null, используемый для флаттера с нулевым значением

Я немного потерялся и пару дней чешу голову, я получаю эту ошибку

Оператор проверки 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 и передаю значение по умолчанию, если раздел оказывается нулевым.

Любая помощь в том, что я делаю неправильно, приветствуется.

можете ли вы указать, чему равны эти значения, просто распечатайте их и включите в свой пост

Gwhyyy 25.11.2022 04:32

и метод, в котором значение totalPerSection[section] получено.

Gwhyyy 25.11.2022 04:34

ВсегоPerSection[раздел]! является причиной проблемы. totalPerSection[раздел] имеет значение null.

OMi Shah 25.11.2022 04:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
99
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы ошибаетесь, эта ошибка не возникает для этого фрагмента кода:

(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 в качестве значения по умолчанию

Другие вопросы по теме