강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kindjin12
kindjin12

câu hỏi đã được viết

Cơ bản về phát triển ứng dụng Flutter

Tạo ứng dụng danh sách nhóm

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

Đã giải quyết

Viết

·

49

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

Câu trả lời 2

1

DevStory님의 프로필 이미지
DevStory
Người chia sẻ kiến thức

안녕하세요.

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

감사합니다 🙂

0

안녕하세요, 인프런 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);
},

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

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

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

Hình ảnh hồ sơ của kindjin12
kindjin12

câu hỏi đã được viết

Đặt câu hỏi