강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

code11님의 프로필 이미지
code11

작성한 질문수

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

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'])

위처럼 타입을 한번 캐스팅해주고 작업하시면 문제가 없으실겁니다.

어려움이 있으시면 언제든 문의주세요!

code11님의 프로필 이미지
code11
질문자

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

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요. as는 타입을 바꾸는게 아니라 "이 타입일거다"라고 가정하는겁니다! 실제로 런타임에 해당 타입이 아니면 에러가 납니다.

code11님의 프로필 이미지
code11
질문자

그러면 런타임 타입도 정확히 파악해야겠군요 감사합니다.;>

code11님의 프로필 이미지
code11

작성한 질문수

질문하기