Настройка Isar базы данных во Flutter-приложении
Isar — это то, чем Hive хотел стать. Полноценная NoSQL база данных с поддержкой индексов, составных запросов, транзакций и реактивных стримов. Написана на Rust с FFI-биндингами для Dart — отсюда производительность, сопоставимая с SQLite, при значительно более удобном API.
Подходит для проектов, где Hive упирается в ограничения: нужны запросы по нескольким полям, сортировка, фильтрация на стороне базы, или реактивное обновление UI при изменении данных.
Подключение и схема
dependencies:
isar: ^3.1.0+1
isar_flutter_libs: ^3.1.0+1
dev_dependencies:
isar_generator: ^3.1.0+1
build_runner: ^2.4.6
Модель с аннотациями:
@collection
class Product {
Id id = Isar.autoIncrement;
@Index(type: IndexType.value)
late String category;
@Index(composite: [CompositeIndex('price')])
late String name;
late double price;
late bool inStock;
}
Кодогенерация: flutter pub run build_runner build. Создаётся product.g.dart с расширениями для коллекции.
Инициализация:
final isar = await Isar.open(
[ProductSchema],
directory: (await getApplicationDocumentsDirectory()).path,
);
Запросы — главное преимущество
Именно здесь Isar уходит далеко вперёд от Hive:
// Фильтрация + сортировка + лимит
final products = await isar.products
.filter()
.categoryEqualTo('electronics')
.and()
.inStockEqualTo(true)
.sortByPriceDesc()
.limit(20)
.findAll();
Реактивный стрим — UI обновляется при изменении данных:
Stream<List<Product>> watchProducts() {
return isar.products
.filter()
.inStockEqualTo(true)
.watch(fireImmediately: true);
}
Вместо StreamBuilder с периодическим polling — подписка на изменения конкретной выборки. Это чисто и эффективно.
Транзакции. Для записи нескольких связанных объектов используем writeTxn:
await isar.writeTxn(() async {
await isar.products.putAll(newProducts);
await isar.categories.put(updatedCategory);
});
Без транзакции — каждый put это отдельная операция записи. С транзакцией — атомарно.
Ограничения, о которых надо знать
Isar не поддерживает Web-платформу (в отличие от Hive). Если проект таргетирует Flutter Web — используем Hive или ObjectBox. На Desktop (Windows, macOS, Linux) Isar работает через isar_flutter_libs.
Схема данных версионируется: при изменении модели нужно указывать @collection(accessor: 'products') и настраивать миграцию через IsarSchema.migration. Забытая миграция при обновлении приложения — краш при открытии базы.
Сроки
Настройка Isar с 3–5 коллекциями, индексами и базовыми запросами: 1–2 дня. С реактивными стримами, интеграцией в BLoC/Riverpod и миграционной стратегией: 2–4 дня. Стоимость рассчитывается индивидуально после анализа модели данных.







