iPhone SEサイズの場合で、表示したいものの領域が足りなくなり、ステータスバーを隠すことで、領域を増やす対応をしたい場合があったのでメモ。
画面のサイズの取得と、ステータスバーの非表示のコードです。
if (MediaQuery.of(context).size.width == 320) {
SystemChrome.setEnabledSystemUIOverlays([]);
}
アプリケーションの開始直後からこの設定を行いたかったので、main()の中でやりたいところでしたが、contextへアクセスが難しいのでコードを書く場所を悩みました。
Widgetのbuild内に書くのは好ましくないような気がしたので、最終的にはinitState()内に書くことにしました。
しかし、initState()が呼び出された時には、contextが取れずdelayを付けて実行する形にしました。
contextのアクセスが、didChangeDependencies内であれば安全ということだったので、最終的に、didChangeDependencies() を overrideして、そこに書いた。
api.flutter.dev: didChangeDependencies method
@override
void didChangeDependencies() {
super.didChangeDependencies();
//幅320px端末で status barを隠す
if (MediaQuery.of(context).size.width == 320) {
SystemChrome.setEnabledSystemUIOverlays([]);
}
}
動作コード
こちらに一式用意しています。
https://github.com/quqjp/flutter-test
コード箇所はこちら。
https://github.com/quqjp/flutter-test/tree/master/lib/sample2
参考ページ
- stackoverflow : Hide status bar only on iPhone 5, 5s, SE
- stackoverflow : Flutter get context in initState method