#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. Ладно! Большое вам спасибо, это очень полезно!