이번 게시물에서는 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();
}
}