턴제 게임 프로그램을 하는 중, 게임 데이터 저장 불러오기 기능을 만드는 중이었다.
Character 객체를 안에는 아이템과 갯수를 저장하는 변수
Map<Item, int> itemList;
가 있었는데
이 값을 저장, 불러오는 과저에서 Cannot modify unmodifiable map 에러가 났다.
변경 불가능한 값을 바꿀수 없다는 내용의 에러이다.
에러가 뜬 위치는 해당 코드
List<Item> keys = itemList.keys.toList();
Item item = keys[index - 1];
itemList[item] = itemList[item]! - 1; // 에러
if (itemList[item] == 0) {
itemList.remove(item);
}
이때 itemList의 value 값을 바꿀 수 없나보다.
아이템 리스트를 처음 초기화 해줄때 const로 해주고 있었다.
this.itemList = const {Item.hp: 1, Item.attack: 1, Item.defense: 1},
당연히 const에 값을 수정하려 했으니 오류뜨는건 당연했다.
const로 선언된 값을 수정를 못하는거지 itemList의 값을 바꾸는건 문제가 없기때문에
Map.from 를 이용해 map을 새로 생성해 넣어준다.
itemList = Map<Item, int>.from(itemList);
void main() {
Map map = const {'one': 1, 'two': 2, 'three': 3};
// 에러
// map['one'] = 1;
map = Map.from(map);
map['one'] = 1;
}