Какие пакеты для локального хранения данных во Flutter использовать
Что проверяют
Умеете ли вы подобрать хранилище под тип данных, а не тащить одну базу на всё. Для Android-разработчика ещё и параллель с нативным стеком: следом часто спрашивают, чем drift похож на Room и где хранить токен.
Как отвечать
Идите от задачи к пакету:
shared_preferences: настройки и флаги, ключ и значение. На Android под капотом SharedPreferences или DataStore, на iOSNSUserDefaults. В новых версиях появилисьSharedPreferencesAsyncиSharedPreferencesWithCache, новые проекты лучше начинать с них;flutter_secure_storage: токены и секреты, на Android шифрование ключами из Keystore, на iOS Keychain. Вshared_preferencesтокен не кладут, это обычный незашифрованный файл;drift: реляционные данные со связями и сложными запросами. Это бывший Moor, переименованный в 2021 году. Типобезопасные запросы через кодогенерациюbuild_runner, реактивные выборки черезwatch(), явные миграции. Ближайший аналог Room;sqflite: SQLite с сырым SQL, без генерации кода. Проще на старте, но маппинг и миграции пишете руками;- NoSQL: Hive и Isar долго были популярны, но развитие оригинальных пакетов остановилось, живут форки сообщества вроде
hive_ce. Из активно поддерживаемых вариантов есть ObjectBox; - файлы: картинки, выгрузки, большие JSON кладут в каталог, который отдаёт
path_provider.
Покажите выбор на примере: тема оформления в shared_preferences, токен в flutter_secure_storage, офлайн-кэш ленты с фильтрами и сортировкой в drift. И отдельно скажите про миграции: версия схемы и шаги обновления закладываются с первого релиза.
Где спотыкаются
Называют Moor актуальным пакетом или советуют Hive без оговорок о поддержке. Это сразу выдаёт знания из старых статей.
Кладут токен или персональные данные в shared_preferences. На рутованном устройстве или из резервной копии такие данные читаются без усилий.
Забывают про миграции. Первое обновление с изменённой моделью ломает приложение у пользователей, и никакой пакет не решит это за вас.