sro*_*oes 6 dart-js-interop flutter flutter-web
我正在尝试等待自定义的全局 JavaScript 函数:
var promise = js.context.callMethod('performAuthenticationInNewWindow', [uri.toString()]);
print(promise);
var qs = await promiseToFuture(promise);
Run Code Online (Sandbox Code Playgroud)
打印以下内容:
[object Promise]
NoSuchMethodError: tried to call a non-function, such as null: 'jsPromise.then'
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的错误。鉴于dart:js_util包含函数 promiseToFuture() 的包的名称,我也认为该函数应该与通过 获得的对象一起使用dart:js,但事实并非如此,文档中的示例实际上非常清楚。
必须使用能够得到的JavaScript无极对象@JS()的注释package:js。例子:
@JS()
library my_lib; //Not avoid the library annotation
import 'dart:js_util';
import 'package:js/js.dart';
@JS()
external performAuthenticationInNewWindow(String uri);
performAuth(uri) async {
var promise = performAuthenticationInNewWindow(uri.toString());
var qs = await promiseToFuture(promise);
print(qs);
}
Run Code Online (Sandbox Code Playgroud)
避免出错的注意事项:
如果用于与 Javascript 互操作的函数需要使用dart:js包获得的对象,则声明的类型通常是 not ObjectbutJsObject或 subclasses。相反,如果必须使用@JS注解获取对象,则声明的类型为Object,如果不存在适当的外部声明(使用@JS注解获取的对象的runtimeType为NativeJavaScriptObject,但在飞镖SDK)。
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |