List - methods
1. add(value)
Объяснение: Добавляет один новый элемент в самый конец списка.
Аналогия: Поставить еще одну книгу на полку с правого края.
Применение: Пользователь создал новый пост, товар упал в корзину.
Код:
codeDart
2. addAll(iterable)
Объяснение: Добавляет сразу много элементов (другой список) в конец текущего.
Аналогия: Высыпать ведро кубиков LEGO в общую кучу.
Применение: Загрузка "следующей страницы" (пагинация) в ленте новостей.
Код:
codeDart
3. any(test)
Объяснение: Проверяет, есть ли в списке хотя бы один элемент, который подходит под условие. Возвращает true (да) или false (нет).
Аналогия: "Есть ли в классе хоть кто-то, кто забыл сменку?" (Достаточно найти одного).
Применение: Проверить, есть ли в корзине товары с ошибкой или есть ли у пользователя права админа.
Код:
codeDart
4. asMap()
Объяснение: Превращает список в Map (словарь), где ключами становятся порядковые номера (индексы).
Аналогия: Пронумеровать страницы в тетради. Теперь у тебя есть пары: "Страница 0 — Текст", "Страница 1 — Текст".
Применение: Когда нужно перебрать список циклом и знать индекс элемента (например, чтобы написать "Товар №1", "Товар №2").
Код:
codeDart
5. cast()
Объяснение: Меняет "этикетку" типа списка, не меняя сами данные. Заставляет программу считать, что элементы имеют более строгий тип.
Аналогия: На коробке написано "Вещи", ты переклеиваешь наклейку на "Игрушки". Содержимое не поменялось, но теперь ты относишься к ним как к игрушкам.
Применение: Чаще всего, когда сервер или библиотека присылает List<dynamic>, а ты точно знаешь, что там Map<String, dynamic>, и хочешь использовать методы Map.
Код:
codeDart
6. clear()
Объяснение: Удаляет всё из списка. Список становится пустым, длина 0.
Аналогия: Стереть всё с доски тряпкой.
Применение: Кнопка "Очистить корзину" или сброс фильтров поиска.
Код:
codeDart
7. contains(element)
Объяснение: Проверяет, лежит ли конкретный объект в списке.
Важно: Для Map {id: 1} и {id: 1} — это разные объекты в памяти. Вернет true только если ты ищешь ссылку на тот же самый объект.
Аналогия: "Лежит ли у тебя в кармане именно этот ключ от дома?" (А не просто похожий дубликат).
Применение: Проверить, выбран ли уже этот элемент (например, в списке выделения), используя переменную-ссылку.
Код:
codeDart
8. elementAt(index)
Объяснение: Возвращает элемент под конкретным номером. Если номера нет — ошибка (Crash).
Аналогия: "Дай мне пятого человека в очереди". (Если людей всего трое — паника).
Применение: Стандартное получение данных, когда ты уверен в длине списка (например, внутри ListView.builder).
Код:
codeDart
9. elementAtOrNull(index)
Объяснение: То же самое, но безопасно. Если индекса нет — вернет null, а не ошибку.
Аналогия: "Дай мне пятого человека. Никого нет? Ну ладно, тогда ничего не давай".
Применение: Безопасное чтение данных, когда список может быть короче, чем ожидалось.
Код:
codeDart
10. every(test)
Объяснение: Проверяет, удовлетворяют ли условию абсолютно все элементы списка.
Аналогия: Фейс-контроль: "Всем ли здесь есть 18 лет?". Если хоть одному нет — результат false.
Применение: Проверить, все ли поля формы заполнены валидно, или все ли задачи в чек-листе выполнены.
Код:
codeDart
11. expand(toElements)
Объяснение: "Распаковка". Берет каждый элемент, превращает его в список (или несколько элементов) и склеивает всё в один плоский список.
Аналогия: У тебя список чемоданов. Ты открываешь каждый и вываливаешь содержимое на кровать. Получается одна большая куча вещей без чемоданов.
Применение: У тебя есть список категорий, в каждой список товаров. Ты хочешь получить плоский список всех товаров.
Код:
codeDart
12. fillRange(start, end, value)
Объяснение: Заменяет элементы в определенном диапазоне на одно и то же значение.
Аналогия: Закрасить часть забора (с 2-й по 5-ю доску) одной краской.
Применение: Используется редко для Map. Можно использовать для создания "заглушек" (placeholders) при загрузке.
Код:
codeDart
13. firstWhere(test, {orElse})
Объяснение: Ищет и возвращает самый первый элемент, который подходит под условие. Останавливается, как только нашел.
Аналогия: "Кто первый в очереди в красной шапке? Выходи!"
Применение: Найти конкретного пользователя по ID или первый активный заказ.
Важно: Всегда добавляй orElse, иначе если ничего не найдется — приложение упадет.
Код:
codeDart
14. fold(initialValue, combine)
Объяснение: "Сворачивает" весь список в одно-единственное значение. Ты даешь ему "начальный ноль" (например, 0 или пустую строку), а он проходит по каждому элементу, прибавляя его к накопленному результату.
Аналогия: Снежный ком. Ты берешь маленький снежок (initialValue) и катишь его по склону (списку). С каждым оборотом он вбирает в себя новый снег (элемент) и становится больше (результат).
Применение: Самый частый случай — посчитать общую сумму всех товаров в корзине.
Код:
codeDart
15. followedBy(other)
Объяснение: "Лениво" объединяет два списка. Он не создает новый большой список в памяти сразу, а просто "обещает" пробежаться сначала по первому, а потом сразу по второму.
Аналогия: Два поезда. Вместо того чтобы перегружать всех пассажиров в один новый состав, вы просто сцепляете второй поезд к первому.
Применение: Когда нужно обработать данные из двух больших списков как единое целое, не тратя память на создание их копии.
Код:
codeDart
16. forEach(action)
Объяснение: "Для каждого". Пробегает по каждому элементу списка и выполняет для него указанное действие. Ничего не возвращает (void).
Аналогия: Рассылка писем. Почтальон берет каждого адресата из списка и просто опускает ему письмо в ящик. Он не создает новый список адресатов.
Применение: Когда нужно выполнить "побочный эффект": вывести что-то в консоль, сохранить каждый элемент в базу данных, обновить UI.
Код:
codeDart
17. getRange(start, end)
Объяснение: Дает "ленивый" доступ к куску списка. Похоже на sublist, но не создает новый список сразу, а предоставляет Iterable (итерируемый объект).
Аналогия: Выделить абзац текста в редакторе. Вы определили границы, но еще не скопировали его. Вы можете работать с этим выделением.
Применение: Эффективная работа с частями очень больших списков, когда создавать копию накладно.
Код:
codeDart
18. indexOf(element, [start]) / lastIndexOf(element, [start])
Объяснение: Ищет конкретный объект в списке и возвращает его индекс (номер по порядку). indexOf — ищет с начала, lastIndexOf — с конца.
Важно: Как и с contains, работает по ссылке. {'id': 1} и {'id': 1} — это разные объекты!
Аналогия: Найти номер страницы, на которой находится именно та фотография, на которую вы поставили закладку.
Применение: Только если у вас есть переменная, хранящая ссылку на объект из списка, и вам нужен его индекс.
Код:
codeDart
19. indexWhere(test, [start]) / lastIndexWhere(test, [start])
Объяснение: Это полезный вариант! Ищет индекс первого (или последнего) элемента, который подходит под условие.
Аналогия: Найти номер страницы, где впервые упоминается слово "дракон".
Применение: Самый частый способ найти позицию элемента в списке Map по его id или другому уникальному полю.
Код:
codeDart
20. insert(index, element) / insertAll(index, iterable)
Объяснение: Вставляет один (insert) или несколько (insertAll) элементов в конкретное место по индексу, сдвигая всех остальных "вправо".
Аналогия: Влезть в очередь (insert). Или когда группа друзей влезает в очередь вместе (insertAll). Все, кто был за этим местом, делают шаг назад.
Применение: Добавить рекламный баннер после 3-го поста в ленте. Поставить VIP-заказ в начало очереди.
Код:
codeDart
21. join([separator])
Объяснение: Склеивает все элементы списка в одну длинную строку, вставляя между ними разделитель.
Важно: Для List<Map> напрямую не работает, т.к. система не знает, как превратить Map в строку. Сначала нужно использовать map, чтобы извлечь нужные данные.
Аналогия: Нанизывание бусин на нитку. Разделитель — это узелок между бусинами.
Применение: Сформировать красивую строку тегов через запятую: "flutter, dart, mobile".
Код:
codeDart
22. lastWhere(test, {orElse})
Объяснение: Находит самый последний элемент в списке, который подходит под условие.
Аналогия: "Кто последний в очереди в красной шапке?"
Применение: Найти самое последнее событие нужного типа в логах. Найти последнюю версию документа.
Код:
codeDart
23. map(toElement) — КЛЮЧЕВОЙ МЕТОД
Объяснение: Трансформация. Проходит по каждому элементу и "переделывает" его во что-то новое. Возвращает новый Iterable с этими новыми элементами.
Аналогия: Заводской конвейер. На вход подаются Map (сырье), станок их обрабатывает, на выходе — String или объекты вашего класса (готовый продукт).
Применение: Постоянно. Превращение "сырых" данных с сервера (List<Map>) в список объектов вашего класса (List<User>). Извлечение только одного поля из списка объектов (получить список всех имен).
Код:
codeDart
24. reduce(combine)
Объяснение: Похож на fold, но у него нет начального значения. Он берет первый элемент как стартовый и начинает "складывать" с ним второй, потом результат с третьим и т.д.
Важно: Если список пустой, приложение упадет с ошибкой!
Аналогия: Турнир на выбывание. Первый боец дерется со вторым. Победитель дерется с третьим, и так до финала.
Применение: Найти элемент с максимальным/минимальным значением.
Код:
codeDart
Last updated