状況
カレンダー式表示のアプリを作成しています。「今日」が分かりやすいように、その日付のセルだけ背景色を変えています。
しかし、特に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
Widget
のbuild
内でこの関数にハンドラーを登録しておくと、任意のライフサイクルのタイミングで処理をすることが出来るようになります。
/// カレンダーウィジェット
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(...);
}
}
参考サイト