|
|
@@ -1,10 +1,12 @@
|
|
|
import 'dart:convert';
|
|
|
+import 'dart:io';
|
|
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
import 'package:flutter/services.dart';
|
|
|
import 'package:flutter_map/flutter_map.dart';
|
|
|
import 'package:flutter_map/src/consts/map_constants.dart';
|
|
|
import 'package:flutter_map/src/entity/camera_position.dart';
|
|
|
+import 'package:flutter_map/src/entity/codable.dart';
|
|
|
import 'package:flutter_map/src/entity/lat_lng.dart';
|
|
|
import 'package:flutter_map/src/entity/marker.dart';
|
|
|
import 'package:flutter_map/src/interface/map_fun_interface.dart';
|
|
|
@@ -45,11 +47,12 @@ class MapController
|
|
|
@override
|
|
|
void updateOrAddMarkers(List<Marker> markers) {
|
|
|
if (_isDisposed || markers.isEmpty) return;
|
|
|
- final serialized = jsonEncode(markers);
|
|
|
+ final serialized = _encodeJson(markers);
|
|
|
final params = {
|
|
|
'method': MapConstants.methodUpdateOrAddMarkers,
|
|
|
'args': serialized
|
|
|
};
|
|
|
+ debugPrint("updateOrAddMarkers...params==>$params");
|
|
|
if (_channel != null) {
|
|
|
_executeMethod(params);
|
|
|
} else {
|
|
|
@@ -97,7 +100,7 @@ class MapController
|
|
|
@override
|
|
|
void replaceAllMarkers(List<Marker> markers) {
|
|
|
if (_isDisposed) return;
|
|
|
- final serialized = jsonEncode(markers);
|
|
|
+ final serialized = _encodeJson(markers);
|
|
|
final params = {
|
|
|
'method': MapConstants.methodReplaceAllMarkers,
|
|
|
'args': serialized
|
|
|
@@ -120,10 +123,10 @@ class MapController
|
|
|
{bool isAnimateCamera = true, MapPadding? mapPadding}) {
|
|
|
if (_isDisposed || points.isEmpty) return;
|
|
|
Map<String, dynamic> map = {};
|
|
|
- map['points'] = jsonEncode(points);
|
|
|
+ map['points'] = _encodeJson(points);
|
|
|
map['isAnimateCamera'] = isAnimateCamera;
|
|
|
if (mapPadding != null) {
|
|
|
- map['mapPadding'] = jsonEncode(mapPadding);
|
|
|
+ map['mapPadding'] = _encodeJson(mapPadding);
|
|
|
}
|
|
|
final params = {'method': MapConstants.methodAddPolyline, 'args': map};
|
|
|
debugPrint("addPolyline...params==>$params");
|
|
|
@@ -146,4 +149,18 @@ class MapController
|
|
|
_pendingOperations.add(params);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /// iOS 需要一个Map 而不是json string
|
|
|
+ dynamic _encodeJson(dynamic object) {
|
|
|
+ // iOS平台直接返回对象或转换为JSON对象
|
|
|
+ if (Platform.isIOS) {
|
|
|
+ if (object is List) {
|
|
|
+ return object.map((item) => item is Codable ? item.toJson() : item).toList();
|
|
|
+ }
|
|
|
+ return object is Codable ? object.toJson() : object;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 其他平台序列化为JSON字符串
|
|
|
+ return jsonEncode(object);
|
|
|
+ }
|
|
|
}
|