LoginSignup
42
28

More than 5 years have passed since last update.

Flutterでウィジェットが作成されたタイミングで処理をする

Posted at

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

42
28
1

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
42
28