3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Tauri 2.0でダイアログを使いたいがNode.jsはインストールしたくない

Posted at

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を素直にインストールしたほうが多分幸せかと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?