Что это за оператор "?."в дартс? - PullRequest
0 голосов
/ 13 октября 2019

я работаю с флаттером, в этой части кода используется операция "?."но я не понимаю

 if (state is WeatherLoaded) {
          final weather = state.weather;
          final themeBloc = BlocProvider.of<ThemeBloc>(context);
          themeBloc.dispatch(WeatherChanged(condition: weather.condition));

          _refreshCompleter?.complete();
          _refreshCompleter = Completer();

весь код это ссылка

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Лучший способ продемонстрировать это - простой пример.
У меня есть объект SomeObject с одним методом username.

Я сделал 2 экземпляра:

  • aeonObject, что не null
  • someOtherObject, что null
class SomeObject {
  String username() => "aeon";
}

void main() {
  final aeonObject = SomeObject();
  print(aeonObject.username());

  SomeObject someOtherObject;
  print(someOtherObject.username());
}

Если я выполню этот фрагмент, вы увидите следующий вывод.
Программа потерпит крах, потому что мы попытались выполнить метод по ссылке null.

dart lib / main.dart lib / main.dart: Предупреждение: интерпретировать это как URI пакета, 'package: sample / main.dart'.

aeon

Необработанное исключение: NoSuchMethodError: Theметод 'username' был вызван для null.

Получатель: null Пробный вызов: username ()

Однако, если я вызываю оператор print с ?. aka Conditional member access operator.

print(someOtherObject?.username());

Вместо этого мы получаем.

null

0 голосов
/ 13 октября 2019

Проверьте эту ссылку: Языковой тур

?.

Условный доступ к элементу

Как., Но самый левый операнд может быть нулевым;пример: foo? .bar выбирает панель свойств из выражения foo, если foo не равно нулю (в этом случае значение foo? .bar равно нулю)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...