onTap: () async {
int id = selectedDayExercises[index]['id'];
await c.getDetail(id);
Get.to(ExerciseDetail(
id, selectedDayExercises[index]['category']));
},
메인 화면에서 리스트 항목을 선택했을 때 해당 리스트의 디테일 화면으로 이동하는 코드를 Get.to(ExerciseDetail(생략)로 작성해서 실행했는데, 아래 사진과 같은 경고 메세지가 떴다.

내가 작성한 코드 Get.to(페이지())는 메모리를 잡아먹기 때문에 Get.to(() => 페이지()) 방식을 쓰라는 것인데, 언틋보기엔 비슷해 보이는데 어떤 차이가 있는건지 궁금해서 알아 봤다.
()=> 함수() 형태로 사용됨| 구분 | 람다방식 | 일반함수 |
|---|---|---|
| 실행시점 | 나중에 필요할 때 실행 됨 | 즉시 실행됨 |
| 사용 방식 | ()=>함수() 형태 | 함수() 형태 |
| 동작 원리 | 함수 자체를 전달(참조)됨 | 함수가 실행되고 결과를 반환 |
| 메모리 관리 | 필요할 때만 생성 (=>불필요한 실행 방지) | 즉시 실행되기 때문에 불필요한 인스턴스 생성 가능 |
| 예제 | Get.to(() => Page()); | Get.to(Page()); |
| 특징 | 실행을 미룰 수 있음(지연실행) | 즉시 실행되므로 조작 풀가 |
현재 내 코드에서는 사용자가 선택 했을 때만 디테일 페이지로 이동을 해야하기 때문에 람다 방식이 무조건 효율적인 방식이다.
onTap: () async {
int id = selectedDayExercises[index]['id'];
await c.getDetail(id);
Get.to(() => ExerciseDetail(
id, selectedDayExercises[index]['category']));
},
이로써 불필요한 위젯 생성을 방지하고, 메모리 낭비를 최소화 할 수 있게 됐다!