Я просматриваю чей-то флаттер-код, и там есть какой-то код, я не понимаю, что он делает.
Я не понимаю часть синтаксиса, так как никогда не видел его ни на одном другом языке.
Вот три примера...
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 примера кода? Спасибо!
взгляните на операторы
Первый пример — каскадная нотация. Это означает, что вы можете выполнять несколько операций над одним и тем же объектом. Пример с сайта дартс:
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, если оно не равно нулю, в противном случае установите для него значение ''.
Третий пример аналогичен первому.
внимательно прочитайте dart.dev/guides/language/language-tour