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

Flutter返回按钮按下后如何重建前序页面?

2. 返回时完全重建首页问题

原.then回调仅重置状态,无法实现页面完全重建(销毁原实例并创建新实例)。正确做法是在返回后用Navigator.pushReplacement替换当前页面:

修改首页按钮的点击逻辑:

ElevatedButton(
  onPressed: () {
    Navigator.pushNamed(
      context,
      '/list_screen',
      arguments: noOfItems,
    ).then((_) {
      // 替换当前页面为新的首页实例,彻底重置状态
      Navigator.pushReplacement(
        context,
        MaterialPageRoute(builder: (_) => const MyStatefulWidget()),
      );
    });
  },
  child: const Text('Go'),
)

额外优化:参数传递更安全

原NextScreen通过重复解析路由参数的方式存在风险,改为构造函数传参更可靠:

class NextScreen extends StatefulWidget {
  final int itemCount;
  const NextScreen({super.key, required this.itemCount});

  @override
  State<NextScreen> createState() => _NextScreenState();
}

class _NextScreenState extends State<NextScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('ListView with ${widget.itemCount} entries')),
      body: ListView.separated(
        itemBuilder: (_, index) => Center(
          child: Padding(
            padding: const EdgeInsets.symmetric(vertical: 8),
            child: Text('Item ${index + 1}'),
          ),
        ),
        separatorBuilder: (_, __) => const Divider(),
        itemCount: widget.itemCount,
      ),
    );
  }
}

同步更新路由配置:

routes: {
  '/list_screen': (ctx) {
    final count = ModalRoute.of(ctx)?.settings.arguments as int;
    return NextScreen(itemCount: count);
  },
},

内容的提问来源于stack exchange,提问作者Twisha Solgama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:19:53