Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:pal/src/database/repository/editor/helper_editor_repository.dart'; 3 : import 'package:pal/src/database/repository/page_repository.dart'; 4 : import 'package:pal/src/database/repository/project_gallery_repository.dart'; 5 : import 'package:pal/src/database/repository/project_repository.dart'; 6 : import 'package:pal/src/database/repository/version_repository.dart'; 7 : import 'package:pal/src/services/http_client/base_client.dart'; 8 : 9 : class EditorAppContext { 10 : 11 : static EditorAppContext _instance; 12 : 13 6 : static init({@required url, @required String token}) { 14 : if(_instance == null) { 15 6 : _instance = HttpEditorAppContext.create(url: url, token: token); 16 : } 17 : } 18 : 19 0 : @visibleForTesting 20 : static create(EditorAppContext editorAppContext) { 21 : _instance = editorAppContext; 22 : } 23 : 24 6 : static EditorAppContext get instance { 25 : if(_instance == null) { 26 : throw "init needs to be called"; 27 : } 28 : return _instance; 29 : } 30 : 31 0 : EditorHelperRepository get helperRepository => throw "not implemented"; 32 : 33 0 : PageRepository get pageRepository => throw "not implemented"; 34 : 35 0 : VersionRepository get versionRepository => throw "not implemented"; 36 : 37 0 : ProjectRepository get projectRepository => throw "not implemented"; 38 : 39 0 : ProjectGalleryRepository get projectGalleryRepository => throw "not implemented"; 40 : } 41 : 42 : /// [EditorAppContext] inherited class to provide some context to all childs 43 : /// - this class will retain [HttpClient] to pass to all childs 44 : class HttpEditorAppContext implements EditorAppContext { 45 : 46 : final PageRepository _pageRepository; 47 : 48 : final EditorHelperRepository _editorHelperRepository; 49 : 50 : final VersionRepository _versionRepository; 51 : 52 : final ProjectRepository _projectRepository; 53 : 54 : final ProjectGalleryRepository _projectGalleryRepository; 55 : 56 6 : factory HttpEditorAppContext.create( 57 : {@required url, @required String token,}) 58 6 : => HttpEditorAppContext._private( 59 6 : httpClient: url == null || token == null ? null : HttpClient.create(url, token), 60 : ); 61 : 62 6 : HttpEditorAppContext._private({ 63 : @required HttpClient httpClient, 64 0 : }) : assert(httpClient != null), 65 6 : this._pageRepository = PageRepository(httpClient: httpClient), 66 6 : this._projectRepository = ProjectRepository(httpClient: httpClient), 67 6 : this._editorHelperRepository = EditorHelperRepository(httpClient: httpClient), 68 6 : this._projectGalleryRepository = ProjectGalleryHttpRepository(httpClient: httpClient), 69 6 : this._versionRepository = VersionHttpRepository(httpClient: httpClient); 70 : 71 12 : EditorHelperRepository get helperRepository => this._editorHelperRepository; 72 : 73 12 : PageRepository get pageRepository => this._pageRepository; 74 : 75 12 : VersionRepository get versionRepository => _versionRepository; 76 : 77 12 : ProjectRepository get projectRepository => _projectRepository; 78 : 79 12 : ProjectGalleryRepository get projectGalleryRepository => _projectGalleryRepository; 80 : 81 : }