Коллекции в Dart это массивы различных типов:
В каждой определённой ситуации может подойти тот или иной тип переменной. Тот же тип Set хранит в себе неупорядоченный список уникальных значений и это может быть полезным.
// Список
var list = [1,2,3];
list.add ( 4 ); // добавить элемент
print ( '$list, всего элементов ${list.length}' ); // [1, 2, 3, 4], всего элементов 4
list.remove ( 2 ); // удаляет элемент со значением (не по ключу, а именно по значению)
print ( '$list, всего элементов ${list.length}' ); // [1, 3, 4], всего элементов 3
list.remove ( 3 );
print ( '$list, всего элементов ${list.length}' ); // [1, 4], всего элементов 2
 
// Неизменяемый список
var listConst = const [1,2,3];
// Фиксированный список
var listFixed = List(4);
listFixed[0] = 0;
listFixed[1] = 1;
listFixed[2] = 2;
//listFixed.add ( 5 ); // Так добавить не получится
print ( listFixed ); // [0, 1, 2, null]
// Нефиксированный список
var listNoFixed = [];
listNoFixed.add ( 2 ); // Можно добавить элемент
print ( listNoFixed ); // [2]
  
// spread operator
var listSpread = [0,...listConst];
print ( listSpread ); // [0, 1, 2, 3]
var listNull;
print ( [-1,...listSpread] ); // [-1, 0, 1, 2, 3]
print ( [-1,...?listNull] ); // [-1]
  
// Список с if
bool isAdmin = false;
bool isGuest = false;
var permissionList = [isGuest ? 'guest' : 'user' , if ( isAdmin ) 'admin' ];
print ( permissionList ); // [user]
isAdmin = true;
var permissionListNew = [isGuest ? 'guest' : 'user' , if ( isAdmin ) 'admin' ];
print ( permissionListNew ); // [user, admin]
  
// Список с for
List<int> intList = [1,2,3,4,5];
List<String> strList = [ '-' , for ( var i in intList ) 'Value $i' ];
print ( strList ); // [-, Value 1, Value 2, Value 3, Value 4, Value 5]
Основные свойства списков:
first: первый элемент
last: последний элемент
length: длина списка
reversed: список, в котором все элементы находятся в противоположном порядке
isEmpty: true, если список пуст
Основные методы списков:
add(E value): добавляет элемент в конец списка
addAll(Iterable<E> iterable): добавляет в конец списка другой список
clear(): удаляет все элементы из списка
indexOf(E element): возвращает первый индекс элемента
insert(int index, E element): вставляет элемент на определенную позицию
remove(Object value): удаляет объект из списка (удаляется только первое вхождение элемена в список)
removeAt(int index): удаляет элементы по индексу
removeLast(): удаляет последний элемент списка
forEach(void f(E element)): производит над элементами списка некоторое действие, которое задается функцией-параметром, аналоги цикла for..in
sort(): сортирует список
sublist(int start, [ int end ]): возвращает часть списка от индекса start до индекса end
contains(Object element): возвращает true, если элемент содержится в списке
join([String separator = "" ]): объединяет все элементы списка в строку. Можно указать необязательный параметр separator, который будет раздлять элементы в строке
skip(int count): возвращает коллекцию, в которой отсутствуют первые count элементов
take(int count): возвращает коллекцию, которая содержит первые count элементов
where(bool test(E element)): возвращает коллекцию, элементы которой соответствуют некоторому условию, которое передается в виде функции
Представляет из себя неупорядоченный набор уникальных элементов.
// Множество
var langSet = { 'PHP' , 'SQL' , 'JavaScript' };
var softSet = { 'VS Code' , 'HeidiSQL' };
langSet.add ( 'HTML' );
langSet.addAll ( { 'CSS' , 'Dart' } );
print ( langSet ); // {PHP, SQL, JavaScript, HTML, CSS, Dart}
var skillSet = <String>{};
skillSet.addAll ( softSet );
skillSet.addAll ( langSet );
print ( skillSet ); // {VS Code, HeidiSQL, PHP, SQL, JavaScript, HTML, CSS, Dart}
  
// Неизменяемое множество
final setConst = const { 'PHP' , 'SQL' , 'JavaScript' };
Основные свойства наборов:
first: возвращает первый элемент
last: возвращает последний элемент
length: возвращает длину набора
isEmpty: возвращает true, если набор пуст
Основные методы наборов:
add(E value): добавляет элемент в набор
addAll(Iterable<E> iterable): добавляет в набор другую коллекцию
clear(): удаляет все элементы из набора
difference(Set<Object> other): возвращает разность текущего набора и набора other в виде другого набора
intersection(Set<Object> other): возвращает пересечение текущего набора и набора other в виде другого набора
remove(Object value): удаляет объект из набора
removeAll(Iterable<Object> elements): удаляет из набора все элементы коллекции elements
union(Set<E&g; other): возвращает объединение двух наборов - текущего и набора other
contains(Object element): возвращает true, если элемент содержится в наборе
join([String separator = "" ]): объединяет все элементы набора в строку. Можно указать необязательный параметр separator, который будет раздлять элементы в строке
skip(int count): возвращает коллекцию, в которой отсутствуют первые count элементов
take(int count): возвращает коллекцию, которая содержит первые count элементов
where(bool test(E element)): возвращает коллекцию, элементы которой соответствуют некоторому условию, которое передается в виде функции
// Словари
Map<String, String> mapString = {
  'two': 'два',
  'four': 'четыре',
  'eight': 'восемь'
};
print ( mapString ); // {two: два, four: четыре, eight: восемь}
Map<int, String> mapInteger = {
  2: 'two',
  4: 'four',
  8: 'eight',
};
print ( mapInteger ); // {2: two, 4: four, 8: eight}
var mapAdd = Map();
mapAdd['two'] = 'два';
mapAdd['four'] = 'четыре';
mapAdd['eight'] = 'восемь';
print ( mapAdd ); // {two: два, four: четыре, eight: восемь}
  
// С множеством и словарями также возможны использовать if, for, spread и т.п.Основные свойства:
entries: возвращает объект Iterable<MapEntry<K, V>>, который представляет все элементы Map
keys: возвращает объект Iterable<K>, который представляет все ключи Map
values: возвращает объект Iterable<V>, который представляет все значения Map
length: возвращает количество элементов в Map
isEmpty: возвращает true, если Map пуст
Основные методы:
addAll(Map<K, V> other): добавляет в Map другой объект Map
addEntries(Iterable<MapEntry<K, V>> newEntries): добавляет в Map коллекцию Iterable<MapEntry<K, V>>
clear(): удаляет все элементы из Map
containsKey(Object key): возвращает true, если Map содержит ключ key
containsValue(Object value): возвращает true, если Map содержит значение value
remove(Object key): удаляет из Map элемент с ключом key