👏

Flutter Windowsアプリ終了時に確認ダイアログを表示する方法

2023/09/10に公開

はじめに

今回は、FlutterのWindowsアプリを閉じるときに、確認ダイアログを表示する方法についてを書いてみようと思います。

準備すること

pubspec.yamlファイルに、window_managerというパッケージを追加します。

# pubspec.yaml
dependencies:
  window_manager: ^0.3.6

実装

まずはパッケージの初期化処理を行います。

// main.dart
void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初期化
  await windowManager.ensureInitialized();
  windowManager.waitUntilReadyToShow(
    const WindowOptions(),
    () async {
      // OSの閉じる処理を無効にする
      await windowManager.setPreventClose(true);
    },
  );

  runApp(const MyApp());
}

そして対応したい画面に、カスタマイズした閉じる処理を実装します。

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with WindowListener {
  
  void initState() {
    super.initState();
    // リスナーを追加する処理
    windowManager.addListener(this);
  }

  
  void dispose() {
    // リスナーを解除する処理
    windowManager.removeListener(this);
    super.dispose();
  }

  
  void onWindowClose() {
    // 確認ダイアログを表示する
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('アプリを閉じますか?'),
        actions: [
          TextButton(
            onPressed: () => Navigator.pop(context),
            child: const Text('いいえ'),
          ),
          TextButton(
            onPressed: windowManager.destroy, // 手動で画面を閉じる処理を実行
            child: const Text('はい'),
          ),
        ],
      ),
    );
  }

  
  Widget build(BuildContext context) {
    return const Scaffold(
      body: YourWidget(),
    );
  }
}

実際に動かしてみた様子は以下のスクショようになります。

アプリの右上の「X」ボタンを押すと確認ダイアログが表示されます。

次に「はい」ボタンを押したら、アプリが閉じられます。

done

最後に

今回はwindow_managerを利用して、Windowsアプリを閉じる処理を手動でコントロールする方法を紹介しました。

実はそれ以外に、window_managerは画面のUIや最大化/最小化など、いろんな設定をカスタマイズすることができます。

FlutterでWindowsアプリを作る際に、このライブラリをできれば開発は楽になるかなと思います。

ご参考になれば幸いです。

GitHubで編集を提案

Discussion