Flutter双页面:已用Navigator.pop返回数值,首页面如何编写处理逻辑?
Flutter 从第二个页面返回数值的处理逻辑
在第一个页面打开第二个页面时,需要通过async/await配合Navigator.push来接收返回值,具体实现如下:
打开第二个页面并接收返回值:
用await获取Navigator.push的返回结果,这个结果就是第二个页面pop时传入的数值:// 示例:跳转到SecondPage页面 final result = await Navigator.push( context, MaterialPageRoute(builder: (context) => const SecondPage()), );处理返回的数值:
直接使用返回的result做业务逻辑,比如更新页面状态、打印数值等,同时注意处理result为null的情况(比如用户直接按系统返回键):if (result != null) { // 这里的result就是第二个页面返回的数值 print('收到的返回值:$result'); // 示例:更新页面状态 setState(() { receivedNumber = result; }); }
完整示例代码
// 第一个页面 class FirstPage extends StatefulWidget { const FirstPage({super.key}); @override State<FirstPage> createState() => _FirstPageState(); } class _FirstPageState extends State<FirstPage> { int? receivedNumber; Future<void> _openSecondPage() async { final result = await Navigator.push( context, MaterialPageRoute(builder: (context) => const SecondPage()), ); // 可根据实际数值类型做判断,避免类型错误 if (result is int) { setState(() { receivedNumber = result; }); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('第一个页面')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(receivedNumber != null ? '收到的数值:$receivedNumber' : '暂无返回值'), ElevatedButton( onPressed: _openSecondPage, child: const Text('打开第二个页面'), ), ], ), ), ); } } // 第二个页面 class SecondPage extends StatelessWidget { const SecondPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('第二个页面')), body: Center( child: ElevatedButton( onPressed: () { // 返回数值示例:100 Navigator.pop(context, 100); }, child: const Text('返回数值'), ), ), ); } }
注意事项
- 确保第二个页面
pop传入的数值类型和第一个页面接收时的类型匹配,避免类型转换错误 - 要考虑用户未主动返回数值的场景(比如按系统返回键),此时
result会是null,需做判空处理
内容的提问来源于stack exchange,提问作者Happy
相关产品推荐
相关产品推荐

