如何在 Flutter 中异步调用 JavaScript?

How to asynchronously call JavaScript in Flutter?

我有一个 flutter web,其中有一个 JavaScript 函数,如下所示:

async function doSomething(value) {
   let x = await something(x);
   return x
}

当我现在使用飞镖时,我有:

final result = await js.context.callMethod('doSomething', ['someValue']));

这个 returns [object Promise] 当我打印它时,它确实忽略了 await,没有 .then 函数,因此不能与 [=16 一起使用=] 要么。

如何等待JavaScript被执行?

也许使用 Future builder 来等待 JS 执行?

Future getSomething(String someValue) async {
  var result = await js.context.callMethod('doSomething', [someValue]));
  return result;
}

FutureBuilder(
        future: getSomething(someValue),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            var data = snapshot.data;
            print(data);
          } else {
            return Loading();
          }
        }); 

只有 await 不适用于 js.context.callMethod

这必须添加到您的代码中的某处,例如 javascript_controller.dart

@JS()
library script.js;

import 'package:js/js.dart';
import 'dart:js_util';

@JS()
external dynamic doSomething();

然后

Future getSomething(String someValue) async {
  var result = await promiseToFuture(doSomething());
  return result;
}

我尝试使用相同的方法使用 async 从 js 文件异步执行并在 dart 文件中使用 --promisetofuture 但我无法等到我们从 flutter web 的 js 文件收到响应

async function getPhoneNumber() {
    let res = await someFunction to wait for someTime;
    return res;
}

function somfunc() async{
    var number = await 
    promiseToFuture(js.context.callMethod('getPhoneNumber'));
}

放在index.html

<script src="script.js" defer></script>

在Script.js

async function showAlert(href,hashtag,quote) {
      if (response) {   
      window.dartFunc("asd");
      dartFunc("asd");        
      } else if () {
          alert("error adding points");     
      }
      else{
            alert("error dialog close");
      }
  });
};

在你的 dart 文件中的 initstate()

setProperty(window, 'dartFunc', js.allowInterop(dartFunc));

sss() async {
 await js.context.callMethod('showAlert', [
      '',
      '',
      ''
    ]);
}

String dartFunc(String str) {
    Common.showToast('Music');
    Common.showToast(str);

    return 'Inside dartFunc: ' + str;
  }