Flutter路由名称异常:杀进程显示Click,刷新触发默认路由
解决Flutter应用重启后刷新进入路由默认分支的问题
问题原因
你的MaterialApp通过home: login()设置了初始页面,但Flutter中home对应的默认路由名称是"/",而你的Routes.generateRoute方法里没有匹配这个路由分支。当应用刷新(比如热重载、进程恢复后路由栈重建)时,系统会尝试匹配当前路由名称"/",找不到对应分支就会进入default逻辑,显示"No Rote defined"。而杀死进程重启时直接显示login页面,是因为home属性直接初始化了该页面,此时还没触发路由匹配逻辑。
修复方案
方案一:添加默认路由"/"的匹配分支
修改Routes类的generateRoute方法,把"/"和RoutesName.login归为同一分支,这样不管是初始加载还是刷新时的路由匹配都能正确指向login页面:
class Routes{ static Route<dynamic> generateRoute(RouteSettings settings){ switch(settings.name){ case "/": // 新增默认路由匹配 case RoutesName.login: return MaterialPageRoute(builder: (context)=>login()); case RoutesName.home: return MaterialPageRoute(builder: (context)=>home_screen()); default: return MaterialPageRoute(builder: (context){ return Scaffold( body: Center(child: Text("No Route defined"),), // 修正拼写错误:Rote -> Route ); }); } } }
方案二:改用initialRoute替代home属性
移除MaterialApp的home属性,改用initialRoute指定初始路由为你定义的RoutesName.login,这样初始路由的名称就是"login",不会出现未匹配的"/"路由:
return const MaterialApp( debugShowCheckedModeBanner: false, themeMode: ThemeMode.dark, initialRoute: RoutesName.login, // 替换home为initialRoute onGenerateRoute: Routes.generateRoute, );
额外小修正
注意到你default分支里的文本拼写错误,把"No Rote defined"改成"No Route defined",避免语义错误。
内容的提问来源于stack exchange,提问作者Muhammad Zohaib
相关产品推荐
相关产品推荐

