【问题标题】:Concurrent modification during iteration while trying to remove object from a list尝试从列表中删除对象时在迭代期间进行并发修改
【发布时间】:2019-06-06 14:46:21
【问题描述】:

我正在尝试在多个列表中循环,最后比较它们的名称,如果它们不匹配,则将其从列表中删除......

但出现此错误:

迭代中的并发修改:

虽然我已经复制了原始列表只是为了避免这个错误..但仍然得到它..我尝试的是:

globals.filteredPollsList = pollsList;
pollsList.forEach( (p) {
  for (var e in entitiesList) {
    print(e.name);
    for (var entity in entitiesFilter) {
      print(entity);
      print(e.name);
      if (e.name != entity && p.entityId != e.id) {
        print('true');
        globals.filteredPollsList.remove(p);
      }
    }
  }
});

但出现此错误:

flutter: ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
flutter: The following ConcurrentModificationError was thrown while handling a gesture:
flutter: Concurrent modification during iteration: Instance(length:8) of '_GrowableList'.
flutter:
flutter: When the exception was thrown, this was the stack:
flutter: #0      List.forEach (dart:core/runtime/libgrowable_array.dart:279:36)
flutter: #1      _ShapedWidgetState.filterPoll (package:moi_polls_app/pages/home.page.dart:1484:15)
flutter: #2      _ShapedWidgetState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:moi_polls_app/pages/home.page.dart:1896:45)
flutter: #3      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
flutter: #4      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
flutter: #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
flutter: #6      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
flutter: #7      TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:175:7)
flutter: #8      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9)
flutter: #9      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:73:12)
flutter: #10     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11)
flutter: #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19)
flutter: #12     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:158:22)
flutter: #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7)
flutter: #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:101:7)
flutter: #15     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7)
flutter: #16     _invoke1 (dart:ui/hooks.dart:168:13)
flutter: #17     _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)
flutter:
flutter: Handler: onTap
flutter: Recognizer:
flutter:   TapGestureRecognizer#e99b3(debugOwner: GestureDetector, state: possible, won arena, finalPosition:
flutter:   Offset(283.3, 608.7), sent tap down)

如何解决?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    如果您想复制您的列表,请使用:

    globals.filteredPollsList = List.from(pollsList);
    

    【讨论】:

    • 这是因为设置 globals.filteredPollList = pollsList 不会创建新列表,而只是将 globals.filteredPollList 指向用于 pollsList 的相同内存地址?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2017-08-21
    • 2014-09-02
    • 1970-01-01
    • 2021-04-09
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多