LoginSignup
11
10

More than 3 years have passed since last update.

Flutterのスプラッシュスクリーン表示中に初期化(非同期含む)処理などする

Posted at

概要

Flutterが用意しているデフォルトのスプラッシュスクリーンの表示中に、アプリの初期化処理、通信を含む時間のかかる処理などを含め実行する方法のメモ。

TL;TR

エントリーポイントのmain()runAppを呼び出す前に処理を挿入することで、スプラッシュスクリーン表示中に処理を実行できる。

void main() {
  // やりたい初期化処理などをここに記述

  runApp(MyApp());
}

さらに、ここに非同期処理を入れたい場合はmain()asyncにして、awaitで非同期処理を同期的に処理することでできる。

void main() async {

  await asyncMethod(); // 非同期処理はawaitで同期的に実行

  runApp(MyApp());
}

スプラッシュスクリーンについて

Flutterのスプラッシュスクリーンに関しては検索すると色々な実装方法が紹介れているが、実は現バージョンではプロジェクト作成時にデフォルトのスプラッシュスクリーンが実装されている。ただ、表示時間が短いので気づかないかもしれない。

本記事でスプラッシュスクリーンと言っているのはこのデフォルトのスプラッシュスクリーンのこと。スプラッシュスクリーン自体のカスタマイズはググればいくらでも出てくるので、ここでは触れない。

非同期処理を入れる例

スプラッシュスクリーンの表示中に処理を実行するには、通常の処理ならば上で書いたとおりなので、自動ログインやファイルの読み書きなど時間のかかる(通常非同期の)処理を実行する例を下に示す。

import 'package:flutter/material.dart';

String foo;

void main() async { // asyncにする
  // 初期化処理。この例ではdealyedを使って時間のかかる処理をシミュレートしている
  await Future.delayed(Duration(seconds: 5), () => foo = 'bar');

  // runAppが呼び出されることでスプラッシュスクリーンから遷移するようだ
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Center(child: Text(foo)),
    );
  }
}

初期化処理で非同期処理を入れたい場合はmain()asyncにして、awaitで非同期処理をmain()内で同期的に処理することで、時間のかかる処理もスプラッシュスクリーン表示中にできる。

下のMyAppの中で、初期化処理で値を代入している変数fooを画面に表示している。
初期化処理で代入している値 "bar" が表示されるので、ちゃんと初期化処理が完了していることがわかる。

11
10
0

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
11
10