아직 코딩이 익숙하지 않다. 그래서 코드를 짜면서 생각하지 못한 오류들을 만나고 있다.
그 중에 하나가 lifetime widget의 관한 부분이 많은 것 같다.
위젯의 생애주기라고 부르기도 한다.
아래 두 개의 코드가 있다.
1번 코드는
List<Sauce_Model> saucerecipes = []; 의 위치가
_HomePageState 밖에 있다.
2번 코드는
List saucerecipes = []; 의 위치가
_HomePageState 안에 있다.
1. class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
List<Sauce_Model> saucerecipes = []; //모델이기 때문에 빌드가 그려지기 전에 리스트를 선언해야 한다.
class _HomePageState extends State<HomePage> {
// 소스 레시피 재료 입력 페이지로 이동
void showSauceRecipe() {
showDialog(
context: context,
builder: (context) {
return MyAlertbox();
});
}
@override
Widget build(BuildContext context) {
return Scaffold();
2.class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<Sauce_Model> saucerecipes = []; //모델이기 때문에 빌드가 그려지기 전에 리스트를 선언해야 한다.
// 소스 레시피 재료 입력 페이지로 이동
void showSauceRecipe() {
showDialog(
context: context,
builder: (context) {
return MyAlertbox();
});
}
@override
Widget build(BuildContext context) {
return Scoffold();
그와 관련한 GPT의 설명이다.
In general, it's a good practice to declare the List<Sauce_Model> variable outside the _HomePageState class (as in your first example) because the list should be available for the entire lifetime of the widget, not just during the build method. Declaring the list as a class field (like in the first example) ensures that the list is created only once when the widget is instantiated, rather than being created every time the widget is built (like in the second example).
Therefore, it's better to declare the List<Sauce_Model> variable outside the _HomePageState class to ensure that it is available throughout the lifetime of the widget, and to only initialize it once, rather than creating it every time the widget is built.
ensures : 보장
instantiated : 인스턴스화
일반적으로, List<Sauce_Model> 변수는 _HomePageState 클래스 밖에서 선언하는게 좋습니다 (1번 코드). 그 이유는 리스트는 그저 빌드 함수가 작동하는 동안이 아닌 위젯 생애 주기 전체에 사용 가능해야만 하기 때문입니다. 1번 코드처럼 클래스 처럼 선언을 하게 된다면 위젯이 인스턴스화 되어서 딱 한번만 생성하게 보장됩니다. 2번 코드는 매번 위젯이 생성되는 것보다요.
'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글
플러터로 디버깅 하는 방법 (0) | 2023.03.17 |
---|---|
Flutter ListTile에 key를 쓰는 이유 (0) | 2023.02.19 |
Flutter : Expanded와 SingleChildScrollView 의 차이점 (0) | 2023.02.14 |
Flutter : DateTime (0) | 2023.02.13 |
Flutter : BottomNavBar로 TodoPage 기본 모델 만들기 (0) | 2023.02.07 |