从 Dart 返回 returns javascript 普通对象的匿名 JS 函数

Returning anonymous JS function which returns javascript plain object from Dart

飞镖代码

import 'dart:html' as html;
import 'dart:js' as js;
import 'package:js/js.dart';

void main() {

  var data = new AddLocationData(locationName: "Location1", locationPath: "ThisFolder");
  var func = () => data;
  html.window.console.log(func);
  html.window.console.log(func());
}

@JS("")
@anonymous
class AddLocationData {
  external String get locationName;
  external String get locationPath;
  external factory AddLocationData({String locationName, String locationPath});
}

你会认为 func 将是一个 js 函数,但它不是。它的 type/name 是 main_closure。看截图

所以前两行是从 Dart 代码打印的,然后我使用 Chrome Inspect Element window 并右键单击 main_closure' and selected "Store as global variable" which then printedtemp1` 然后我用它来显示一些信息关于生成的代码。

很明显 Dart 返回了一个对象而不是 js 函数,所以这就是问这个问题的原因。

所以我希望 temp1 成为一个函数而不是 temp1.call[=17=] 这样我就可以通过调用 temp1() 而不是 temp1.call[=19=]().[=21= 来获取数据]

js package doc:

Passing functions to JavaScript.

If you are passing a Dart function to a JavaScript API, you must wrap it using allowInterop or allowInteropCaptureThis.