【发布时间】:2023-01-20 14:54:39
【问题描述】:
我正在尝试执行JSFlutter Web 中的本机代码。我有办法打电话JS功能来自镖但找不到任何解决方法来从中获取结果JS到镖.
下面是我试图以不同方式实现但没有取得任何成功的 JS 代码和 Dart 代码。
JS代码:
let fileHandle;
let finalResult;
async function fileOpen() {
[fileHandle] = await window.showOpenFilePicker();
const file = await fileHandle.getFile();
console.log('File info ----> ', file);
if (file != null) {
const parser = new window.AppInfoParser(file);
const result = await parser.parse();
console.log('app info ----> ', result);
console.log('icon base64 ----> ', result.icon);
finalResult = result;
} else {
finalResult = 'File not selected';
console.log('File not selected')
}
return finalResult;
// return Promise.resolve(finalResult)
}
飞镖代码:
示例 1:只需调用 JS 函数,无需回调。
import 'dart:js' as js;
// Call below on any click event
js.context.callMethod('fileOpen')
示例 2:在执行 JS 代码之前出现错误。 Uncaught (in promise) TypeError: jsPromise.then is not a function at Object.promiseToFuture (js_util.dart:275:35)。
import 'dart:js' as js;
import 'package:js/js_util.dart';
// Call below on any click event
dynamic result = await promiseToFuture<dynamic>(js.context.callMethod('fileOpen'));
示例 3:执行 JS 代码后出现错误。 NoSuchMethodError: tried to call a non-function, such as null: 'obj[$toString]' 或 Expected a value of type 'Future<dynamic>', but got one of type 'LegacyJavaScriptObject'。
import 'package:js/js_util.dart';
import 'package:js/js.dart';
@JS('fileOpen')
external dynamic fileOpen;
// Call below on any click event
dynamic result = await promiseToFuture(fileOpen());
需要一种方法将结果返回给 dart。
【问题讨论】:
标签: javascript flutter dart flutter-web