반응형

이번 게시물에서는 initstate 에서 await 함수 실행시키는 방법을 알아보도록 하겠다.

배경지식은 잠깐 짧게만 설명하도록 하겠다.

 

Flutter의 위젯의 종류는 stateless widget과 statefulwidget이 있다.

일단 그 중에서 statefulwidget에는 생애주기가 있는데, build 함수가 실행되기전에 initstate()가 실행된다.

그럼 build 되기전에 initstate로 내가 필요한 함수들을 먼저 다 실행을 쭉 시켜주고 난 뒤에 그 데이터들을 기반으로 build를 진행하면 될텐데 initstate 함수안에 await을 쓰면 오류가 난다. 어떻게 하면 좋을까?

 

1. statefulwidget인지 확인한다.

statefulwidget이라면, state클래스를 찾고 그안에 override 해서 initstate함수를 만든다.

 

2.만들었으면, await 함수를 쓸 함수를 새로 만든다. (아래의 test() 함수처럼) 그리고 await 를 써서 해당 함수를 호출한다.

*현재는 await 함수가 없어서 새로 Future<void> gogo() 함수를 만들어보았다.

 

3.이제 initState에서 test함수를 실행하면, await을 잘 수행하고 돌아온다.

 

아래 소스코드를 참고해서 구현을 하면되는데 필요한 배경지식을 알려주도록 하겠다. 필요시 학습하고 나서 하면 더 잘된다.

-statefulwidget의 생애주기 공부하기

-await 함수를 쓰려면 async 를 붙여야 한다는 점 알기

-Future<void> 를 해야 함수 앞에 await을 붙일 수 있다는 점 알기

-initstate는 statefulwidget에만 있다는 점 알아두기

 

import 'package:flutter/material.dart'

class Yellongs extends StatefulWidget {
  const Yellongs({super.key});

  @override
  State<Yellongs> createState() => _YellongsState();
}

class _YellongsState extends State<Yellongs> {

  @override void initState() {
    // TODO: implement initState
    super.initState();
    test();
  }

  void test() async{
    await gogo();
  }

  Future<void> gogo() async {
    print('hi');
  }

  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}
반응형
Yellongs