inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 앱 개발 기초

버킷 리스트 앱 만들기

index로 삭제하게 되면, index가 고정되어 있으니 문제가 발생하지 않나요?

해결된 질문

62

kindjin12

작성한 질문수 15

1

bucketlist의 index와 삭제할 index가 다르게 되는 상황이 발생하지 않나요?

 

제가 직접 설명하긴 어려워서 ai 답변 올립니다

index 캡처 문제가 있습니다

 

// 1. IconButton 클릭 → showDeleteDialog(context, index) 호출
onPressed: () { showDeleteDialog(context, index); }, // index=1 (예시)

// 2. Dialog에서 onPressed 호출 시
TextButton(
  onPressed: () {
    setState(() {
      bucketList.removeAt(index); // ❌ index=1 고정 (Dialog 동안 리스트 변경됨)
    });
  },
)

Dialog가 열리는 동안 다른 항목 삭제 → index 무효화 → 잘못된 항목 삭제


flutter

답변 2

1

DevStory

안녕하세요.

onPressed로 전달되는 함수는 클릭을 하는 시점의 상태를 기반으로 Index를 전달하기 때문에, Index는 고정되어 있지 않아 잘못된 항목이 삭제되진 않습니다. 즉 Dialog를 띄울 때 마다 새로 갱신된 Index를 전달한다고 보시면 되는데, 혹시라도 문제가 발생하신다면 재현 방법을 알려주시면 확인해 보도록 하겠습니다.

감사합니다 🙂

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. kindjin12님.

Flutter 앱 개발에서 index를 기반으로 아이템을 삭제할 때 발생할 수 있는 문제에 대해 질문해 주셨군요. Dialog가 열려있고 사용자가 다른 항목을 삭제하면, 삭제하려는 index가 올바르지 않을 수 있다는 문제를 제기하셨습니다.

이는 실제로 발생할 수 있는 문제로, 다른 UI 액션이 있을 때 List의 상태가 변할 수 있기 때문입니다. 이를 방지하기 위해 매개변수로 전달되는 index 대신 객체의 고유한 식별자(ID)를 이용하여 삭제를 수행하는 것이 일반적입니다. 이를 통해 삭제가 정확한 대상에 대해 수행되도록 보장할 수 있습니다.

그렇다면 어떻게 하면 좋을지 구체적으로 설명드리겠습니다. 다음과 같이 구현할 수 있습니다:

  1. 각 Bucket에 ID 추가: 데이터를 관리할 때 식별자를 사용하여 특정 항목을 찾을 수 있도록 합니다.
class Bucket {
  final String id; // 고유 식별자
  final String job;
  final bool isDone;

  Bucket(this.id, this.job, this.isDone);
}
  1. 삭제 함수 수정: index 대신 ID로 삭제하는 방법을 사용합니다.
void deleteBucket(String bucketId) {
  state = state.where((bucket) => bucket.id != bucketId).toList();
}
  1. Dialog에서 ID 사용: 사용자 인터페이스에서 ID를 기반으로 작업을 수행하도록 합니다.
onPressed: () {
  String bucketId = bucketList[index].id; // 현재 요소의 ID
  showDeleteDialog(context, bucketId);
},

이 접근법을 통해, 리스트에서 다른 아이템을 삭제하거나 다른 변동이 있더라도 정확히 원하는 대상을 선택하여 수정 및 삭제할 수 있습니다.

비슷한 문제와 해결 방법에 대한 논의가 이루어진 페이지를 참고해 보시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

회차마다 있는 실습

1

38

2

user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다

1

70

2

SharedPreferences prefs 초기화 시기 문제

1

84

2

API 사이트가 안되네요

1

77

2

잘 되다가 sharedPreferences부터 에러

1

63

2

기존의 프로젝트

1

63

2

I/O라는 창이 윈도우에서는 없어요

1

61

2

수강 기간 연장 부탁드립니다.

1

59

2

설정 질문

1

55

2

수강 기간 연장 신청 요청드립니다.

1

49

2

수강기간 연장 부탁드립니다.

1

54

2

수강기간 연장 부탁드립니다.

1

55

2

수강기간 연장 부탁 드립니다.^^

1

66

3

강의계획 문의

1

63

2

안녕하세요. 강의 연장 문의드립니다..

1

72

2

수강기간 연장 부탁드립니다!

1

78

2

2회차 StatefulWidget 예제 dartpad 코드와 영상에서의 코드가 다릅니다.

2

95

2

dartpad 에러

1

103

2

cmd에 flutter doctor 입력하면 바로 튕겨버립니다...

1

108

2

애뮬레이터 실행시 무한로딩

1

132

2

저는 강사님 처럼 화면이 안뜨는데 머테리얼 버전이 다른걸까요??

1

64

2

수강기간 연장 부탁드립니다!

1

58

2

수강기간 연장 부탁드립니다.

1

68

2

에뮬레이터 실행 오류

1

120

3