Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:pal/src/database/entity/helper/helper_entity.dart'; 3 : import 'package:pal/src/database/entity/page_entity.dart'; 4 : import 'package:pal/src/database/entity/pageable.dart'; 5 : import 'package:pal/src/pal_navigator_observer.dart'; 6 : import 'package:pal/src/services/editor/helper/helper_editor_service.dart'; 7 : import 'package:pal/src/services/editor/page/page_editor_service.dart'; 8 : import 'package:pal/src/ui/editor/pages/helpers_list/helpers_list_modal_viewmodel.dart'; 9 : 10 : class HelpersListModalLoader { 11 : 12 : final PageEditorService _pageService; 13 : final EditorHelperService _helperService; 14 : final PalRouteObserver _routeObserver; 15 : final _helpersOffset = 20; 16 : Pageable<HelperEntity> _pageable; 17 : 18 1 : HelpersListModalLoader( 19 : this._pageService, 20 : this._helperService, 21 : this._routeObserver 22 : ); 23 : 24 1 : Future<HelpersListModalModel> load() async { 25 1 : var resViewModel = HelpersListModalModel(); 26 : 27 4 : RouteSettings route = await _routeObserver.routeSettings.first; 28 2 : PageEntity page = await getPage(route); 29 0 : if (page != null && page.id.isNotEmpty) { 30 0 : resViewModel.pageId = page.id; 31 0 : resViewModel.pageRouteName = page.route; 32 0 : resViewModel.helpers = await this.loadMore(page?.id); 33 : } 34 : return resViewModel; 35 : } 36 : 37 0 : Future<List<HelperEntity>> loadMore(String pageId) { 38 0 : return _pageable != null && _pageable.last 39 0 : ? Future.value([]) 40 : : this 41 0 : ._helperService.getPage( 42 : pageId, 43 0 : _pageable == null ? 0 : ++_pageable.pageNumber, 44 0 : _helpersOffset, 45 0 : ).then( 46 0 : (res) { 47 0 : _pageable = res; 48 0 : return this._pageable.entities.toList(); 49 : }, 50 : ); 51 : } 52 : 53 1 : Future<PageEntity> getPage(RouteSettings route) async { 54 1 : if (route == null || route.name == null || route.name.length <= 0) { 55 1 : return Future.value(); 56 : } 57 0 : return this._pageService.getPage(route.name).then((resPage) => resPage); 58 : } 59 : 60 : }