Flutterでウィジェットが作成されたタイミングで処理を行う方法について調べました。
AndroidのonCreate
やiOSのviewDidLoad
的なタイミングのことです。
FlutterではState
のサブクラスを作成し、initState
をオーバーライドすることでウィジェットの作成時に任意の処理を行うことができます。
State
のサブクラスをしようするので必然的にStatefulWidget
のサブクラスも使用することになります。
簡単なアプリの初期化スクリーンを例にすると次のようなコードになります。
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class Initialize extends StatefulWidget {
@override
State createState() {
return InitializeState();
}
}
class InitializeState extends State<Initialize> {
final FirebaseAuth _auth = FirebaseAuth.instance;
var isInitialized = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text("Initializing..."),
Container(
margin: new EdgeInsets.all(10.0),
child: CircularProgressIndicator(),
)
],
),
),
);
}
@override
void initState() {
super.initState();
print("initState");
initializeUser();
}
void initializeUser() async {
FirebaseUser user = await _auth.signInAnonymously();
print("user created:${user.uid}");
}
@override
void dispose() {
super.dispose();
print("dispose");
}
}
initState
ではアニメーションの開始やデータのサブスクライブを行います。
Stateオブジェクトが不要になるときはdispose
が呼び出されるので、オーバーライドして、タイマーの終了やデータのアンサブスクライブなどの終了処理を行います。
参考
https://flutter.io/widgets-intro/#responding-to-widget-lifecycle-events