如何在Flutter中异步调用JavaScript?

时间:2020-07-02 08:25:40

标签: flutter flutter-web

我的网站非常混乱,我的JavaScript函数是这样的:

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

当我现在飞镖时,我有:

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

当我打印它时,它返回[object Promise],但它会忽略await,没有.then函数,因此也不能与promiseToFuture一起使用。

如何等待执行JavaScript?

3 个答案:

答案 0 :(得分:1)

也许使用Future构建器来等待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();
          }
        }); 

答案 1 :(得分:0)

awaitjs.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;
}

答案 2 :(得分:0)

-我尝试了使用async从js文件异步执行相同的方法,并在dart文件中使用了--promisetofuture,但是我等不及我们从js文件中获得有关Flutter Web的响应

enter code here

-async函数getPhoneNumber(){ -let res =等待someFunction等待someTime;

返回分辨率;

-在此处输入代码 function somfunc() async{ -var number = await promiseToFuture(js.context.callMethod('getPhoneNumber')); -}