FlutterとRustを簡単に構築する
見た目は Flutter で綺麗に、重い処理は高速な Rust に任せるという最強タッグを構築する話です。
Flutter x Rust では flutter_rust_bridge_codegen V1 のことを記述していましたが、(プレリリースではありますが)V2 になってかなり構築手順が楽になっていたので紹介します。筆者はこちらを強く推奨します。 事前準備
flutter webで実行する予定があれば cargo install wasm-pack を実行する。
cargo install 'flutter_rust_bridge_codegen@^2.0.0-dev.0'を実行する。(バージョンなどはその時々で適宜変更してください)
flutter アプリを新規作成するのであれば
flutter_rust_bridge_codegen create my_app
既存のアプリに rust を使用するのであれば
flutter_rust_bridge_codegen integrate
以上で、project-root/rustとproject-root/rust_builderが作成されていればとりあえずOK
恐らく main.dart の内容がコメントアウトされて以下のようなコードが記述されているはずです。
code: sample.dart
import 'package:flutter/material.dart';
import 'package:flutter_application_1/src/rust/api/simple.dart';
import 'package:flutter_application_1/src/rust/frb_generated.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await RustLib.init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('flutter_rust_bridge quickstart')),
body: Center(
child: Column(
children: [
const Text('sample'),
Text(
'Action: Call Rust greet("Tom")\nResult: ${greet(name: "Tom")}'),
],
)),
),
);
}
}
実行
もし flutter web で実行するのであれば事前に以下のコマンドを実行
flutter_rust_bridge_codegen build-web
そして flutter run 時には以下のように引数を与えます。
flutter run --web-header=Cross-Origin-Opener-Policy=same-origin --web-header=Cross-Origin-Embedder-Policy=credentialless
VSCode であれば launch.json に以下の内容を記述して F5 実行
code:.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Flutter",
"request": "launch",
"type": "dart",
"args": [
"--web-header=Cross-Origin-Opener-Policy=same-origin",
"--web-header=Cross-Origin-Embedder-Policy=credentialless",
]
}
]
}
それ以外の環境(Linux MacOS iOS Android)では通常通り flutter run を実行
結論
もう UI が絡むアプリは全部これでいいんじゃないか?