👨‍💻
Flutter
  • 👨‍💻Flutter lessons
    • 🎨Flutter ui
      • 🚵‍♂️Travel app
        • 📱1. Lesson
        • 📱2.Lesson
      • 📚Books store
      • 🧑‍⚕️Doctor app
      • 🚖Taxi app
    • 🐦Основы Flutter
      • Page 1
      • Page 2
      • 🧑‍🏫Урок 1: Основные виджеты Flutter
        • Page
        • 🧩Container()
        • 🧩AppBar()
        • 🧩Text()
        • 🧩Icon()
        • 🧩Column()
        • 🧩Row()
        • 🧩TextButton()
        • 🧩ElevatedButton()
      • 🧑‍🏫Урок 2: Создаем UI
      • 🧑‍🏫Урок 3: Создаем UI
      • 🧑‍🏫Урок 4: Создаем UI
    • 🧩Основы dart
      • 🧑‍🏫01. Переменные часть 1
      • 🧑‍🏫01. Переменные часть 2
      • 🧑‍🏫02. Функции
      • 🧑‍🏫03. Условные операторы
      • 🧑‍🏫04. List
      • 🧑‍🏫05. Map
      • 🧑‍🏫06. Class
      • 🧑‍🏫07. Наследование
      • 🧑‍🏫08. Абстракция
      • 🧑‍🏫09. Интерфейсы
      • 🧑‍🏫10. Инкапсуляция
      • 🧑‍🏫11. Mixin
      • 🧑‍🏫12. Асинхронное программирование
      • 🧑‍🏫13. Streams
      • 🎯Final project
        • 🥦Grocery app
        • 🏠Home
    • ⚒️State management
      • ⬛Bloc
        • 1. Введение cubit
          • 1.1 Пример
          • 1.2 Пример
          • 1.3 Пример
          • 1.4 Пример
          • 1.5 Пример
        • 2. Введение в Bloc
      • 🌊Riverpod
    • 🏠Architechture
      • Clean Architechture
      • Bloc
    • 📲Locale storage
      • 🐝Hive
        • 🐝Ui
        • 🐝Hive - локальное хранилище: Введение
        • 🐝Hive - task app: часть 1
        • 🐝Hive - task app: часть 2
        • 🐝Hive - task app: часть 3
        • 🐝Hive - task app: часть 4
        • 🐝Hive - task app: часть 5
      • 🟩Sql
    • 📡Server
      • 📡Server - Lesson01 introduction
      • 📡Server - Lesson02 get data
      • 📡Server - Lesson03 News App get data
    • 🖥️Готовый backend
      • Firebase
      • Supabase
  • 🎯Dart practise
    • 🧑‍💻Переменные
      • 🧑‍💻String
      • 🧑‍💻int
      • 🧑‍💻double
      • 🧑‍💻bool
    • 🧑‍💻Функции
      • 🧑‍💻Обычные функции
      • 🧑‍💻Порядковые параметры
      • 🧑‍💻Обязательные параметры
      • 🧑‍💻Параметры по умолчанию
      • 🧑‍💻Функции-стрелки
      • 🧑‍💻Возвращаемые функции
    • 🧑‍💻Условные операторы
      • 🧑‍💻if/else
      • 🧑‍💻switch/case
      • 🧑‍💻тернарный оператор
    • 🧑‍💻Структура данных
      • 🧑‍💻List
      • 🧑‍💻Map
      • 🧑‍💻Set
    • 🧑‍💻ООП
  • 🧩Flutter Widgets
    • 💻Все виджеты
    • 🎞️Анимации
      • 🧩AnimatedContainer
      • 🧩AnimatedOpacity
      • 🧩AnimatedAlign
      • 🧩AnimatedCrossFade
      • 🧩Hero
      • 🧩AnimatedBuilder
      • 🧩AnimatedPositioned
      • 🧩AnimatedSwitcher
    • 🏗️Манипуляция пространством
      • 🧩Padding
      • 🧩SizedBox
      • 🧩Align
      • 🧩Center
      • 🧩Expanded
      • 🧩Flexible
      • 🧩Spacer
      • 🧩Column
      • 🧩Stack
      • 🧩Row
    • ✍️Отображение текста
      • 🧩RichText
      • 🧩FittedBox
      • 🧩SelectableText
      • 🧩Text
    • 📸Отображение изображений
      • 🧩Image()
      • 🧩Image.network
      • 🧩Image.asset
      • 🧩Image.file
      • 🧩Image.memory
      • 🧩FadeInImage
      • 🧩NetworkImage
      • 🧩AssetImage
    • 📃Списки и прокрутка
      • 🧩ListView()
      • 🧩ListView.builder()
      • 🧩GridView()
      • 🧩GridView.builder()
      • 🧩PageView()
      • 🧩SingleChildScrollView
      • 🧩CustomScrollView
      • 🧩ReorderableListView
      • 🧩NestedScrollView
    • ⌨️Кнопки
      • 🧩TextButton()
      • 🧩ElevatedButton()
      • 🧩IconButton()
      • 🧩DropDownButton()
      • 🧩FloatingActionButton
      • 🧩Checkbox
      • 🧩Radio
      • 🧩Switch
      • 🧩Slider
    • 📝Формы и ввод данных
      • 🧩TextField()
      • 🧩TextFormField
      • 🧩Form
      • 🧩FormField
      • 🧩DatePicker
      • 🧩TimePicker
    • 🧑‍🏫Диалоги и всплывающие окна
      • 🧩AlertDialog
      • 🧩SimpleDialog
      • 🧩BottomSheet
      • 🧩ExpansionPanel
      • 🧩SnackBar
      • 🧩PopupMenuButton
      • 🧩Tooltip
      • 🧩Dialog
    • 🛣️Навигация
      • 🧩BottomNavigationBar()
      • 🧩Navigator
      • 🧩Drawer
      • 🧩TabBar
    • 📱Отображение на экране
      • 🧩Scaffold
      • 🧩Container()
      • 🧩AppBar()
      • 🧩Icon()
      • 🧩Stepper()
  • 🎮Flutter Flame
    • Введение в разработку игр
  • 🔬Flutter projects
  • 🧑‍🎓Homeworks for everyday
    • 🧑‍🎓0. Переменные
    • 🧑‍🎓1. Функции - 1
    • 🧑‍🎓2. Функции - 2
    • 🧑‍🎓3. Условные операторы
    • 🧑‍🎓4. List
    • 🧑‍🎓5. Map
    • 🧑‍🎓6. class
    • 🐝Hive -
    • 🐝Hive clean architecture
    • 📡HTTP
    • 📡HTTP clean architecture
    • 💾Firebase
    • 💾Firebase clean architecture
Powered by GitBook
On this page
  1. Flutter lessons
  2. Основы dart

05. Map

Что такое Map?

Map — это структура данных, похожая на словарь или таблицу, где у каждой записи есть уникальный ключ и значение, связанное с этим ключом. Например, представь, что у тебя есть телефонный справочник. В нем имя человека – это ключ, а его номер телефона – это значение. Если ты знаешь имя, то сразу найдешь его номер телефона.

Для чего нужен Map?

Map полезен, когда нужно хранить данные в формате "вопрос-ответ", "имя-значение" или "ключ-значение". Это помогает легко и быстро находить нужную информацию. Например, представь себе интернет-магазин: чтобы узнать цену конкретного товара, достаточно знать его название — как раз тут и пригодится Map.

Как создать Map?

В Flutter (и в языке Dart) Map создается очень просто. Вот несколько примеров:

Пример 1: Создание простого Map для хранения данных о товарах

Map<String, int> products = {
  'Apples': 50,
  'Bananas': 30,
  'Oranges': 20
};
  • Здесь String — тип данных для ключей (названия продуктов).

  • int — тип данных для значений (цены продуктов).

Такой Map будет хранить продукты как ключи (например, 'Apples'), а их цены как значения (например, 50).

Пример 2: Создание Map с разными типами значений

Иногда значения бывают не только числами, но и другими типами данных. Например, можно хранить информацию о каждом товаре, включая его описание и наличие.

Map<String, dynamic> productDetails = {
  'name': 'Apples',
  'price': 50,
  'inStock': true
};

Здесь dynamic позволяет использовать разные типы значений:

  • 'name' — строка (String).

  • 'price' — число (int).

  • 'inStock' — логическое значение (bool), указывающее на наличие товара.

Как добавлять и изменять значения в Map?

Чтобы добавить новый элемент или изменить существующий, достаточно указать ключ и значение:

// Добавляем новый товар
products['Grapes'] = 40;

// Изменяем цену товара
products['Apples'] = 55;

Как получать данные из Map?

Чтобы найти значение по ключу, просто укажи ключ в квадратных скобках:

print(products['Apples']); // Выведет: 55

Если ключа не существует, Map вернет null, и это нужно учитывать.

Как перебрать все элементы в Map?

Если ты хочешь посмотреть все ключи и значения, можно воспользоваться циклом. Например:

products.forEach((key, value) {
  print('Продукт: $key, Цена: $value');
});

Чтение списка из Map с использованием GridView.builder

Теперь представим, что у нас есть список из нескольких Map, где каждый Map описывает отдельный продукт.

Пример списка Map

List<Map<String, dynamic>> products = [
  {'name': 'Apples', 'price': 50, 'inStock': true},
  {'name': 'Bananas', 'price': 30, 'inStock': false},
  {'name': 'Oranges', 'price': 20, 'inStock': true},
];

В этом списке каждый Map — это отдельный товар.

Как использовать GridView.builder для отображения списка Map?

С помощью GridView.builder мы можем вывести список товаров в виде сетки. Это часто используется для отображения товаров в приложениях.

Пример кода:

GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 2,  // Количество столбцов
  ),
  itemCount: products.length,  // Количество товаров
  itemBuilder: (context, index) {
    final product = products[index];  // Доступ к конкретному Map продукта
    return Card(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text('Продукт: ${product['name']}'),  // Выводим название продукта
          Text('Цена: ${product['price']}'),  // Выводим цену
          Text(product['inStock'] ? 'В наличии' : 'Нет в наличии'),  // Выводим статус
        ],
      ),
    );
  },
);

Объяснение кода

  • gridDelegate: Определяет, как элементы будут расположены. crossAxisCount: 2 указывает на 2 столбца, так что товары будут выстраиваться в две колонки.

  • itemCount: Указывает, сколько элементов будет в списке (длина списка products).

  • itemBuilder: Эта функция создает виджет для каждого товара.

    • product = products[index]: Достаем Map конкретного товара по индексу.

    • Card: Создаем карточку для каждого товара.

    • Внутри Card мы используем Column, чтобы расположить элементы вертикально:

      • Text(product['name']): Отображаем название товара.

      • Text('${product['price']}'): Отображаем цену.

      • Text(product['inStock'] ? 'В наличии' : 'Нет в наличии'): Отображаем текст о наличии.

Этот код позволяет создать сетку товаров с карточками, где каждый продукт отображается в виде отдельного Map в List<Map>.

Previous04. ListNext06. Class

Last updated 6 months ago

👨‍💻
🧩
🧑‍🏫