[英]Passing a List of objects between Dart and JavaScript — convert List<dynamic> to List<GeocodeResult>
我正在嘗試從 Dart 訪問Google 地圖地理編碼JavaScript API。
我有這段代碼,它使用js package轉換為 Dart:
@JS('google.maps')
library google_maps;
import 'package:js/js.dart';
@JS()
class Geocoder {
external Geocoder();
external geocode(GeocodeOptions options, void Function(List<GeocodeResult> results, String status) callback);
}
@JS()
@anonymous
class GeocodeResult {
// ...
}
...我從我的應用程序中調用它,如下所示:
geocoder.geocode(
GeocodeOptions(
address: address,
region: region,
),
allowInterop((results, status) {
// ???
}),
);
問題在於回調 function 中的results
列表類型:
void Function(List<GeocodeResult> results, String status)
將類型設置為GeocodeResult
,我收到一個錯誤:
需要一個
List<GeocodeResult>
類型的值,但得到一個List<dynamic>
類型的值
但是,如果我將類型更改為dynamic
,那么我在 dart 中的回調 function 會收到一個List<NativeJavaScriptObject>
。
我不知道如何處理NativeJavascriptObject
!
Map
,所以我不能使用方括號 - result['geometry']
List.cast<GeocodeResult>()
那么我得到一個錯誤: dart.notNull() is not a Functionresult.geometry
歡迎任何和所有的建議,謝謝。
Okay, I've got it working by converting to JSON in JavaScript and then parsing the JSON into a Map
in dart:
geocoder.geocode(
GeocodeOptions(
address: address,
region: region,
),
allowInterop((results, status) {
final list = List<Map<String, dynamic>>();
results.forEach((jsObject) {
//Convert NativeJavascriptObject to Map by encoding and decoding JSON
final json = stringify(jsObject);
final map = Map<String, dynamic>.from(jsonDecode(json));
list.add(map);
});
}),
);
這使用下面的stringify()
,它從 JavaScript 調用JSON.stringify()
。
@JS('JSON.stringify')
external String stringify(Object obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.