인프런 커뮤니티 질문&답변
Navigator로 argument를 이용하여 map 객체를 넘겨서 쓰기
해결된 질문
작성
·
365
1
네비게이터를 공부하는 중에
리스트나 맵 데이터를 넘겨서 출력해보려고 했습니다
일단 다섯개의 나이 이름 값이 들어있는 List<Map<String, String>> map이라는 데이터를 만들고
[
{
"age" : "23",
"name" : "jessi"
},
...
]
homescreen에 5개의 컨테이너를 만들어 map[0]['age'] 이런 형식으로 각 값을 출력하는데는 성공했습니다.
이제
homescreen에서 secondpage로 map 데이터를 넘기려고 하는데
arguments에 해당 맵 데이터 ( map[0] )를 넘기면 _internalLinkedHashMap으로 타입이 바뀌어서 사용할수 없게됩니다.
그래서 이것을 다시 리스트 형태로 넘기려고 시도해봤습니다.
settings: RouteSettings(arguments: [{'age' : '${viewList[0]['age']}',
'name' : '${viewList[0]['name']}',
}])
//I/flutter ( 3333): [{age: 15, name: rabet}]
//I/flutter ( 3333): List<Map<String, String>>
이렇게하면 runtimetype도 List Map 으로 나와서 사용 가능할 줄 알았는데
키값을 기준으로 value를 출력하려고해도
Error: The operator '[]' isn't defined for the class 'Object?'.
- 'Object' is from 'dart:core'.
이런 오류가 뜨면서 실행되지 않습니다.
arguments: [
{
'age' : '${viewList[0]['age']}',
'name' : '${viewList[0]['name']}',
}
].toList()
뒤에 리스트로 변환해 봤지만 증상은 같았습니다
아마 데이터가 넘어가면서 타입이 어떻게 바뀐것 같은데 ...
이런 데이터를 넘길때는 다른 방식을 써야할까요?
답변 1
1
안녕하세요.
arguments 파라미터를 다른 화면으로 넘길때는 arguments에 기본으로 Object 타입이 적용됩니다. 왜냐하면 push를 하기전에 어떤 타입이 넘어갈지 알 수 없기때문이죠.
final settings = ModalRoute.of(context)?.settings;
print((settings?.arguments as List<Map<String, dynamic>>)[0]['age'])
위처럼 타입을 한번 캐스팅해주고 작업하시면 문제가 없으실겁니다.
어려움이 있으시면 언제든 문의주세요!






감사합니다. 타입을 바꿀떈 as 타입을 쓰는군요.