From 1039bf86b9b5cab08c5ae57afd015cc4278f1e0b Mon Sep 17 00:00:00 2001 From: JunhwaLee Date: Fri, 6 May 2022 19:10:53 +0900 Subject: [PATCH] =?UTF-8?q?OverlayImage=20=EC=97=90=20ImageFile=EC=9D=98?= =?UTF-8?q?=20Path=EB=A1=9C=20OverlayImage=20=EC=83=9D=EC=84=B1=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/lbstech/naver_map_plugin/Convert.java | 5 +++++ .../naver_map_plugin/NaverMarkerController.java | 3 +++ .../naver_map_plugin/NaverPathsController.java | 3 +++ example/test/widget_test.dart | 3 ++- ios/Classes/src/JsonConversion.swift | 7 +++++++ ios/Classes/src/NaverMarkersController.swift | 4 ++++ ios/Classes/src/NaverPathsController.swift | 4 ++++ lib/src/marker.dart | 1 + lib/src/overlay_image.dart | 17 ++++++++++++----- lib/src/path_overlay.dart | 1 + 10 files changed, 42 insertions(+), 6 deletions(-) diff --git a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/Convert.java b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/Convert.java index 24b0491..fc06319 100644 --- a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/Convert.java +++ b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/Convert.java @@ -184,6 +184,11 @@ static OverlayImage toOverlayImage(Object o) { return OverlayImage.fromAsset(key); } + static OverlayImage toOverlayImageFromFile(Object o) { + String imagePath = (String) o; + return OverlayImage.fromPath(imagePath); + } + static List toCoords(Object o) { final List data = (List) o; final List points = new ArrayList<>(data.size()); diff --git a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverMarkerController.java b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverMarkerController.java index fff722c..bb6be73 100644 --- a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverMarkerController.java +++ b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverMarkerController.java @@ -187,6 +187,9 @@ void interpret(HashMap json) { final Object icon = json.get("icon"); if (icon != null) marker.setIcon(Convert.toOverlayImage(icon)); + final Object iconFromFile = json.get("iconFromFile"); + if (icon != null) marker.setIcon(Convert.toOverlayImageFromFile(iconFromFile)); + final Object infoWindow = json.get("infoWindow"); if (infoWindow != null) this.infoWindowText = (String)infoWindow; else this.infoWindowText = null; diff --git a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverPathsController.java b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverPathsController.java index 867e469..b70920a 100644 --- a/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverPathsController.java +++ b/android/src/main/java/map/naver/plugin/net/lbstech/naver_map_plugin/NaverPathsController.java @@ -94,6 +94,9 @@ void interpret(HashMap option){ final Object patternImage = option.get("patternImage"); if (patternImage != null) path.setPatternImage(Convert.toOverlayImage(patternImage)); + final Object patternImageFromFile = option.get("patternImageFromFile"); + if (patternImageFromFile != null) path.setPatternImage(Convert.toOverlayImageFromFile(patternImageFromFile)); + final Object patternInterval = option.get("patternInterval"); if (patternInterval != null) path.setPatternInterval(Math.round(((int) patternInterval)*density)); diff --git a/example/test/widget_test.dart b/example/test/widget_test.dart index 12e22b6..486d8c7 100644 --- a/example/test/widget_test.dart +++ b/example/test/widget_test.dart @@ -8,7 +8,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:naver_map_plugin_example/main.dart'; +import '../lib/main.dart'; + void main() { testWidgets('Verify Platform version', (WidgetTester tester) async { diff --git a/ios/Classes/src/JsonConversion.swift b/ios/Classes/src/JsonConversion.swift index 7b1923e..c3c95fa 100644 --- a/ios/Classes/src/JsonConversion.swift +++ b/ios/Classes/src/JsonConversion.swift @@ -82,6 +82,13 @@ public func toOverlayImage(assetName: String, registrar: FlutterPluginRegistrar) return NMFOverlayImage(name: assetPath) } +public func toOverlayImageFromFile(imagePath: String) -> NMFOverlayImage? { + if let image = UIImage.init(contentsOfFile: imagePath) { + return NMFOverlayImage(image: image, reuseIdentifier: imagePath) + } + return nil +} + // ============================= 객체를 json 으로 ================================= diff --git a/ios/Classes/src/NaverMarkersController.swift b/ios/Classes/src/NaverMarkersController.swift index 21f0c29..760d3fc 100644 --- a/ios/Classes/src/NaverMarkersController.swift +++ b/ios/Classes/src/NaverMarkersController.swift @@ -106,6 +106,10 @@ class NMarkerController: NSObject { let overlayImage = toOverlayImage(assetName:assetName, registrar: registrar) { marker.iconImage = overlayImage } + if let imagePath = json["iconFromFile"] as? String, + let overlayImage = toOverlayImageFromFile(imagePath: imagePath) { + marker.iconImage = overlayImage + } if let infoWindowText = json["infoWindow"] as? String { self.infoWindowTitle = infoWindowText } diff --git a/ios/Classes/src/NaverPathsController.swift b/ios/Classes/src/NaverPathsController.swift index 14ef75c..0023233 100644 --- a/ios/Classes/src/NaverPathsController.swift +++ b/ios/Classes/src/NaverPathsController.swift @@ -64,6 +64,10 @@ class NPathController: NSObject { if let patternImage = json["patternImage"] as? String { path.patternIcon = toOverlayImage(assetName: patternImage, registrar: registrar) } + if let patternImageFromFile = json["patternImageFromCache"] as? String { + path.patternIcon = toOverlayImageFromFile(imagePath: patternImageFromFile) + } + if let patternInterval = json["patternInterval"] as? UInt { path.patternInterval = patternInterval } diff --git a/lib/src/marker.dart b/lib/src/marker.dart index 3e20f42..83be55c 100644 --- a/lib/src/marker.dart +++ b/lib/src/marker.dart @@ -238,6 +238,7 @@ class Marker { addIfPresent('subCaptionHaloColor', subCaptionHaloColor?.value); addIfPresent('subCaptionRequestedWidth', subCaptionRequestedWidth); addIfPresent('icon', icon?.assetName); + addIfPresent('iconFromCache', icon?.imageFilePath); addIfPresent('infoWindow', infoWindow); addIfPresent('anchor', anchor?._json); diff --git a/lib/src/overlay_image.dart b/lib/src/overlay_image.dart index 1b00832..3337cde 100644 --- a/lib/src/overlay_image.dart +++ b/lib/src/overlay_image.dart @@ -2,12 +2,15 @@ part of naver_map_plugin; /// 마커에 쓰일 비트맵 이미지를 정의한다. class OverlayImage { - final AssetImage image; - final AssetBundleImageKey key; + final AssetImage? _image; + final AssetBundleImageKey? _key; + final String? _imagePath; - get assetName => Platform.isIOS ? image.assetName : key.name; + get assetName => Platform.isIOS ? _image?.assetName : _key?.name; - const OverlayImage._(this.image, this.key); + get imageFilePath => _imagePath; + + const OverlayImage._({image, key, imagePath}) : _image = image, _key = key, _imagePath = imagePath; /// ## [assetName] 이미지 중 [configuration]에 맞는 이미지를 찾아 [OverlayImage]객체를 만든다. /// @@ -40,6 +43,10 @@ class OverlayImage { final AssetImage assetImage = AssetImage(assetName); final AssetBundleImageKey key = await assetImage.obtainKey(_configuration); - return OverlayImage._(assetImage, key); + return OverlayImage._(image: assetImage, key: key); + } + + static OverlayImage fromImageFile(String imagePath) { + return OverlayImage._(imagePath: imagePath); } } diff --git a/lib/src/path_overlay.dart b/lib/src/path_overlay.dart index 4794d5b..d6ee50c 100644 --- a/lib/src/path_overlay.dart +++ b/lib/src/path_overlay.dart @@ -142,6 +142,7 @@ class PathOverlay { 'passedColor': passedColor.value, 'passedOutlineColor': passedOutlineColor.value, 'patternImage': patternImage?.assetName, + 'patternImageFromCache' : patternImage?.imageFilePath, 'patternInterval': patternInterval, 'progress': progress, 'width': width,