feat: Initializes Objectbox database on startup

Integrates Objectbox database initialization into the main application startup process.

Adds `path` and `path_provider` as direct dependencies, which are typically required for Objectbox to locate the database directory.
This commit is contained in:
mandreshope 2025-07-03 16:28:55 +03:00
parent 83a20c548b
commit 8eddb5d4b7
4 changed files with 40 additions and 2 deletions

View File

@ -0,0 +1,34 @@
import 'dart:io';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:barcode_scanner/backend/objectbox/objectbox.g.dart';
late ObjectboxManager objectboxManager;
class ObjectboxManager {
/// The Store of this app.
late final Store store;
ObjectboxManager._create(this.store);
/// Create an instance of ObjectBox to use throughout the app.
static Future<ObjectboxManager> create() async {
Directory directory;
if (Platform.isIOS) {
directory = await getLibraryDirectory();
} else {
directory = await getApplicationSupportDirectory();
}
// Future<Store> openStore() {...} is defined in the generated objectbox.g.dart
final store = await openStore(
directory: p.join(directory.path, "objectbox_db"),
);
return ObjectboxManager._create(store);
}
/// Call it before `runApp()` in main.dart
static Future init() async {
objectboxManager = await ObjectboxManager.create();
}
}

View File

@ -1,3 +1,4 @@
import 'package:barcode_scanner/backend/objectbox/objectbox_manager.dart';
import 'package:barcode_scanner/pages/login_page/login_page_model.dart'; import 'package:barcode_scanner/pages/login_page/login_page_model.dart';
import 'package:barcode_scanner/provider_container.dart'; import 'package:barcode_scanner/provider_container.dart';
import 'package:barcode_scanner/themes/app_theme.dart'; import 'package:barcode_scanner/themes/app_theme.dart';
@ -6,6 +7,7 @@ import 'package:flutter/foundation.dart';
class InitializerService { class InitializerService {
static Future init() async { static Future init() async {
await ObjectboxManager.init();
await AppTheme.initialize(); await AppTheme.initialize();
await providerContainer await providerContainer
.read(loginPageModelProvider.notifier) .read(loginPageModelProvider.notifier)

View File

@ -622,7 +622,7 @@ packages:
source: hosted source: hosted
version: "2.2.0" version: "2.2.0"
path: path:
dependency: transitive dependency: "direct main"
description: description:
name: path name: path
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
@ -630,7 +630,7 @@ packages:
source: hosted source: hosted
version: "1.9.1" version: "1.9.1"
path_provider: path_provider:
dependency: transitive dependency: "direct main"
description: description:
name: path_provider name: path_provider
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"

View File

@ -52,6 +52,8 @@ dependencies:
shared_preferences: ^2.5.3 shared_preferences: ^2.5.3
objectbox: ^4.3.0 objectbox: ^4.3.0
objectbox_flutter_libs: any objectbox_flutter_libs: any
path_provider: ^2.1.5
path: ^1.9.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: