如何在 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;
}
我有一个 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;
}