🛎️

【Flutter】Flutter WebでjavaScript関数を呼び出す

2022/10/01に公開

やること

FlutterWebからpub.dev: jsを使用してJavaScript関数を呼び出す。

使用するフォルダ構成
project(root)
├─ lib
│  ├─ main.dart
│  └─ js
│      ├─ js_func.js
│      └─ js_func_call.dart
└─ web
    └─ index.html

基本的な使い方

簡単な自作のjs関数を定義して呼び出してみる。
ボタンを押すとjs関数で変換した文字列がコンソールに出力されるだけのシンプルなもの。

main.dart
import 'package:flutter/material.dart';
import 'js/js_func_call.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  
  Widget build(BuildContext context) {

    const argumentValue = "js関数の呼び出し";
    String returnValue = "";

    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text("js operation check"),
          ),
          body: Center(
            child: ElevatedButton(
              onPressed: () {
                // JavaScript関数を呼び出し、戻り値をコンソールに表示
                returnValue = callJsFunc(argumentValue);
                debugPrint(returnValue);
              },
              child: const Padding(
                padding: EdgeInsets.all(8.0),
                child: Icon(
                  Icons.play_circle,
                  color: Colors.white,
                ),
              ),
            ),
          ),
        ));
  }
}
js_func_call.dart
()
// jsファイル名を記載
library js_func;
import 'package:js/js.dart';

// jsファイルから呼び出したい関数をCall
('callJsFunc')
external String callJsFunc(String message);
js_func.js
// JavaScriptの関数定義
function callJsFunc(message){
    const returnMessage = "js function call: " + message
    return returnMessage
}
index.html
  <!--  上記部分省略 -->
  <script src="flutter.js" defer></script>
  <!--  JavaScript関数を定義したjsファイルのパスを指定 -->
  <script src="../lib/js/js_func.js" defer></script>
</head>

やや応用編

少し応用して外部のSDKのjs関数を呼び出した記事はこちら
「LINE LIFF × Flutter Web:サンプルアプリで動作確認 〜js〜」

おわり

自作のjs関数も、外部のライブラリ内のjs関数を呼び出す時も、基本的な流れは同じ。
使用したいライブラリ等のCDNをindex.htmlに差し込んで呼び出す。

GitHubで編集を提案

Discussion