В чем разница в использовании 1 точки (.) и 2 точки (..)?
Ответ 1
.. известен как каскадная нотация. Это позволяет вам не повторять одну и ту же цель, если вы хотите вызвать несколько методов на одном и том же объекте.
List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);
// with cascade
List list = [];
list
..add(color1)
..add(color2)
..add(color3)
..add(color4);
Ответ 2
Это каскадный оператор Дарта
var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);
приводит к тому, что l1 является списком [0, 1, 2, 3]
var l1 = new List<int>().add(0).addAll([1, 2, 3]);
приводит к ошибке, потому что .add(0) возвращает void
.. (в первом примере) относится к new List(),
а . (в дальнейшем) относится к возвращаемому значению предыдущей части выражения.
.. был введен, чтобы избежать необходимости возвращать this во всех типах методов, таких как add(), чтобы иметь возможность свободно использовать API.
.. предоставляет это из коробки для всех классов.
Ответ 3
Должно ли это также работать правильно, когда объект, о котором идет речь (List в примере OP), создается в том же самом выражении? Например: