【发布时间】:2021-03-25 01:54:17
【问题描述】:
我正在尝试从 Dart 访问 Google Maps Geocoding 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) {
// ???
}),
);
问题在于回调函数中results列表的类型:
void Function(List<GeocodeResult> results, String status)
类型设置为GeocodeResult,我得到一个错误:
应为
List<GeocodeResult>类型的值,但得到List<dynamic>类型的值
但是如果我将类型更改为dynamic,那么我在dart 中的回调函数会收到List<NativeJavaScriptObject>。
我不知道如何处理 NativeJavascriptObject!
- 不是
Map,所以我不能使用方括号——result['geometry'] - 如果我尝试使用
List.cast<GeocodeResult>(),则会收到错误消息:dart.notNull() 不是函数 - 它是一个 dart 对象,所以我不能只使用点符号访问任意属性 —
result.geometry
欢迎提出任何建议,谢谢。
【问题讨论】:
标签: javascript flutter dart flutter-web dart-js-interop