import 'dart:typed_data'; import 'package:aves/model/image_entry.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; class ImageFileService { static const platform = MethodChannel('deckers.thibault/aves/image'); static Future getImageEntries() async { try { await platform.invokeMethod('getImageEntries'); } on PlatformException catch (e) { debugPrint('getImageEntries failed with exception=${e.message}'); } } static Future getImageEntry(String uri, String mimeType) async { debugPrint('getImageEntry for uri=$uri, mimeType=$mimeType'); try { final result = await platform.invokeMethod('getImageEntry', { 'uri': uri, 'mimeType': mimeType, }) as Map; return ImageEntry.fromMap(result); } on PlatformException catch (e) { debugPrint('getImageEntry failed with exception=${e.message}'); } return null; } static Future getImage(String uri, String mimeType) async { try { final result = await platform.invokeMethod('getImage', { 'uri': uri, 'mimeType': mimeType, }); return result as Uint8List; } on PlatformException catch (e) { debugPrint('getImage failed with exception=${e.message}'); } return Uint8List(0); } static Future getThumbnail(ImageEntry entry, int width, int height) async { if (width > 0 && height > 0) { // debugPrint('getThumbnail width=$width path=${entry.path}'); try { final result = await platform.invokeMethod('getThumbnail', { 'entry': entry.toMap(), 'width': width, 'height': height, }); return result as Uint8List; } on PlatformException catch (e) { debugPrint('getThumbnail failed with exception=${e.message}'); } } return Uint8List(0); } static Future cancelGetThumbnail(String uri) async { try { await platform.invokeMethod('cancelGetThumbnail', { 'uri': uri, }); } on PlatformException catch (e) { debugPrint('cancelGetThumbnail failed with exception=${e.message}'); } } static Future delete(ImageEntry entry) async { try { await platform.invokeMethod('delete', { 'entry': entry.toMap(), }); return true; } on PlatformException catch (e) { debugPrint('delete failed with exception=${e.message}'); } return false; } static Future rename(ImageEntry entry, String newName) async { try { // return map with: 'contentId' 'path' 'title' 'uri' (all optional) final result = await platform.invokeMethod('rename', { 'entry': entry.toMap(), 'newName': newName, }) as Map; return result; } on PlatformException catch (e) { debugPrint('rename failed with exception=${e.message}'); } return {}; } static Future rotate(ImageEntry entry, {@required bool clockwise}) async { try { // return map with: 'width' 'height' 'orientationDegrees' (all optional) final result = await platform.invokeMethod('rotate', { 'entry': entry.toMap(), 'clockwise': clockwise, }) as Map; return result; } on PlatformException catch (e) { debugPrint('rotate failed with exception=${e.message}'); } return {}; } }