I am trying to remove map item based on key. So, I read documentation about using .remove(key). However it return error. Here is my code
Future<bool> UpdateFilter() async{
_selectedFilter['category'] = _category!=null ? _category : '';
_selectedFilter['subCategory'] = _subCategory!=null ? _subCategory : '';
_selectedFilter['type'] = _type;
_selectedFilter['price'] = _price.end.round() > 0 ? [_price.start.round(),_price.end.round()] : [];
_selectedFilter['bedroom'] = _bedroom.round();
_selectedFilter['bathroom'] = _bathroom.round();
_selectedFilter['lt'] = _landSize.end.round() > 0 ? [_landSize.start.round(),_landSize.end.round()] : [];
_selectedFilter['lb'] = _buildingSize.end.round() > 0 ? [_buildingSize.start.round(),_buildingSize.end.round()] : [];
//check for empty values then remove from filter
_selectedFilter.forEach((key, value) {
if(_selectedFilter[key].runtimeType == int && _selectedFilter[key]==0){
_selectedFilter.remove(key); ===> does not work, consist errors
}
else if(_selectedFilter[key].isEmpty){
_selectedFilter.remove(key); ===> does not work, consist errors
}
});
_selectedFilter.remove('bedroom'); ===> it works without foreach (manually), for testing purpose
_selectedFilter.remove('bathroom'); ===> it works without foreach (manually), for testing purpose
return true;
}
Here is the error logs
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: Concurrent modification during iteration: _LinkedHashMap len:7. #0 _CompactIterator.moveNext (dart:collection-patch/compact_hash.dart:615:7) #1 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:537:15) #2 _SearchState.UpdateFilter (package:rumahkita/pages/search.dart:65:21) #3 _SearchState.build.. (package:rumahkita/pages/search.dart:429:23) #4 State.setState (package:flutter/src/widgets/framework.dart:1121:30) #5 _SearchState.build. (package:rumahkita/pages/search.dart:428:21) #6 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21) #7 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:198:24) #8 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11) #9 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5) #10 Bas<…>
Does anyone know why it could happen? It works when I tried to do manual remove but if it is inside loop function, it cause an error.