LoginSignup
6
5

More than 3 years have passed since last update.

FlutterアプリでonResume的なタイミングの処理をする

Last updated at Posted at 2020-05-30

状況

カレンダー式表示のアプリを作成しています。「今日」が分かりやすいように、その日付のセルだけ背景色を変えています。
しかし、特にiOSで問題になるのですが、アプリをホームボタンでバックグラウンドに移動していて、もう一度アプリを立ち上げたときに、そのタイミングで日付が変わっていても「今日のセル」が移動してくれません。
Androidでいう、"onResume"のタイミングで処理ができれば解決できると思い、調査しました。

環境など

ツールなど バージョンなど
MacBook Air Early2015 macOS Mojave 10.14.6
Android Studio 3.6.1
Java 1.8.0_131
Flutter 1.12.13+hotfix.9
Dart 2.7.2
Xcode 11.3.1

解決策

SystemChannels.lifecycle.setMessageHandlerを使います。
詳しくはこちら。
https://api.flutter.dev/flutter/services/BasicMessageChannel/setMessageHandler.html

Widgetbuild内でこの関数にハンドラーを登録しておくと、任意のライフサイクルのタイミングで処理をすることが出来るようになります。

/// カレンダーウィジェット
class CalendarWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final viewModel = Provider.of<MonthlyViewModel>(context, listen: false);
    SystemChannels.lifecycle.setMessageHandler((msg) {
      if (msg == 'AppLifecycleState.resumed') {
        print('Resumed!');
        viewModel.updateToday();
      }
      return null;
    });

    return Column(...);
  }
}

参考サイト

6
5
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
6
5