class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
final AppOpenAdManager _appOpenAdManager = AppOpenAdManager();
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
_appOpenAdManager.loadAd();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
_appOpenAdManager.showAdIfAvailable(); // 앱이 재개될 때 광고를 표시
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Application Title',
theme: ThemeData(
primaryColor: Colors.indigo,
colorScheme: ColorScheme.fromSwatch(
primarySwatch: Colors.indigo,
accentColor: Colors.amber,
),
textTheme: const TextTheme(
bodyLarge: TextStyle(fontSize: 16.0, color: Colors.black87),
bodyMedium: TextStyle(fontSize: 14.0, color: Colors.black54),
titleLarge: TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold, color: Colors.indigo),
),
buttonTheme: ButtonThemeData(
buttonColor: Colors.amber,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
),
),
home: const LinkListPage(),
);
}
}
_MyAppState는 State 클래스를 상속받아서 MyApp 위젯의 상태를 관리하는 클래스이다.
with WidgetsBindingObserver: WidgetsBindingObserver 믹스인을 사용하여 앱의 라이플사이클을 관찰할 수 있다고 한다. 뭔말인지 모르겠다. _MyAppState에서 또 호출하는 위젯들의 상태를 관찰하고 setState를 할 수 있다는 의미인건지 확인이 필요하다.
AppOpenAdManager는 오픈형 앱 광고 인스턴스 생성하는 줄이므로 이번 글에선 생략
void Initiate(): 상태가 초기화될때 호출되는 method.
super.initiate(): 부모(State)의 initiate를 호출하여 기본 초기화 작업 수행
WidgetsBinding.instance.addObserver(this): _MyAppState 클래스를 옵저버로 등록하여 앱의 라이프사이클을 관찰할 수 있게 한다.
_appOpenAdManager.loadAd() 도 광고 관련이므로 이번 글에선 생략
dispose() : 상태가 제거될 때 호출되는 method. 상태가 제거된다는게 어떤 의미인지 확인이 필요하다. _MyAppState는 MyApp 바로 다음의 클래스니까 앱이 꺼지는 상태를 말하는 것일까?
WidgetsBinding.instance.removeObserver(this): 옵저버 목록에서 _MyAppState를 제거. 더이상 앱상태를 관찰하지 못함.
super.dispose(): State의 dispose 호출,
didChangeAppLifecycleState(): 앱의 라이프사이클 상태가 변경될 때 호출되는 method.
AppLifecycleState.resumed: 앱이 백그라운드에서 포그라운드로 전환될 때의 상태라고 한다. flutter 앱 라이프사이클은 별도로 볼 필요가 있다.
_appOpenAdManager.showAdIfAvailable(): 생략
Widget build() : 실제 UI를 구성하는 method. 각 프레임(화면)마다 호출이 되어 위젯 트리(오브젝트를 트리 형태로 구성)를 구성한다.
return MaterialApp: MaterialApp 생성자를 호출하여 새로운 MaterialApp 위젯을 생성.
title은 실제 화면에서는 안보이므로 무시해도 된다. 어디서 보이는지 모르겠다. 창 제목이라는데 일단 안보인다.
theme: ThemeData: 앱의 전반적인 테마를 설정한다.
primaryColor: 앱의 기본 색상
colorScheme: 앱의 색상 체계 fromSwatch는 스와치를 기반으로한 생상 체계를 생성하는 팩토리 생성자. 스와치가 뭔지는 별도로 찾아봐도 될 듯 하다.
textTheme: 텍스트 스타일 정의
buttonTheme: 버튼 기본 스타일 정의. 내부 디자인 설명은 굳이..알아야 할까 어차피 할때마다 다를텐데
home: construction LinkListPage(): 앱의 기본 홈 화면을 설정한다. LinkListPage는 사용자가 처음 보게되는 화면이다.
LinkLIstPage를 블로그에 올려도 될런지 모르겠다.
'flutter' 카테고리의 다른 글
flutter 앱 개발 소스 분석-5 (0) | 2024.12.12 |
---|---|
flutter 앱 개발 소스 분석-3 (0) | 2024.12.12 |
flutter 앱 개발 소스 분석-1 (1) | 2024.12.11 |
windows에서 안드로이드 개발을 위해 사용했던 flutter 프로젝트가 macOS의 ios 에뮬레이터에서 동작을 안할 때 (0) | 2024.12.08 |
flutter build appbundle 오류 (0) | 2024.11.26 |