Подтвердить что ты не робот

Список использования двойной точки (.) В дротике?

Иногда я вижу это List list = [];

Тогда list..add(color)

В чем разница в использовании 1 точки (.) и 2 точки (..)?

4b9b3361

Ответ 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), создается в том же самом выражении? Например:

Tween(begin: 0.0, end: 20.0).animate(controller)
  ..addListener(/* ... */)

Кажется, это не так, как ожидалось.