Flutter调用Navigator.popUntil()返回首页时出现黑屏问题求助
问题原因
你在router.dart的generateRoute方法中创建CupertinoPageRoute实例时,没有将方法入参的settings传递给路由实例,导致所有生成的路由settings.name属性为空。ModalRoute.withName(router.home)无法匹配到栈中的首页路由,Navigator.popUntil会持续弹出路由直到整个路由栈为空,最终出现黑屏。
连续两次pop可以正常返回的原因是你明确控制了弹出次数,刚好可以把page2、page1依次弹出,停在首页,不会触发栈空的情况。
修复方案
修改router.dart中的generateRoute方法,给所有返回的CupertinoPageRoute增加settings参数赋值即可:
Route<dynamic> generateRoute(RouteSettings settings) { switch (settings.name) { case home: // 新增settings: settings参数 return CupertinoPageRoute(builder: (context) => const Home(), settings: settings); case page1: return CupertinoPageRoute(builder: (context) => const Page1(), settings: settings); case page2: return CupertinoPageRoute(builder: (context) => const Page2(), settings: settings); default: print('Undefined view'); return CupertinoPageRoute( builder: (context) => UndefinedView( name: settings.name ?? 'No Name', ), settings: settings); } }
修改完成后重新运行项目,popUntil就可以正常匹配到首页路由,点击返回按钮可直接回到首页,不会再出现黑屏问题。
内容的提问来源于stack exchange,提问作者uniquenamehere
相关产品推荐
相关产品推荐

