Налаштування бази даних 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 з періодичним опитуванням ви отримуєте підписку на зміни конкретного запиту. Чисто та ефективно.
Транзакції. Для запису декількох пов'язаних об'єктів використовуйте 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 дні. Вартість розраховується індивідуально після аналізу вашої моделі даних.







