在Flutter中startActivityForResult等
2019-05-28 本文已影响65人
三也视界
在Flutter中startActivityForResult等价于什么
在Flutter中可以使用Navigator类获取从当前Route返回到上一个Route时附带的数据信息。只需要对push返回的Future对象做一个await操作。关于Future,await,async不太清楚可以参阅官方文档,他们用来在Dart中实现异步同步功能。
比如我们需要启动一个位置信息界面让用户选择他们所处的位置,我们可以写下面的代码:
Map coordinates = await Navigator.of(context).pushNamed('/location');
此处通过pushNamed方法将屏幕上的当前界面跳转到了一个位置信息界面(假设我们已经配置好了/location对应的Route)。同时pushNamed会返回一个Future对象,我们需要将该Future对象作为await的表达式。
然后在我们的显示位置信息的界面中当用户选择好位置后我们就通过pop当前的Route出栈来实现返回上一个界面的效果,并同时带上需要返回给上一个界面的数据信息:
Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});
pop的参数就是返回给上一个界面的数据信息,这里是一个Map类型的数据。表示位置信息的Route出栈后,上面的await表达式将被唤醒,并且接收到传递过来的Map数据。
小结: 在Flutter中使用Navigator向Route Stack中push一个Route时返回的是一个Future对象,通过await表达式可以实现等待界面返回的效果,并且Navigator从Route Stack中pop一个Route时可以带上参数,此时带的参数就会返回给唤醒的await表达式。进而实现类似startActivityForResult中的当前界面返回并传递参数给上一个界面的效果。