import 'package:path_provider/path_provider.dart'; import 'package:sembast/sembast.dart'; import 'package:sembast/sembast_io.dart'; import 'package:path/path.dart'; import 'dart:async'; /* * Class for storing InvenTree preferences in a NoSql DB */ class InvenTreePreferencesDB { static final InvenTreePreferencesDB _singleton = InvenTreePreferencesDB._(); static InvenTreePreferencesDB get instance => _singleton; InvenTreePreferencesDB._(); Completer _dbOpenCompleter; Future get database async { // If completer is null, AppDatabaseClass is newly instantiated, so database is not yet opened if (_dbOpenCompleter == null) { _dbOpenCompleter = Completer(); // Calling _openDatabase will also complete the completer with database instance _openDatabase(); } // If the database is already opened, awaiting the future will happen instantly. // Otherwise, awaiting the returned future will take some time - until complete() is called // on the Completer in _openDatabase() below. return _dbOpenCompleter.future; } Future _openDatabase() async { // Get a platform-specific directory where persistent app data can be stored final appDocumentDir = await getApplicationDocumentsDirectory(); print("Documents Dir: ${appDocumentDir.toString()}"); print("Path: ${appDocumentDir.path}"); // Path with the form: /platform-specific-directory/demo.db final dbPath = join(appDocumentDir.path, 'InvenTreeSettings.db'); final database = await databaseFactoryIo.openDatabase(dbPath); // Any code awaiting the Completer's future will now start executing _dbOpenCompleter.complete(database); } } class InvenTreePreferences { static const String _SERVER = 'server'; static const String _USERNAME = 'username'; static const String _PASSWORD = 'password'; /* The following settings are not stored to persistent storage, * instead they are only used as 'session preferences'. * They are kept here as a convenience only. */ // Expand subcategory list in PartCategory view bool expandCategoryList = false; // Expand part list in PartCategory view bool expandPartList = true; // Expand sublocation list in StockLocation view bool expandLocationList = false; // Expand item list in StockLocation view bool expandStockList = true; // Ensure we only ever create a single instance of the preferences class static final InvenTreePreferences _api = new InvenTreePreferences._internal(); factory InvenTreePreferences() { return _api; } InvenTreePreferences._internal(); }