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