Понимание синтаксиса флаттера

Я просматриваю чей-то флаттер-код, и там есть какой-то код, я не понимаю, что он делает.

Я не понимаю часть синтаксиса, так как никогда не видел его ни на одном другом языке.

Вот три примера...

1.  final Geolocator geolocator = Geolocator()
    ..forceAndroidLocationManager = true;

2.  final firstName = appState?.user?.firstName ?? '';

3.  var envelope = new Envelope()
    ..from = '[email protected]'
    ..recipients.add(Globals.sosEmail)
    ..ccRecipients.add(email)
    ..subject = '$firstName $lastName hello. ${new DateTime.now()}'
    ..text = "Hello"'
    ..html ='<p>Hey!</p>';

Что (2) делает? Что означают ?. и ?? ''?

Существует синтаксис, в котором две точки подряд, как в (1) ..forceAndroidLocationManager, или ..from, ..text и т. д.

Кто-нибудь знает, что делают приведенные выше 3 примера кода? Спасибо!

внимательно прочитайте dart.dev/guides/language/language-tour

pskink 22.05.2019 15:31

взгляните на операторы

Steve 22.05.2019 15:43
1
2
2 071
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первый пример — каскадная нотация. Это означает, что вы можете выполнять несколько операций над одним и тем же объектом. Пример с сайта дартс:

querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));

Второй пример касается операторы с нулевым значением

final firstName = appState?.user?.firstName ?? '';

Здесь происходит то, что у нас есть переменная с именем appState, а appState?.user означает, что мы должны пытаться получить доступ к user только в том случае, если appState не равно null (поэтому мы не получаем ошибку нулевого указателя. То же самое касается user?.firstname.

Наконец, ?? означает «установить для 'firstName' значение appState.user.firstName, если оно не равно нулю, в противном случае установите для него значение ''.

Третий пример аналогичен первому.

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