Skip to content

Commit

Permalink
Services: Bringup hive database service.
Browse files Browse the repository at this point in the history
Signed-off-by: Manjot Sidhu <manjot.techie@gmail.com>
  • Loading branch information
manjotsidhu authored and Nitish145 committed Jul 21, 2021
1 parent c510f38 commit ce1a78f
Show file tree
Hide file tree
Showing 7 changed files with 303 additions and 21 deletions.
7 changes: 7 additions & 0 deletions lib/locator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:mobile_app/services/API/ib_api.dart';
import 'package:mobile_app/services/API/projects_api.dart';
import 'package:mobile_app/services/API/users_api.dart';
import 'package:mobile_app/services/API/country_institute_api.dart';
import 'package:mobile_app/services/database_service.dart';
import 'package:mobile_app/services/dialog_service.dart';
import 'package:mobile_app/services/API/contributors_api.dart';
import 'package:mobile_app/services/ib_engine_service.dart';
Expand Down Expand Up @@ -41,10 +42,16 @@ import 'package:mobile_app/viewmodels/about/about_viewmodel.dart';
GetIt locator = GetIt.instance;

Future<void> setupLocator() async {
// Dialog Service
locator.registerLazySingleton(() => DialogService());

// Local Storage Service
var localStorageService = await LocalStorageService.getInstance();
locator.registerSingleton<LocalStorageService>(localStorageService);

// Database Service
locator.registerLazySingleton<DatabaseService>(() => DatabaseServiceImpl());

// API Services
locator.registerLazySingleton<ContributorsApi>(() => HttpContributorsApi());
locator.registerLazySingleton<UsersApi>(() => HttpUsersApi());
Expand Down
51 changes: 51 additions & 0 deletions lib/services/database_service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import 'package:flutter/foundation.dart';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';

enum DatabaseBox {
IB,
}

extension DatabaseBoxExt on DatabaseBox {
String get inString => describeEnum(this);
}

abstract class DatabaseService {
Future<void> init();

Future<T> getData<T>(DatabaseBox box, String key, {T defaultValue});
Future<void> setData<T>(DatabaseBox box, String key, T value);
}

class DatabaseServiceImpl implements DatabaseService {
@override
Future<void> init() async {
// Hive DB setup
await Hive.initFlutter();

// Register Adapters for Hive
// (TODO)
}

Future<Box> _openBox(DatabaseBox box) async {
if (Hive.isBoxOpen(box.inString)) {
return Hive.box(box.inString);
}

return await Hive.openBox(box.inString);
}

@override
Future<T> getData<T>(DatabaseBox box, String key, {T defaultValue}) async {
var openedBox = await _openBox(box);

return openedBox.get(key, defaultValue: defaultValue);
}

@override
Future<void> setData<T>(DatabaseBox box, String key, T value) async {
var openedBox = await _openBox(box);

return await openedBox.put(key, value);
}
}
Loading

0 comments on commit ce1a78f

Please sign in to comment.