从 dart native/flutter 调用 javascript

5 javascript npm dart flutter

我已经看到使用 dart js 包从 dart web 调用 js 绝对是可能的,但是还没有找到从 dart 本机执行此操作的方法。对于更多上下文 - 我有一个用 javascript 编写的 npm 包,我想从 flutter 移动应用程序调用它。直接调用 javascript 或以某种方式将其包装在 dart 或其他方式中对我来说都很好,但是在 dart 中重写它是不可能的,因为所述 npm 包依赖于一个非常特定的加密 javascript 包,而在 dart 中不存在等效项,并且重新创建表示密码学包将承担巨大的工作量和重大的安全风险。先感谢您!

Pat*_*ick 4

在您的应用程序中嵌入 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);
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)