3

我正在使用 MaterialApp 中的 onGenerateRoute 在我的颤振应用程序中实现导航。

对于其中一条路线,当我按下 Flutter 在 Appbar 中提供的后退按钮时出现此错误。

E/flutter (22996): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理异常:断言失败:布尔表达式不能为空

E/flutter (22996): #0 ModalRoute.willPop (package:flutter/src/widgets/routes.dart) E/flutter (22996):

E/flutter (22996): #1 NavigatorState.maybePop (package:flutter/src/widgets/navigator.dart:1964:57) E/flutter (22996):

E/flutter (22996): #2 Navigator.maybePop (package:flutter/src/widgets/navigator.dart:1291:34)

E/flutter (22996):#3 BackButton.build。(包:flutter/src/material/back_button.dart:91:19)

你能帮我理解什么是错的吗?

我的路线设置 ->

  Route<dynamic> routes(RouteSettings settings) {
    switch (settings.name) {
      case '/':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return HomePage();
          },
        );
        break;
      case '/contactlist':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return FriendsList();
          },
        );
        break;
      case '/ChatroomFormAdd':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return const ChatroomInfo(
                mode: 'Add');
          },
        );
        break;
      case '/ChatroomFormEdit':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return const ChatroomInfo(
                mode: 'Edit');
          },
        );
        break;
      case '/ChatroomFormView':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return const ChatroomInfo(
                mode: 'View');
          },
        );
        break;
      case '/ChatroomFormApprove':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return const ChatroomInfo(
                mode: 'Approve');
          },
        );
        break;
      case '/errorscreen':
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return ErrorScreen();
          },
        );
        break;
      default:
        return MaterialPageRoute<dynamic>(
          builder: (BuildContext context) {
            return ChatDetail(chatroomID: chatroomID);
          },
        );
        break;
    }
  }

当我从以下路线返回时,后退按钮适用于预期的所有路线:

Navigator.of(context).pushNamed('/ChatroomFormView');
4

1 回答 1

2

你用过WillPopScope小部件吗?如果是这样,您需要提供一个返回Future<boolean>参数onWillPop的函数。

WillPopScope(
      onWillPop: () { 
        //need to return Future<bool> here
      }
}
于 2019-06-02T09:32:34.233 回答