如何解决在Flutter中直接使用Navigator类而不使用MaterialApp初始化
我试图显式地编写一个Navigator,而不是在MaterialApp的幕后使用它,以便更好地了解其工作原理并最终创建高度定制的导航方案。
尽管提供了我知道必须提供的所有字段,但是以下代码返回了Null check operator used on a null value
错误。包含注释的代码后,该代码随后设置了所有可设置的“导航器”字段,仍然会出现错误消息。
import 'package:flutter/material.dart';
void main() {
runApp(CustomNavigation());
}
class CustomNavigation extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Navigator(
initialRoute: '/',onGenerateRoute: (routeSettings) {
return MaterialPageRoute(
builder: (context) => Container(
color: Colors.red,));
},onUnknownRoute: (routeSettings) =>
MaterialPageRoute(builder: (BuildContext context) {
return Container(
color: Colors.green,);
}),// key: GlobalKey(),// onGenerateInitialRoutes: (state,string) => [
// MaterialPageRoute(builder: (BuildContext context) {
// return Container(
// color: Colors.white,// );
// }),// ],// onPopPage: (route,result) => true,// pages: [
// MaterialPage(
// child: Container(
// color: Colors.purple,// ))
// ],// observers: [NavigatorObserver()],// reportsRouteUpdateToEngine: true,// restorationScopeId: 'I am a string',// transitionDelegate: DefaultTransitionDelegate(),);
}
}
什么空值导致此错误消息?
解决方法
知道了! Overlay小部件(包含导航器管理的用于创建导航体验的路线,其中在叠加层中较高的路径在叠加层中较低的路径之后被绘制)需要textDirection信息!空值是指在呈现叠加层时请求的Directionlity.of(context)
。添加“方向性”小部件即可解决此问题,如此处的固定代码所示:
import 'package:flutter/material.dart';
void main() {
runApp(CustomNavigation());
}
class CustomNavigation extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Directionality(
textDirection: TextDirection.ltr,child: Navigator(
onGenerateRoute: (routeSettings) {
return MaterialPageRoute(
builder: (context) => Container(
color: Colors.red,));
}),);
}
}
(要将这个用于空值调试的最小工作示例变成有用的/自定义导航,请在onGenerateRoute的routeSettings.name
上使用switch语句,并编写一个扩展PageRoute的类以代替MaterialPageRoute来使用。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。