Наблюдатель навигатора наблюдает событие pu sh при открытии диалога - PullRequest
0 голосов
/ 24 апреля 2020

В этом случае я хочу добавить willpopscope в свое приложение, и я обнаружил, что иногда оно не может корректно всплыть, поэтому я отладил код и обнаружил, что наблюдатель наблюдает событие pu sh при открытии диалога, я думаю, что странно.

Это мой наблюдатель

class MyNavigatorObserver extends NavigatorObserver {
  List<Route<dynamic>> routeStack = List();

  void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
    previous = previousRoute;
    current = route;
    routeStack?.add(route);
    print('didPush');
    print(routeStack.length);
    print(routeStack.sublist(0));
  }

  void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
    if (routeStack.length > 0) {
      routeStack?.removeLast();
      print('didPop');
      print(routeStack.length);
      print(routeStack.sublist(0));
    }
  }

  @override
  void didRemove(Route route, Route previousRoute) {
    routeStack?.removeLast();
  }

  @override
  void didReplace({Route newRoute, Route oldRoute}) {
    routeStack?.removeLast();
    routeStack?.add(newRoute);
  }
}

, и я использую его на главном классе страницы приложения

WillPopScope(
          ...
        child: Navigator(
          observers: [MyNavigatorObserver],
          key: _navigator,
          onGenerateRoute: (RouteSettings settings) {
             ...
          }
          ...
          if (page.parentRoute != null) {
            return MaterialPageRoute(
            ...
           );
          } else {
          NaviArguments arg = settings.arguments;
           return PageRouteBuilder(
            ...
          );
       }
     },
   ),
 ),

и когда я запускаю действие, чтобы показать dialog

void showProfileChildView(
  BuildContext context, {
  ProfileChildBuilder child,
  ProfileViewState state,
}) {
  showGeneralDialog(
    context: context,
    barrierDismissible: false,
    transitionDuration: Duration(milliseconds: 150),
    pageBuilder: (BuildContext context, Animation<double> animation, _) {
      var scaleAnimation = Tween(
        begin: Offset(0.0, 1.0),
        end: Offset(0.0, 0.0),
      ).chain(CurveTween(curve: Curves.easeOutExpo)).animate(animation);
      return SlideTransition(
        position: scaleAnimation,
        child: ProfileChildView(
          child: child,
          profileViewState: state,
        ),
      );
    },
    useRootNavigator: false,
  );
}

распечатывает это

I/flutter (25147): didPush
I/flutter (25147): 1
I/flutter (25147): [_DialogRoute<dynamic>(RouteSettings("null", null), animation: AnimationController#48fc4(▶ 0.000; for _DialogRoute<dynamic>))]

В других случаях, когда я запускаю другое диалоговое окно (не на всю страницу), оно не вызывает событие pu sh потому что один на всю страницу один не на всю страницу? может кто-нибудь сказать мне, почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...