@@ -4,83 +4,34 @@ import 'package:files/backend/database/helper.dart';
44import 'package:files/backend/database/model.dart' ;
55import 'package:files/backend/folder_provider.dart' ;
66import 'package:files/backend/stat_cache_proxy.dart' ;
7- import 'package:flutter/material.dart' ;
87import 'package:path/path.dart' as p;
98import 'package:path_provider/path_provider.dart' ;
9+ import 'package:ubuntu_service/ubuntu_service.dart' ;
1010
11- class _ProvidersSingleton {
12- _ProvidersSingleton ._();
13-
14- bool _inited = false ;
15-
16- late Isar ? _isar;
17- late FolderProvider ? _folderProvider;
18- late EntityStatCacheHelper ? _helper;
19- late StatCacheProxy ? _cacheProxy;
20-
21- Isar get isar {
22- _checkForAvailability ();
23- return _isar! ;
24- }
25-
26- FolderProvider get folderProvider {
27- _checkForAvailability ();
28- return _folderProvider! ;
29- }
30-
31- EntityStatCacheHelper get helper {
32- _checkForAvailability ();
33- return _helper! ;
34- }
35-
36- StatCacheProxy get cacheProxy {
37- _checkForAvailability ();
38- return _cacheProxy! ;
39- }
40-
41- void _checkForAvailability () {
42- if (! _inited) throw Exception ("Providers not inited or disposed" );
43- }
44-
45- static final _ProvidersSingleton instance = _ProvidersSingleton ._();
46-
47- Future <void > _init () async {
48- if (_inited) return ;
49- WidgetsFlutterBinding .ensureInitialized ();
50- final dir = await getApplicationDocumentsDirectory ();
51- _isar = await Isar .open (
52- [EntityStatSchema ],
53- directory: isarPath (dir),
54- );
55- _folderProvider = await FolderProvider .init ();
56- _helper = EntityStatCacheHelper ();
57- _cacheProxy = StatCacheProxy ();
58- _inited = true ;
59- }
60-
61- Future <void > _dispose () async {
62- await isar.close ();
63- _folderProvider = null ;
64- _helper = null ;
65- _cacheProxy = null ;
66- _inited = false ;
67- }
68-
69- String isarPath (Directory dir) {
70- final String path = p.join (dir.path, 'isar' );
71- if (! Directory (path).existsSync ()) Directory (path).create ();
72- return path;
73- }
11+ String _isarPath (Directory dir) {
12+ final String path = p.join (dir.path, 'isar' );
13+ if (! Directory (path).existsSync ()) Directory (path).create ();
14+ return path;
7415}
7516
76- Future <void > initProviders () async => _ProvidersSingleton .instance._init ();
77-
78- Future <void > disposeProviders () async => _ProvidersSingleton .instance._dispose ();
17+ Future <void > initProviders () async {
18+ final dir = await getApplicationDocumentsDirectory ();
19+ final isar = await Isar .open (
20+ [EntityStatSchema ],
21+ directory: _isarPath (dir),
22+ );
23+ final folderProvider = await FolderProvider .init ();
24+
25+ registerServiceInstance <Isar >(isar);
26+ registerServiceInstance <FolderProvider >(folderProvider);
27+ registerService <EntityStatCacheHelper >(EntityStatCacheHelper .new );
28+ registerService <StatCacheProxy >(StatCacheProxy .new );
29+ }
7930
80- Isar get isar => _ProvidersSingleton .instance.isar ;
31+ Isar get isar => getService < Isar >() ;
8132
82- FolderProvider get folderProvider => _ProvidersSingleton .instance.folderProvider ;
33+ FolderProvider get folderProvider => getService < FolderProvider >() ;
8334
84- EntityStatCacheHelper get helper => _ProvidersSingleton .instance.helper ;
35+ EntityStatCacheHelper get helper => getService < EntityStatCacheHelper >() ;
8536
86- StatCacheProxy get cacheProxy => _ProvidersSingleton .instance.cacheProxy ;
37+ StatCacheProxy get cacheProxy => getService < StatCacheProxy >() ;
0 commit comments