从飞镖 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.