You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:50:24