Tauri 2.0.0でダイアログ(Node.js未使用)
Tauri 1.0の時はパッケージマネージャがなくてもAPIの利用には特に問題はなかったのだけど2.0になったらパッケージマネージャが無いとAPIの導入が出来なくなったかもしれない。
使い方が変わりすぎていて目がまわりそうになりつつ、なんとか状況を把握して結論に至りました。でも実は違うのかも、よくわからないですがとりあえずそういう理解におちつきました。
…RustでGUIを使いたいだけなのにNode.jsをインストールしないといけないなんて! すごく嫌だ!!
というわけなので抗います。
rfdで何とかする。
Rustでダイアログといえばrfdです。
簡単に使えて超便利。
問題があるとするとTauriで利用する際にメインウィンドウの裏側にダイアログが隠れてしまう心配があるということで逆にいえばそれ以外に不安要素がない。Rustでダイアログに用事があるなら全部rfdでやるといい。
rfdはcargoでインストールしておきます
cargo add rfd
懸念事項のダイアログがメインウィンドウの裏側に隠れてしまうことの無いようにするためのコードがこちら
use rfd::FileDialog;
use tauri::{AppHandle, Manager};
//~略~
#[tauri::command]
async fn open_file_dialog(handle: AppHandle) -> String {
let window = handle.get_webview_window("main").unwrap();
let file_path = rfd::FileDialog::new().set_parent(&window).pick_file();
if file_path != None {
let file_path = file_path.unwrap();
//~処理~
} else {
//~キャンセルされた~
}
//~略~
とりあえず雑ですがこういう感じで、AppHandleを受け取ります。
JS側でinvokeする際には特に引数を渡す必要が無くて、これはTauriが自動的に渡してくれる値になります。
これでrfdは親ウィンドウがわかるのでダイアログをモーダレスに動作させることが出来ました。
ウィンドウの裏側にダイアログが回り込むこともありません。
やりました、これで Node.jsをインストールすることなく無事にやり過ごせましたよ!
※モバイルとかターゲットにするならNode.jsを素直にインストールしたほうが多分幸せかと思います。