Flutter项目运行/构建无变化,仅热重载后导航功能正常
问题原因与解决方案
我太懂你这种困扰了——正常启动或构建应用时,首页的跳转按钮完全没反应,非得热重载之后才能正常跳转到第二页。这其实是Flutter使用命名路由时的一个常见小细节问题。
问题到底出在哪?
你的代码里虽然给MaterialApp注册了路由表routes,但首页HomePage是通过home属性直接设置的,这就导致这个页面并没有被纳入Flutter的路由栈体系中。它的context没法正确关联到你定义的命名路由规则,所以点击按钮时找不到/SecondPage对应的路由。而热重载时,Flutter会重新构建整个Widget树,此时HomePage的context会被正确绑定到路由体系,跳转功能也就正常工作了。
两种快速修复方案
方案一:把首页也加入路由表,用initialRoute替代home
修改main函数里的MaterialApp配置,把HomePage加入路由表,然后用initialRoute指定初始页面:
void main(){ runApp(new MaterialApp( initialRoute: "/", // 指定应用启动的初始路由 routes: <String,WidgetBuilder>{ "/":(BuildContext context) => new HomePage(), // 将首页加入路由表 "/SecondPage":(BuildContext context) => new SecondPage() } )); }
这样所有页面都是通过路由栈初始化的,context能正确识别路由表中的规则,不管是正常运行还是构建应用,跳转功能都能直接生效。
方案二:直接使用Navigator.push跳转(不依赖命名路由)
如果你不想改动路由表,也可以把按钮的点击事件改成直接跳转页面的写法:
onPressed: () { Navigator.of(context).push( MaterialPageRoute(builder: (context) => SecondPage()) ); },
这种方式不需要依赖命名路由,直接通过MaterialPageRoute创建页面跳转,context能正确识别跳转逻辑,同样可以解决问题。
验证效果
选其中一种方式修改代码后,重新运行或构建应用,首页的按钮应该就能直接跳转到第二页了,再也不用依赖热重载啦。
内容的提问来源于stack exchange,提问作者Boron
相关产品推荐
相关产品推荐

