Tagged

Flutter

A collection of 3 posts

runAppを読む
Flutter

runAppを読む

Flutterにおいてmain関数で実行されるrunApp関数の実装を読んでいきます。 参照バージョン: Flutter 2.8.0 ドキュメントコメントの確認引数のウィジェットを広げて画面に貼り付ける。画面全体を埋めるようにウィジェットに制約を与える。片側に寄せたり中央に配置する場合はAlignやCenterウィジェットを利用する。runAppを2回呼ぶと前回のウィジェットを画面から切り離し、新しいウィジェットが利用される。runAppの実装void runApp(Widget app) {  WidgetsFlutterBinding.ensureInitialized()    ..scheduleAttachRootWidget(app)    ..scheduleWarmUpFrame(); } WidgetsFlutterBinding.ensureInitializedstatic WidgetsBinding ensureInitialized() {    if (WidgetsBinding.instance == null)      WidgetsFlutterBinding();    return WidgetsBinding.instance!;  } WidgetsFlutterBinding.ensureInitializedは作成・初期化されたWidgetsBindingのインスタンスを返します。main関数でrunApp以前にWidgetsFlutterBinding.ensureInitializedを実行することがよくありますが、最初の実行でWidgetsFlutterBinding()イニシャライザが実行されインスタンスが作成されます。2回目以降は初期化された WidgetsBinding.instance が既に作成されており、それを返すだけの挙動になります。このイニシャライザは親クラスのBindingBaseで定義されています。BindingBaseはシングルトンサービスを提供するmixinのベースクラスです。initInstancesで初期化を行いinitServiceExtensionsで必要があればobservatory service extensionを初期化しています。WidgetsFlutterBindingは以下のmixinを付与されています。

Flutter

AppBarの高さを高くしてタイトルなどを下寄せする

FlutterのAppBarのHeightを長くして戻るボタンやタイトルを下寄せする仕様が発生したので実装してみた。 Scaffold( appBar: PreferredSize( preferredSize: const Size.fromHeight(100), child: Column( children: [ const Spacer(), AppBar( title: Text('Title'), ), ], ), ),高さを100にしてAppBarの上にSpacerを入れてAppBarを下寄せしている。