Flutter中使用page_transition包添加转场时的类型错误修复
解决Flutter路由中返回PageTransition提示不是Widget的错误
错误提示翻译
返回类型“PageTransition”不是闭包上下文所需的“Widget”。
问题原因
Flutter的routes配置里,每个路由对应的builder闭包必须返回一个Widget实例。但page_transition: ^2.1.0包中的PageTransition是用于包装路由转场的路由对象,并非直接的Widget,直接返回就会触发类型不匹配错误。
解决方案
方案1:跳转时直接用PageTransition包裹
保留原routes配置不变(/quizpage仍返回DailyQuizScreen),在触发跳转的代码里使用PageTransition实现转场:
Navigator.push( context, PageTransition( type: PageTransitionType.rightToLeft, child: DailyQuizScreen( UserId: userId, email: email, mobile: mobile, name: name, ), ), );
方案2:改用onGenerateRoute配置路由
如果要在路由配置层面统一设置转场,把原来的routes替换成onGenerateRoute,这样可以返回Route类型的PageTransition:
MaterialApp( // 保留其他配置(theme、title等) onGenerateRoute: (settings) { switch (settings.name) { case '/notification_screen': return MaterialPageRoute(builder: (context) => Notification_screen()); case '/': return MaterialPageRoute(builder: (context) => (token != null && !JwtDecoder.isExpired(token)) ? darkmode ? NightSDashboard(token: token) : SDashboard(token: token) : SpalshScreen() ); case '/quizpage': final args = settings.arguments as Map<String, dynamic>; return PageTransition( type: PageTransitionType.rightToLeft, child: DailyQuizScreen( UserId: args['UserId'], email: args['email'], mobile: args['mobile'], name: args['name'], ), ); default: // 处理未匹配的路由 return MaterialPageRoute(builder: (context) => Scaffold(body: Center(child: Text('页面未找到'))) ); } }, );
内容的提问来源于stack exchange,提问作者neeraja
相关产品推荐
相关产品推荐

