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
相关产品推荐
相关产品推荐

