Flutter, dart: в чем разница между этими фрагментами кода?

Фрагмент кода A работает, но фрагмент B не работает. Я проверяю тип данных переменной "image" с помощью print(), изображение (переменная) A и B имеет тип данных (XFile), а не Null. Но B все еще не работает....

      final XFile? image = await _picker.pickImage(source: ImageSource.gallery);

print(image);

// Code snippet A
if (image == null) return null;
return File(image.path);

// Code snippet B
return File(image!.path);

2 ответа

Смысл вашего фрагмента кода A:

Если переменная имеет значение null, она вернет null, в противном случае она вернет переменную.

Смысл вашего фрагмента кода B:

Он возвращает переменную, хотяпеременная может быть нулевой.

Если вы используете фрагмент кода B, вы используетеи измените переменную с типа, допускающего значение NULL, на тип, не допускающий значения NULL, и переменная на самом деле пуста (не имеет значения), и вы не можете использоватьпоэтому возвращает ошибку.

imageвозможноnull, В кодеAвы проверяете значение, поэтому вы не получитеexception, но в кодеBты используешь!наnullableзначение, которое неверно.

Если вы ищете короткую форму, вы можете попробовать это:

      return image == null ? null : File(image.path);
Другие вопросы по тегам