Что это: Главный пакет для работы с сетью во Flutter (альтернатива базовому http).
Суть: Продвинутая обертка над HTTP-запросами с поддержкой глобальных настроек, перехватчиков (interceptors) и удобной работы с файлами (загрузка/скачивание).
Как работает: Создаем объект Dio(), задаем ему BaseOptions (базовый URL) и вызываем методы .get(), .post() и т.д.
Для чего: Чтобы не дублировать код. В пакете http в каждый запрос нужно прописывать полный URL и заголовки. Dio позволяет настроить это один раз.
Пример: В BaseOptions указываем baseUrl = "https://api.test.com". Дальше пишем просто dio.get('/users').
Что это: Промежуточное звено (КПП) между приложением и сервером.
Суть: Позволяет "вскрыть" и изменить любой Request, Response или Error до того, как он дойдет до сервера или UI.
Как работает: Добавляем класс интерцептора в Dio. В нём есть три метода: onRequest (до отправки), onResponse (при успешном ответе), onError (при ошибке).
Для чего:
1. Авторизация: Автоматически подставлять токен Bearer во все исходящие запросы.
2. Логирование: Печатать в консоль тело запроса и статус-коды.
3. Refresh Token: При ошибке 401 прозрачно для пользователя обновить токен и повторить запрос.
Пример: В onRequest читаем токен из локальной памяти и добавляем: options.headers['Authorization'] = 'Bearer $token'.
Что это: Библиотеки для кодогенерации и работы с дата-классами (парсинг JSON).
Суть: Ручной парсинг JSON часто приводит к крашам из-за опечаток в ключах. Эти пакеты автоматически генерируют методы fromJson и toJson.
Как работает: Создаем класс, вешаем аннотацию @freezed, запускаем команду build_runner в терминале. Пакет сам пишет весь сложный код для маппинга JSON в объекты.
Для чего:
1. Избавиться от рутины при маппинге JSON.
2. Создать Неизменяемые (Immutable) объекты (безопасно для State Management'а).
3. Получить метод copyWith (создание копии объекта с изменением одного поля).
Пример: Сервер отдает ключ first_name. Аннотацией @JsonKey(name: 'first_name') String firstName мы учим генератор связывать их.
Что это: Протокол связи для обмена данными в реальном времени.
Суть: В отличие от REST (клиент спросил — сервер ответил — связь закрылась), сокет открывает постоянное соединение (трубу). Данные могут лететь в обе стороны без остановки.
Как работает: Устанавливается соединение (ws://). В Dart это представлено как Stream (поток). Мы слушаем Стрим, и когда сервер пушит данные, они моментально попадают в UI.
Для чего: Приложения, где важна моментальная реакция: Чаты, биржевые графики (крипта), онлайн-карты (перемещение такси).
Что это: Сохранение данных в физическую память телефона.
Суть и Для чего: Разделяется на 3 уровня сложности в зависимости от задачи:
1. SharedPreferences: Хранилище простых "ключ-значение".
— Для чего: Сохранить токен, тему (светлая/темная), язык приложения.
2. Hive / Isar: Быстрые NoSQL базы данных.
— Для чего: Кэширование целых списков (лента новостей) или корзины товаров, чтобы приложение работало без интернета.
3. SQFlite: Реляционная база данных (таблицы).
— Для чего: Сложные данные со связями (таблица "Категории" связана с "Продуктами"), сложные SQL сортировки и фильтры.
В: Что такое DTO (Data Transfer Object)?
О: Класс-обертка, который используется только для маппинга JSON из сети. В слое репозитория DTO очищается от лишних данных и конвертируется в чистую Entity для UI.
В: В чем разница между PUT и PATCH?
О: PUT заменяет весь объект на сервере целиком. PATCH обновляет только точечные поля (например, меняет только статус заказа, не трогая остальное).
В: Как реализовать Refresh Token?
О: В Dio Interceptor ловим ошибку 401 (Unauthorized). Замораживаем (lock) все исходящие запросы. Отправляем отдельный запрос на обновление токена. При успехе — сохраняем новый токен, размораживаем очередь и повторяем упавший запрос.