Flutter 在颤振(初始化)中不使用MaterialApp直接使用Navigator类

Flutter 在颤振(初始化)中不使用MaterialApp直接使用Navigator类,flutter,flutter-navigation,Flutter,Flutter Navigation,为了更好地理解导航器的工作原理,最终能够创建高度定制的导航方案,我尝试显式地编写导航器代码,而不是使用MaterialApp引擎盖下的导航器 下面的代码返回一个用于空值错误的空检查运算符,尽管提供了我知道需要提供的所有字段。当包含注释代码时(随后设置所有可设置的导航器字段),仍然会出现错误消息 import 'package:flutter/material.dart'; void main() { runApp(CustomNavigation()); } class CustomNa

为了更好地理解导航器的工作原理,最终能够创建高度定制的导航方案,我尝试显式地编写导航器代码,而不是使用MaterialApp引擎盖下的导航器

下面的代码返回一个用于空值错误的
空检查运算符,尽管提供了我知道需要提供的所有字段。当包含注释代码时(随后设置所有可设置的导航器字段),仍然会出现错误消息

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(),
    );
  }
}

什么空值导致此错误消息?

明白了!覆盖窗口小部件(包含导航器管理的路线,以创建导航体验,覆盖中较高的路线绘制在覆盖中较低的路线之后)需要文本方向信息!空值表示呈现覆盖时请求的(上下文)
方向性。添加方向性小部件可解决此问题,如此处的固定代码所示:

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。)

据我所知,Navigator类仍在navigation 2.0中使用(在路由器的引擎盖下或直接)。导航器类中的Pages类和Pages参数是新的(请参阅您链接的文章中的“Pages”部分和)。无论是使用pages参数还是onGenerateRoute,都会出现上面的空值错误。我想我最好尝试使用更熟悉的导航系统来修复它,以减少因误解导航2.0而混淆变量的可能性!