Flutter中ModalRoute取arguments转int每次返回null问题求解
问题原因
- 你将获取路由参数的代码写在了
MyApp组件的build方法中,ModalRoute.of(context)需要基于包含MaterialApp的上下文才能获取到路由实例,而MyApp是MaterialApp的父组件,对应上下文尚未挂载路由相关能力,因此返回null。 - 你通过
Navigator.pushNamed传递的arguments: 60是绑定在/ogrenciListesi路由上的,只有进入对应路由页面后,在目标页面的上下文中才能获取到该参数,根组件MyApp无法获取其他路由的参数。
修复方案
- 删除
MyApp类build方法中获取参数的冗余代码:
// 需删除的代码 int elemanSayisi = ModalRoute.of(context)!.settings.arguments as int; print('Eleman Sayısı Alındı : $elemanSayisi');
- 在目标页面
OgrenciListesi的build方法中编写参数获取逻辑:
class OgrenciListesi extends StatelessWidget { const OgrenciListesi({Key? key}) : super(key: key); @override Widget build(BuildContext context) { // 在此处获取对应路由的参数 int elemanSayisi = ModalRoute.of(context)!.settings.arguments as int; print('Eleman Sayısı Alındı : $elemanSayisi'); return Scaffold( // 你的页面业务代码 ); } }
可选优化
为避免参数为空导致的类型强转崩溃,可以增加判空与缺省值处理:
int? elemanSayisi = ModalRoute.of(context)?.settings.arguments as int?; int finalSayi = elemanSayisi ?? 0; // 为空时默认赋值0
内容的提问来源于stack exchange,提问作者mehmettalhairmak
相关产品推荐
相关产品推荐

