* 그림판으로 splash 이미지 만들기
그림판으로 splash 이미지 만들고 적용을 해보자
1. 그림을 넣기보다는 이쁜 폰트로 앱 이름만 적는 걸로 승부하자.
(눈금을 켜놓으면 그나마 가운데 정렬하기가 용이하다. 1024x1024 정도면 되겠지?)
- 요놈은 splash.png로 이름을 정해주자 (나중에 이름 그대로 사용)
2. 다 만들고 그림판 전체선택(ctrl+a) > 마우스 우 클릭 > 색 반전을 선택하면 dark 모드까지 만들 수 있다
- 요놈은 splash-invert.png로 이름 짓도록 하자
* 스플래시 적용하기
공식 가이드로 제공은 하지만...
flutter.dev/docs/development/ui/advanced/splash-screen
Adding a splash screen to your mobile app
Learn how to add a splash screen to your mobile app.
flutter.dev
역시나 위 가이드대로 처리해주는 패키지가 있다
pub.dev/packages/flutter_native_splash
flutter_native_splash | Dart Package
Generates native code to customize Flutter's default white native splash screen with background color and splash image. Supports dark mode, full screen, and more.
pub.dev
README에 너무 설명이 잘 나와있어서 간략하게만 정리하도록 하자
1. pubspec.yaml (pub get은 당연히 해주고)
dev_dependencies:
flutter_test:
sdk: flutter
# 짜라란
flutter_native_splash: ^1.1.8+4
# To add assets to your application, add an assets section, like this:
# assets에 splash 이미지들 넣을꺼니 아래 부분도 수정하자
assets:
- assets/
2. 이전에 만들었던 splash.png, splash-invert.png 파일을 복사해오자
3. flutter_native_splash.yaml 파일을 만든다
- pubspec.yaml에 넣을수도 있지만 보기 편하게 따로 관리하자
- README.md 내용 그대로 복사해서 붙이고 아래 부분만 변경을 하자
flutter_native_splash:
color: "#42a5f5"
#background_image: "assets/background.png"
image: assets/splash.png
color_dark: "#042a49"
#background_image_dark: "assets/dark-background.png"
image_dark: assets/splash-invert.png
4. 이제 만들어주자
# flutter pub run flutter_native_splash:create
5. 다 됐을것 같지만 아직이다.
여기까지는 native 프로그램 실행까지의 splash라면
앱 시작 후 로딩 중에 표시 할 splash도 만들도록 하자
- 앱 시작 후 초기화, 리소스 불러오기 등을 처리하는 동안 보여 줄 화면
- 단순하게 CircularProgressIndicator정도만 추가해도, 사용자에게 처리 중을 알려주기에는 충분할 듯 하다
// 플러터 기본앱에 Splash 위젯처리하는 부분만 추가 한 예제
class Splash extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Icon(
Icons.apartment_outlined,
size: MediaQuery.of(context).size.width * 0.785,
),
),
);
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Future.delayed(Duration(seconds: 3)),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return MaterialApp(home: Splash());
} else {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
},
);
}
}
* 결과 (1차시도)
으으윽... 배경색을 맞추고, 스테이터스 바도 없애야겠다
* 결과 (2차시도)
1. 배경색 맞추기
flutter_native_splash:
# white로 맞춤
color: "#ffffff"
#background_image: "assets/background.png"
image: assets/splash.png
# black으로 맞춤
color_dark: "#000000"
#background_image_dark: "assets/dark-background.png"
image_dark: assets/splash-invert.png
# 요놈은 스테이터스바 사용 X
fullscreen: true
2. 스테이터스바 없애려면 코드상에서도 처리가 필요하다
void main() {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setEnabledSystemUIOverlays(
[SystemUiOverlay.bottom, SystemUiOverlay.top]);
runApp(MyApp());
}
3. 결과
- 네이티브 스플래시
- 앱 구동 후 스플래시
(앱 시작 후 현재 테마 확인해서 light/dark 처리하면 되겠다)
'dart' 카테고리의 다른 글
dart, flutter(+a) vscode 플러그인 (0) | 2021.05.16 |
---|---|
flutter launcher icon (0) | 2021.05.10 |
flutter 상태 관리 뭘로 하지 (0) | 2021.05.05 |
flutter vscode 설정 (0) | 2021.05.05 |
flutter 폴더 구조 정리 (0) | 2021.05.05 |