Post

Flutter 스플래시 스크린 생성

Flutter 스플래시 스크린 생성

앱이 로딩되는 동안 보이는 스플래시 스크린을 간단하게 만들어본다

1. 사용자 정의 위젯 생성

메인 페이지에 Splash Screen 글자를 출력하고 배경 색상을 설정한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp()); //첫 화면 위젯 설정
}

class MyApp extends StatelessWidget { // Stateless위젯 선언

  @override
  Widget build(BuildContext context) { //위젯 ui 구현
    return MaterialApp(
      home: Scaffold(
        body: Container(
            color: Colors.amber,
            child: Center(
              child: Text("Splash Screen")
          ),
        ),
      ),
    );
  }
}

 

2. 이미지 출력하기

Image 위젯을 이용해서 이미지를 출력할 수 있다

  • Image 기본 위젯: ImageProvider라는 또 다른 위젯에서 이미지를 그린다
  • Image.asset 생성자: 앱에 저장된 asset 파일로 이미지를 그린다
  • Image.network 생성자: Url을 통해서 이미지를 그린다
  • Image.file 생성자: 파일을 통해서 이미지를 그린다
  • Image.memory 생성자: 메모리에서 직접 이미지를 그린다

메인 디렉터리에서 assets 폴더를 생성한다

로드할 이미지는 추가했지만 프로젝트를 실행할때 이 폴더가 있는지 모르기 때문에 pubspec.yaml 파일에 asset 폴더를 지정해야한다

1
2
3
4
5
6
flutter:
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
	assets:
  	- assets/

이후 vscode에서 put get 버튼을 눌러 바뀐 설정을 반영하도록 한다

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp()); //첫 화면 위젯 설정
}

class MyApp extends StatelessWidget { // Stateless위젯 선언

  @override
  Widget build(BuildContext context) { //위젯 ui 구현
    return MaterialApp(
      home: Scaffold(
        body: Container(
            color: Color(0xFFE6F59F),
            child: Center(
              child: Image.asset(
                'assets/logo.png',
              )
          ),
        ),
      ),
    );
  }
}

 

3. 애니메이션 위젯

로딩 애니메이션 위젯을 추가한다 플러터에 만들어진 위젯을 이용하면 직접 구현하지 않아도 된다

  • LinearProgressIndicator: 일자형태
  • CircularProgressIndicator: 원형 형태
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp()); //첫 화면 위젯 설정
}

class MyApp extends StatelessWidget { // Stateless위젯 선언

  @override
  Widget build(BuildContext context) { //위젯 ui 구현
    return MaterialApp(
      home: Scaffold(
        body: Container(
          color: Color(0xFFE6F59F),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
                Image.asset(
                'assets/logo.png',
                width: 200, //이미지 크기 조절
              ),
              CircularProgressIndicator(),
            ],
          ),
        ),
      ),
    );
  }
}

이미지 크기를 줄였더니 배경이 차지하는 크기도 줄었다 위 코드에서 사용한 Column이 세로로는 최대한의 크기를 차지하지만 가로로는 최소한의 크기를 차지하기 때문이다 Column의 상위에 Row를 추가해서 해결할 수 있다(Row는 가로로 최대한의 크기를 차지하기 때문)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp()); //첫 화면 위젯 설정
}

class MyApp extends StatelessWidget { // Stateless위젯 선언

  @override
  Widget build(BuildContext context) { //위젯 ui 구현
    return MaterialApp(
      home: Scaffold(
        body: Container(
          color: Color(0xFFE6F59F),
          child: Row(// 추가
            mainAxisAlignment: MainAxisAlignment.center, //추가
              children: [
              Column(
              mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Image.asset(
                  'assets/logo.png',
                  width: 200, //이미지 크기 조절
                ),
                CircularProgressIndicator(),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
This post is licensed under CC BY 4.0 by the author.