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를 블로그에 올려도 될런지 모르겠다.

 

 

+ Recent posts