Image 列表<;附件>;无效值:只有有效值为0:1

Image 列表<;附件>;无效值:只有有效值为0:1,image,flutter,attachment,Image,Flutter,Attachment,我有3个按钮,当用户点击它时,他们会拍一张照片,按钮会在照片预览中更改。在长按时,图片会被删除,并被第一个按钮替换。当我尝试删除照片时,出现以下错误: Unhandled Exception: RangeError (index): Invalid value: Only valid value is 0: 1 E/flutter ( 4122): #0 List.[] (dart:core-patch/growable_array.dart:146:60) E/flutter ( 4

我有3个按钮,当用户点击它时,他们会拍一张照片,按钮会在照片预览中更改。在长按时,图片会被删除,并被第一个按钮替换。当我尝试删除照片时,出现以下错误:

Unhandled Exception: RangeError (index): Invalid value: Only valid value is 0: 1
E/flutter ( 4122): #0      List.[] (dart:core-patch/growable_array.dart:146:60)
E/flutter ( 4122): #1      _HomePageNoticeProblemState.removePicture.<anonymous closure> (package:flutterapperadauti/notice_a_problem/main_page.dart:117:23)
E/flutter ( 4122): #2      State.setState (package:flutter/src/widgets/framework.dart:1233:30)
E/flutter ( 4122): #3      _HomePageNoticeProblemState.removePicture (package:flutterapperadauti/notice_a_problem/main_page.dart:113:5)
E/flutter ( 4122): #4      _HomePageNoticeProblemState.build.<anonymous closure> (package:flutterapperadauti/notice_a_problem/main_page.dart:509:23)
E/flutter ( 4122): #5      _InkResponseState._handleLongPress (package:flutter/src/material/ink_well.dart:805:25)
E/flutter ( 4122): #6      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:865:61)
E/flutter ( 4122): #7      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter ( 4122): #8      LongPressGestureRecognizer._checkLongPressStart (package:flutter/src/gestures/long_press.dart:304:7)
E/flutter ( 4122): #9      LongPressGestureRecognizer.didExceedDeadline (package:flutter/src/gestures/long_press.dart:253:5)
E/flutter ( 4122): #10     PrimaryPointerGestureRecognizer.didExceedDeadlineWithEvent (package:flutter/src/gestures/recognizer.dart:501:5)
E/flutter ( 4122): #11     PrimaryPointerGestureRecognizer.addAllowedPointer.<anonymous closure> (package:flutter/src/gestures/recognizer.dart:454:40)
E/flutter ( 4122): #12     _rootRun (dart:async/zone.dart:1180:38)
E/flutter ( 4122): #13     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 4122): #14     _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter ( 4122): #15     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1019:23)
E/flutter ( 4122): #16     _rootRun (dart:async/zone.dart:1184:13)
E/flutter ( 4122): #17     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter ( 4122): #18     _CustomZone.bindCallback.<anonymous closure> (dart:async/zone.dart:1003:23)
E/flutter ( 4122): #19     Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:23:15)
E/flutter ( 4122): #20     _Timer._runTimers (dart:isolate-patch/timer_impl.dart:398:19)
E/flutter ( 4122): #21     _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:429:5)
E/flutter ( 4122): #22     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flutter ( 4122): 
}

我还观察到,照片实际上被删除了(如果我点击另一个按钮来制作照片,它将被一张新照片所取代),但是如果用户不拍另一张照片,按钮将不会更新

如果我长按第一张图片,我会得到错误,但如果我按最后一个按钮并生成一张新图片,新图片将替换第一张图片(因为它已被删除)


如果您需要更多详细信息,请询问

我认为这更像是一个评论,但基于我的声誉,我不允许这样做。以下是我认为正在发生的事情:

您有以下说明:
attachments.removeAt(0)
在检查附件[1]中的值之前,删除列表中的第一个元素


我认为您应该检查数组的长度,或者在删除值时使用
attachements[I]=null

似乎我在编写此代码时犯了一个错误。似乎
attachments.removeAt(0)
删除列表的第一个值,第二个元素成为第一个,依此类推。我将代码从
attachments[1]
(在
attachments.removeAt(0)
之后的第二个值成为第一个元素,意思是
attachments[0]
)更改为
if(attachments[0]!=null)
,并且没有更多错误
void removePicture(int i) async {
setState(() {
  if(i==1) {
    attachments.removeAt(0);
    recordedImage1 = null;
    if(attachments[1] != null) {
      attachments[0] = attachments[1];
      recordedImage1 = recordedImage2;
    }
    if(attachments[2] != null) {
      attachments[1] = attachments[2];
      recordedImage2 = recordedImage3;
      recordedImage3 = null;
    }
  }
  if(i==2) {
    recordedImage2 = null;
    attachments.removeAt(1);
    if(attachments[2] != null) {
      attachments[1] = attachments[2];
      recordedImage2 = recordedImage3;
      recordedImage3 = null;
    }
  }
  if(i==3) {
    attachments.removeAt(2);
    recordedImage3 = null;
  }
});