개발아빠/Flutter

플러터(Flutter) 화면 이동 시 데이터 넘기기

육아개발아빠 2020. 9. 29. 10:31

안녕하세요. 육아개발아빠입니다.

 

오늘은 지난번에 포스팅 했던 내용에서 이어서 화면 간 데이터를 넘기는 방법에 대해서 포스팅 해보려고 합니다. 

 

혹시 이전 글을 보지 않으셨다면 여기로 갔다오세요^^

2020/09/28 - [개발아빠/Flutter] - 플러터(Flutter) 화면 이동을 위한 Router(라우터) 설정 하기

 

플러터(Flutter) 화면 이동을 위한 Router(라우터) 설정 하기

안녕하세요. 육아개발아빠입니다. 지금은 개발아빠로 변신하여 포스팅을 해봅니다. 개발아빠가 밥벌이 하고 있는건 '안드로이드' 인데, 최근 가장 관심가고 있는 것은 'Flutter' 입니다. Flutter는 ��

childcare-daddy.tistory.com

지난 포스팅에서 넓은 집으로 이사해서 방이 몇개나 생긴 상태인데, 

방에 있는 우리 아이들이 공부하고 있는데, 과일이라고 하나 들고 가야하는데 매번 빈손으로 왔다 갔다 하고 있네요!

또 다른 자아인 육아 아빠로써 이러면 안되지.. 해서 오늘은 과일을 들고 방에 들어가 볼려고 해요~

class _FirstRoomState extends State<FirstRoom> {

  String fruits;
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('첫번째 방이에요'),
      ),
      body: Container(
        child: Center(
            child : Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text('접시: $fruits'),
                RaisedButton(
                  child: Text('Exit!!'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                )
              ],
            )
        ),
      ),
    );
  }
}

방에서 우리 아이는 접시 위에 과일을 기다리고 있네요!

이제 방으로 들어갈께요~!

 

으앙~ 빈손으로 방으로 들어왔어요. 접시는 null이네요. 아이가 다시 과일을 달라고하네요~

 

사과를 꺼내서 다시 방으로 들어갑니다.

RaisedButton(
	child: Text('First Room'),
      onPressed: () {
        Navigator.of(context).pushNamed(Routes.firstRoom, 
           arguments: {"fruits" : "apple" });
      },
),

pushNamed에 arguments를 추가하면 데이터를 넘길 수 있어요~

안드로이드로 비교해보면 Intent라는 키워드가 생각나네요~

 

잉! 그래도 접시가 비어 있네요? 분명 저는 시키는대로 보냈는데 어떻게 된거죠?

아~ 저는 줬지만 아이가 받지를 않았네요.

이것도 안드로이드에서 getIntent().getString 이런 키워드가 생각나네요~

 

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();

    final Map arguments = ModalRoute.of(context).settings.arguments as Map;
    if (arguments != null) {
      fruits = arguments["fruits"] as String;
    }
  }

Flutter 생명 주기에 대해서 설명을 한적이 없기 때문에, 해당 메소드가 생소 할수 있겠지만, 일단은 개의치 않고 데이터를 받는다.

 

class _FirstRoomState extends State<FirstRoom> {

  String fruits;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();

    final Map arguments = ModalRoute.of(context).settings.arguments as Map;
    if (arguments != null) {
      fruits = arguments["fruits"] as String;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('첫번째 방이에요'),
      ),
      body: Container(
        child: Center(
            child : Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text('접시: $fruits'),
                RaisedButton(
                  child: Text('Exit!!'),
                  onPressed: () {
                    Navigator.of(context).pop();
                  },
                )
              ],
            )
        ),
      ),
    );
  }
}

풀 코드에요~

 

자 이제 보내는 사람과 받은 사람 모두 준비가 되었으니 전달이 잘 되는지 볼께요~

 

와 드디어 방에 있는 아이 접시에 사과를 전달하게 되었습니다!! 

 

이렇게 화면을 전달하는 키워드는 argument 입니다. 기억해주세요!