Sometimes I see this List list = [];
Then list..add(color)
What's the difference between using 1 dot(.
) and 2 dot(..
)?
..
is known as cascade notation. It allows you to not repeat the same target if you want to call several methods on the same object.
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);
It's the cascade operator of Dart
var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);
results in l1
being a list [0, 1, 2, 3]
var l1 = new List<int>().add(0).addAll([1, 2, 3]);
results in an error, because .add(0)
returns void
..
(in the former example) refers to new List()
, while .
(in the later) refers to the return value of the previous part of the expression.
..
was introduced to avoid the need to return this
in all kinds of methods like add()
to be able to use an API in a fluent way.
..
provides this out of the box for all classes.
.. (in former example) refers to new List()
, do you mean we are again creating a new List
when we are using ..
in my opinion NO. I got confused by your new
word, is it really NEW or you are talking about new
keyword here.
new
is now optional. ..
refers to the list returned by new List<int>()
and allows to call multiple methods on it like add(0)
addAll(...)
without repeating l1.
and it is the created list instance that is assigned to l1
, not the return value of the last method in the chain (addAll(...)
). Does this answer your question?
new
is optional beginning with Dart 2.0, I just got confused by the new
in above context and thanks for your explanation.
..add(6)
is like l1.add(6)
, .add(6)
is like l1.add(5).add(6)
. add(5)
returns void
and you can't call add()
on void
Cascades (..) allow you to make a sequence of operations on the same object. read doc for details
querySelector('#confirm') // Get an object.
..text = 'Confirm' // Use its members.
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));
The previous example is equivalent to:
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
..onClick
does not translate to button.classes.onClick
?
..
Is known as the cascading operator in dart.
It allows you to use more than one subsequence operation:
Examples:
banerad..load()..show().
List coursename;
coursename..add("java")..add("flutter" )..add("dart");
Here is another example
https://i.stack.imgur.com/Iv4eL.png
Double dots(..) also know as cascade operator
It allows you to not repeat the same target if you want to call several methods on the same object.
e.g without double dots
var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;
But after using “..”, the above code will be written like this:
var paint = Paint()
..color = Colors.black
..strokeCap = StrokeCap.round
..strokeWidth = 5.0;
Triple dots(…) i.e. Spread Operator
“… ”also known as spread operator which provide a concise way to insert multiple values into a collection. You can use this to insert all the elements of a list into another list:
Normally we use .add() or .addAll() to add data to the list like:
var list = [1, 2, 3];
var list2=[];
list2.addAll(list);
After using “…” we will write code like this:
var list = [1, 2, 3];
var list2 = [0, ...list];
Success story sharing