Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:pal/src/database/hive_client.dart'; 3 : import 'package:pal/src/database/repository/client/helper_repository.dart'; 4 : import 'package:pal/src/database/repository/client/page_user_visit_repository.dart'; 5 : import 'package:pal/src/database/repository/client/schema_repository.dart'; 6 : import 'package:pal/src/database/repository/in_app_user_repository.dart'; 7 : import 'package:pal/src/database/repository/page_repository.dart'; 8 : import 'package:pal/src/database/repository/version_repository.dart'; 9 : import 'package:pal/src/services/http_client/base_client.dart'; 10 : 11 : 12 : class UserAppContext { 13 : 14 : static UserAppContext _instance; 15 : 16 2 : static init({@required url, @required String token}) { 17 : if(_instance == null) { 18 2 : _instance = HttpUserAppContext.create(url: url, token: token); 19 : } 20 : } 21 : 22 0 : @visibleForTesting 23 : static create(UserAppContext userAppContext) { 24 : _instance = userAppContext; 25 : } 26 : 27 2 : static UserAppContext get instance { 28 : if(_instance == null) { 29 : throw "init needs to be called"; 30 : } 31 : return _instance; 32 : } 33 : 34 0 : PageRepository get pageRepository => throw "not implemented"; 35 : 36 0 : ClientHelperRepository get helperRepository => throw "not implemented"; 37 : 38 0 : VersionRepository get versionRepository => throw "not implemented"; 39 : 40 0 : InAppUserRepository get inAppUserRepository => throw "not implemented"; 41 : 42 0 : ClientSchemaRepository get localClientSchemaRepository => throw "not implemented"; 43 : 44 0 : ClientSchemaRepository get remoteClientSchemaRepository => throw "not implemented"; 45 : 46 0 : HelperGroupUserVisitRepository get pageUserVisitRemoteRepository => throw "not implemented"; 47 : 48 0 : HelperGroupUserVisitRepository get pageUserVisitLocalRepository => throw "not implemented"; 49 : 50 : } 51 : 52 : /// [UserAppContext] inherited class to provide some context to all childs 53 : /// - this class will retain [HttpClient] to pass to all childs 54 : class HttpUserAppContext implements UserAppContext { 55 : 56 : final PageRepository _pageRepository; 57 : 58 : final ClientHelperRepository _helperRepository; 59 : 60 : final InAppUserRepository _inAppUserRepository; 61 : 62 : final VersionRepository _versionRepository; 63 : 64 : final HelperGroupUserVisitRepository _pageUserVisitRemoteRepository, _pageUserVisitLocalRepository; 65 : 66 : final ClientSchemaRepository _clientSchemaLocalRepository, _clientSchemaRemoteRepository; 67 : 68 2 : factory HttpUserAppContext.create({@required url, @required String token}) 69 2 : => HttpUserAppContext._private( 70 2 : hiveClient: HiveClient(), 71 2 : httpClient: url == null || token == null ? null : HttpClient.create(url, token) 72 : ); 73 : 74 2 : HttpUserAppContext._private({ 75 : @required HiveClient hiveClient, 76 : @required HttpClient httpClient, 77 0 : }) : assert(httpClient != null), 78 2 : this._pageUserVisitRemoteRepository = HelperGroupUserVisitHttpRepository(httpClient: httpClient), 79 4 : this._pageUserVisitLocalRepository = HelperGroupUserVisitLocalRepository(hiveBoxOpener: hiveClient.openVisitsBox), 80 4 : this._clientSchemaLocalRepository = ClientSchemaLocalRepository(hiveBoxOpener: hiveClient.openSchemaBox), 81 2 : this._clientSchemaRemoteRepository = ClientSchemaRemoteRepository(httpClient: httpClient), 82 2 : this._pageRepository = PageRepository(httpClient: httpClient), 83 2 : this._helperRepository = ClientHelperRepository(httpClient: httpClient), 84 2 : this._versionRepository = VersionHttpRepository(httpClient: httpClient), 85 2 : this._inAppUserRepository = InAppUserRepository(httpClient: httpClient); 86 : 87 2 : @override 88 2 : PageRepository get pageRepository => _pageRepository; 89 : 90 2 : @override 91 2 : ClientHelperRepository get helperRepository => _helperRepository; 92 : 93 0 : @override 94 0 : VersionRepository get versionRepository => _versionRepository; 95 : 96 2 : @override 97 2 : InAppUserRepository get inAppUserRepository => _inAppUserRepository; 98 : 99 2 : @override 100 2 : ClientSchemaRepository get localClientSchemaRepository => _clientSchemaLocalRepository; 101 : 102 2 : @override 103 2 : ClientSchemaRepository get remoteClientSchemaRepository => _clientSchemaRemoteRepository; 104 : 105 2 : @override 106 2 : HelperGroupUserVisitRepository get pageUserVisitRemoteRepository => _pageUserVisitRemoteRepository; 107 : 108 2 : @override 109 2 : HelperGroupUserVisitRepository get pageUserVisitLocalRepository => _pageUserVisitLocalRepository; 110 : }