← Назад к вопросам
Какие знаешь библиотеки для хранения данных?
2.0 Middle🔥 231 комментариев
#Архитектура Flutter#Хранение данных
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие знаешь библиотеки для хранения данных
В Flutter существует множество библиотек для хранения данных на разных уровнях: от простого кеша до полнофункциональных баз данных. Рассмотрю самые популярные и полезные.
1. SharedPreferences — простое хранилище
Для: Простые данные (строки, числа, булевы значения)
import 'package:shared_preferences/shared_preferences.dart';
class UserPreferences {
static const _themeKey = 'theme';
static Future<void> saveTheme(String theme) async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString(_themeKey, theme);
}
static Future<String?> getTheme() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString(_themeKey);
}
}
Плюсы:
- Простая в использовании
- Встроенная синхронизация
- Быстрая
Минусы:
- Только примитивные типы
- Не подходит для сложных данных
2. Hive — быстрая NoSQL БД
Для: Локальное хранилище объектов (пользователи, посты, продукты)
import 'package:hive/hive.dart';
part 'user.g.dart';
@HiveType(typeId: 0)
class User {
@HiveField(0)
final String id;
@HiveField(1)
final String name;
@HiveField(2)
final String email;
User({
required this.id,
required this.name,
required this.email,
});
}
// Использование
class UserRepository {
late Box<User> _userBox;
Future<void> init() async {
Hive.registerAdapter(UserAdapter());
_userBox = await Hive.openBox<User>('users');
}
Future<void> saveUser(User user) async {
await _userBox.put(user.id, user);
}
User? getUser(String id) {
return _userBox.get(id);
}
Future<void> deleteUser(String id) async {
await _userBox.delete(id);
}
List<User> getAllUsers() {
return _userBox.values.toList();
}
}
Плюсы:
- Супер быстрая (key-value store)
- Поддерживает сложные объекты
- Хорошая производительность для мобил
Минусы:
- Нет сложных запросов как в SQL
- Нужен code generation
3. SQLite + sqflite — полнофункциональная БД
Для: Сложные данные, связи между таблицами, сложные запросы
import 'package:sqflite/sqflite.dart';
class DatabaseHelper {
static final DatabaseHelper _instance = DatabaseHelper._internal();
static Database? _database;
factory DatabaseHelper() {
return _instance;
}
DatabaseHelper._internal();
Future<Database> get database async {
_database ??= await _initDatabase();
return _database!;
}
Future<Database> _initDatabase() async {
String path = join(await getDatabasesPath(), 'app.db');
return openDatabase(
path,
version: 1,
onCreate: (db, version) {
return db.execute(
'CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT, email TEXT)',
);
},
);
}
// CRUD операции
Future<void> insertUser(Map<String, dynamic> user) async {
final db = await database;
await db.insert('users', user);
}
Future<List<Map<String, dynamic>>> getUsers() async {
final db = await database;
return db.query('users');
}
Future<void> updateUser(int id, Map<String, dynamic> user) async {
final db = await database;
await db.update('users', user, where: 'id = ?', whereArgs: [id]);
}
Future<void> deleteUser(int id) async {
final db = await database;
await db.delete('users', where: 'id = ?', whereArgs: [id]);
}
}
Плюсы:
- Полнофункциональная SQL база
- Хорошая производительность
- ACID гарантии
Минусы:
- Более громоздкая
- SQL код вручную
4. Drift (SQL ORM) — типобезопасное SQL
Для: Тип-безопасное использование SQLite
import 'package:drift/drift.dart';
part 'database.g.dart';
class Users extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get name => text()();
TextColumn get email => text()();
}
@DriftDatabase(tables: [Users])
class AppDatabase extends _$AppDatabase {
AppDatabase(QueryExecutor e) : super(e);
@override
int get schemaVersion => 1;
Future<void> addUser(String name, String email) {
return into(users).insert(
UsersCompanion(
name: Value(name),
email: Value(email),
),
);
}
Future<List<User>> getAllUsers() {
return select(users).get();
}
}
Плюсы:
- Типобезопасное
- Code generation
- SQL в безопасности
Минусы:
- Кривая обучения
- Code generation
5. Firebase Firestore — облачная БД
Для: Синхронизация данных в облаке, realtime обновления
import 'package:cloud_firestore/cloud_firestore.dart';
class FirestoreUserRepository {
final FirebaseFirestore _db = FirebaseFirestore.instance;
Future<void> saveUser(User user) async {
await _db.collection('users').doc(user.id).set({
'name': user.name,
'email': user.email,
'createdAt': FieldValue.serverTimestamp(),
});
}
Stream<User?> watchUser(String id) {
return _db
.collection('users')
.doc(id)
.snapshots()
.map((snap) => snap.data() != null ? User.fromMap(snap.data()!) : null);
}
Future<List<User>> searchUsers(String query) async {
final snap = await _db
.collection('users')
.where('name', isGreaterThanOrEqualTo: query)
.where('name', isLessThan: query + 'z')
.get();
return snap.docs.map((doc) => User.fromMap(doc.data())).toList();
}
}
Плюсы:
- Realtime синхронизация
- Облачное хранилище
- Автоматическое резервное копирование
Минусы:
- Зависит от интернета
- Стоимость за операции
6. GetStorage — быстрое хранилище
Для: Кеширование, кеширование настроек
import 'package:get_storage/get_storage.dart';
class AppCache {
final box = GetStorage();
Future<void> saveUserData(User user) async {
await box.write('user', user.toMap());
}
User? getUserData() {
final data = box.read('user');
return data != null ? User.fromMap(data) : null;
}
Future<void> clear() async {
await box.erase();
}
}
Плюсы:
- Очень простое API
- Быстрое
- Поддерживает объекты
Минусы:
- Не для больших данных
7. Isar — современная NoSQL БД
Для: Быстрое локальное хранилище с индексами и запросами
import 'package:isar/isar.dart';
part 'user.g.dart';
@collection
class User {
Id id = Isar.autoIncrement;
late String name;
late String email;
}
class UserService {
late final Isar isar;
Future<void> init() async {
isar = await Isar.open([UserSchema]);
}
Future<void> saveUser(User user) async {
await isar.writeTxn(() async {
await isar.users.put(user);
});
}
Future<List<User>> searchByName(String name) async {
return isar.users
.where()
.nameContains(name, caseSensitive: false)
.findAll();
}
}
Плюсы:
- Очень быстрая
- Поддерживает индексы
- Современный API
Минусы:
- Новая (может быть нестабильной)
Сравнительная таблица
Библиотека | Тип | Сложность | Скорость | Размер
----------------|-------------|-----------|----------|--------
SharedPreferences| Key-Value | 1/5 | Хорошая | <5MB
Hive | NoSQL | 2/5 | Отличная | ~50MB
SQLite | SQL DB | 3/5 | Хорошая | ~100MB
Drift | SQL ORM | 4/5 | Хорошая | ~100MB
Firestore | Cloud DB | 2/5 | Средняя | Облако
GetStorage | Key-Value | 1/5 | Хорошая | <10MB
Isar | NoSQL | 2/5 | Отличная | ~100MB
Рекомендации по выбору
- Простые параметры → SharedPreferences
- Список объектов → Hive или Isar
- Сложные связи → SQLite + Drift
- Облачная синхронизация → Firestore
- Кеширование → GetStorage или in-memory Map