从飞镖 native/flutter 调用 javascript
Call javascript from dart native/flutter
我已经看到使用 dart js 包从 dart web 调用 js 绝对是可能的,但是还没有找到从 dart native 执行此操作的方法。对于更多上下文 - 我有一个用 javascript 编写的 npm 包,我想从 flutter 移动应用程序调用它。直接调用 javascript 或以某种方式将其包装在 dart 或其他一些方式中对我来说都很好,但是在 dart 中重写它是不可能的,因为所说的 npm 包依赖于一个非常具体的密码学 javascript 包dart 中不存在等效项,重新创建所述加密包将承担巨大的工作量和重大的安全风险。提前致谢!
在您的应用中嵌入 WebView 并将其用于 运行 JavaScript:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
main() {
runApp(_Test());
}
class _Test extends StatelessWidget {
final completer = Completer<WebViewController>();
@override
Widget build(BuildContext context) {
var js = '1+1';
return MaterialApp(
home: Scaffold(
body: Stack(
children: [
WebView(
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
if (!completer.isCompleted) completer.complete(controller);
},
),
Center(
child: FutureBuilder(
future: completer.future.then((controller) {
return controller.runJavascriptReturningResult(js);
}),
builder: (context, snapshot) {
if (snapshot.hasError) throw snapshot.error!;
if (!snapshot.hasData) return Container();
return Text('$js=${snapshot.data}', style: Theme.of(context).textTheme.headline2);
},
),
),
],
),
),
);
}
}
如果您只需要 Circom 库,有人已经在 Dart 中实现了它。您可以查看 Hermez SDK package and see how they did it. Specifically, in this file.
我已经看到使用 dart js 包从 dart web 调用 js 绝对是可能的,但是还没有找到从 dart native 执行此操作的方法。对于更多上下文 - 我有一个用 javascript 编写的 npm 包,我想从 flutter 移动应用程序调用它。直接调用 javascript 或以某种方式将其包装在 dart 或其他一些方式中对我来说都很好,但是在 dart 中重写它是不可能的,因为所说的 npm 包依赖于一个非常具体的密码学 javascript 包dart 中不存在等效项,重新创建所述加密包将承担巨大的工作量和重大的安全风险。提前致谢!
在您的应用中嵌入 WebView 并将其用于 运行 JavaScript:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
main() {
runApp(_Test());
}
class _Test extends StatelessWidget {
final completer = Completer<WebViewController>();
@override
Widget build(BuildContext context) {
var js = '1+1';
return MaterialApp(
home: Scaffold(
body: Stack(
children: [
WebView(
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
if (!completer.isCompleted) completer.complete(controller);
},
),
Center(
child: FutureBuilder(
future: completer.future.then((controller) {
return controller.runJavascriptReturningResult(js);
}),
builder: (context, snapshot) {
if (snapshot.hasError) throw snapshot.error!;
if (!snapshot.hasData) return Container();
return Text('$js=${snapshot.data}', style: Theme.of(context).textTheme.headline2);
},
),
),
],
),
),
);
}
}
如果您只需要 Circom 库,有人已经在 Dart 中实现了它。您可以查看 Hermez SDK package and see how they did it. Specifically, in this file.