Line data Source code
1 : import 'dart:typed_data'; 2 : import 'dart:ui' as ui; 3 : 4 : import 'package:flutter/rendering.dart'; 5 : import 'package:flutter/widgets.dart'; 6 : import 'package:pal/src/database/entity/page_entity.dart'; 7 : import 'package:pal/src/database/repository/page_repository.dart'; 8 : 9 : abstract class PageEditorService { 10 6 : factory PageEditorService.build( 11 : GlobalKey repaintBoundaryKey, PageRepository pageRepository) => 12 6 : _PageEditorHttpService(repaintBoundaryKey, pageRepository); 13 : 14 : Future capturePagePreview(); 15 : Future<PageEntity> getPage(String route); 16 : Future<PageEntity> createPage(PageEntity createPage); 17 : Future<String> getOrCreatePageId(String routeName); 18 : } 19 : 20 : class _PageEditorHttpService implements PageEditorService { 21 : final GlobalKey _repaintBoundaryKey; 22 : final PageRepository _pageRepository; 23 : 24 6 : _PageEditorHttpService(this._repaintBoundaryKey, this._pageRepository); 25 : 26 : @override 27 0 : Future capturePagePreview({double pixelRatio = 3.0}) async { 28 : try { 29 : RenderRepaintBoundary boundary = 30 0 : _repaintBoundaryKey.currentContext.findRenderObject(); 31 0 : ui.Image image = await boundary.toImage(pixelRatio: pixelRatio); 32 : ByteData byteData = 33 0 : await image.toByteData(format: ui.ImageByteFormat.png); 34 0 : Uint8List data = byteData.buffer.asUint8List(); 35 0 : List<int> dataList = data.toList(); 36 : 37 0 : print(dataList); 38 : // TODO: Send with repository using multipart image 39 : } catch (e) { 40 0 : print('error while catching screenshot'); 41 0 : print(e); 42 : } 43 : } 44 : 45 0 : @override 46 : Future<PageEntity> getPage(String route) { 47 0 : return this._pageRepository.getPage(route); 48 : } 49 : 50 0 : @override 51 : Future<PageEntity> createPage(PageEntity createPage) { 52 0 : return this._pageRepository.createPage(createPage); 53 : } 54 : 55 : @override 56 0 : Future<String> getOrCreatePageId(String routeName) async { 57 0 : if (routeName == null || routeName.length <= 0) { 58 : throw 'invalid route name'; 59 : } 60 : 61 : String pageId; 62 0 : PageEntity resPage = await this.getPage(routeName); 63 0 : if (resPage?.id != null && resPage.id.length > 0) { 64 0 : pageId = resPage.id; 65 : } else { 66 0 : PageEntity resPage = await this.createPage( 67 0 : PageEntity(route: routeName), 68 : ); 69 0 : if (resPage?.id != null && resPage.id.length > 0) { 70 0 : pageId = resPage?.id; 71 : } else { 72 : throw 'page id is null'; 73 : } 74 : } 75 : 76 : return pageId; 77 : } 78 : }