【问题标题】:How to get callback or return value from async JS function to Dart in Flutter Web?如何在 Flutter Web 中从异步 JS 函数获取回调或返回值到 Dart?
【发布时间】: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&lt;dynamic&gt;', 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


    【解决方案1】:

    错误消息NoSuchMethodError 为您指明了正确的方向。在您的 JS 代码中,fileOpen 是一个函数,在您的飞镖代码中,它只是一个变量。

    你错过了最后的()fileOpen()

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 2018-04-09
      • 2020-03-06
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多