Android 사용시 자주 사용되는 게 같은 Task 내에서 onActivityForResult 를 사용하는 편이죠. 

물론 안드로이드내에서는 호출하는 쪽에서는 startActivityForResult 를 하고 다음 엑티비티에서 할일 하고 값을 다시 보낼때 onActivityResult 를 통해서 값을 받습니다.


관련 글은 http://liveonthekeyboard.tistory.com/150 보시면 됩니다. 


Flutter 내에서는 라우터를 이용을 할텐데요 그럴경우 주고 받는 걸 어떻게 하는 지 볼게요. 


우선 A -> B -> A 라고 가정하면

A 에서 라우팅을 

Map results =  await Navigator.of(context).push(new MaterialPageRoute<dynamic>(
    builder: (BuildContext context) {
      return new SelectionPage();
    },
  ));

라고 Map 형태로 Future 함수로 받습니다. await 도 넣어야 합니다. 


그리고 B 함수에서 pop 을 할때 값을 보내줍니다. 

void _selectItem(String value, BuildContext context) {
    Navigator.of(context).pop({'selection':value});
  }

이렇게 pop 할때 value 값을 보내줍니다.

그러면 받는 A 쪽에서는 마지막으로

Future _buttonTapped() async {
  Map results =  await Navigator.of(context).push(new MaterialPageRoute<dynamic>(
    builder: (BuildContext context) {
      return new SelectionPage();
    },
  ));
 
  if (results != null && results.containsKey('selection')) {
    setState(() {
      _selection = results['selection'];
    });
  }
}

이렇게 result 로 값을 체크해서 setState 할수가 있습니다. 


이상으로 flutter에서 onActivityForResult 기능 구현에 대해서 살펴보았습니다.





+ Recent posts