Как я должен правильно устранять нулевые ошибки в своем коде?

#flutter #dart #null

Вопрос:

Я довольно новичок в фреймворке мобильных приложений Flutter и все еще пытаюсь понять, что такое нулевая безопасность. В строке 11 я не уверен, как справиться с этой ошибкой в моем коде.

~ Поле экземпляра с ненулевым значением ‘_numberfrom’ должно быть инициализировано. Попробуйте добавить выражение инициализатора или порождающий конструктор, который инициализирует его или помечает с опозданием.

  • должен ли я отметить это поздно и будет ли это правильным способом инициализации «numberfrom»?

  • Строка 37 Я также получаю синюю строку в своем коде

Текст((_numberFrom == null) ? «: _numberFrom.toString()), ~ Операнд не может быть равен нулю, поэтому условие всегда ложно, попробуйте удалить условие, заключающее условие или весь условный оператор.

Любая помощь будет очень признательна, спасибо! Я также прикрепил фрагмент своего кода, я действительно ищу идеи и помощь в правильном исправлении ошибок.введите описание изображения здесь

Комментарии:

1. double? _numberFrom и Text(_numberFrom?.toString()??'') может помочь.

2. просто знайте, что double? someValue средства someValue могут быть нулевыми.

3. Я использовал двойника? _numberFrom и это исправило ошибку! Итак, что, по моему мнению, говорит комплиеру строка кода, является ли это двойным? _numberFrom может быть двойным значением или другим правильным типом данных?

4. double? someValue означает, что мы сообщаем исполнителю, что someValue это может быть двойное значение или ноль.

Ответ №1:

Если вы хотите проверить null значение, сделайте его недействительным, объявив «нравится int? _numberFrom; «. Тогда вы можете использовать Text((_numberFrom == null) ? '' : _numberFrom.toString()),

Однако, если вы объявляете переменную с помощью late , вы получите исключения.

Если вы это сделаете Text((_numberFrom == null) ? '' : _numberFrom.toString()), , это всегда займет места.

Я предпочитаю, когда я не хочу использовать значение по умолчанию (столбец/стеки..)

if (_numberFrom != null) Text(_numberFrom.toString()),

внутри для одного ребенка Visibilty

   Visibility(
          visible: _numberFrom != null,
          child: Text(_numberFrom.toString()),
        ),
 

Результат

Text((_numberFrom == null) ? '' : _numberFrom.toString()), он всегда будет занимать пробелы красного цвета.

выход

Виджет Тестирования

 
class TestCenter extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    int? _numberFrom;
    int? num2;

    late int num3;

    return Column(
      children: [
        Container(
          width: double.infinity,
          height: 100,
          color: Colors.deepPurple,
          child: Text("Top"),
        ),
        Text((_numberFrom == null) ? '' : _numberFrom.toString()),
        Text((num2 == null) ? "num2 is null" : num2.toString()),

        ///* this will will be cause errors
        // Text(
        //   (num3 == null ? "num3 is null" : num3.toString()),
        // ),

        ///* I prefer when i dont want to use default value
        if (_numberFrom != null) Text(_numberFrom.toString()),

        Visibility(
          visible: _numberFrom != null,
          child: Text(_numberFrom.toString()),
        ),
        Container(
          width: double.infinity,
          height: 100,
          color: Colors.deepPurple,
          child: Text("Bottom >"),
        )
      ],
    );
  }
}

 

Комментарии:

1. Вау, это было чрезвычайно полезно! Мне очень нравится, как вы это изложили, в том числе как использовать последнее заявление для лучшего разъяснения, большое вам спасибо!

Ответ №2:

Вы можете использовать if null оператора в своем Text виджете следующим образом:

 Text(_numberFrom.toString() ?? 'default value') 
 

Вы можете проверить более подробную информацию о нулевой безопасности здесь

Комментарии:

1. что вы подразумеваете под использованием значения по умолчанию? И как бы я прокомментировал это ?? для _numberFrom, Спасибо за ваш повтор!

2. Ладно! Большое вам спасибо, это очень полезно!