Line data Source code
1 : import 'package:flutter/material.dart'; 2 : import 'package:rxdart/rxdart.dart'; 3 : 4 : class PalRouteObserver { 5 : 6 0 : Stream<RouteSettings> get routeSettings => throw "not implemented yet"; 7 : } 8 : 9 : 10 : class PalNavigatorObserver extends RouteObserver<PageRoute<dynamic>> implements PalRouteObserver { 11 : 12 : static PalNavigatorObserver _instance; 13 : 14 : Subject<RouteSettings> _routeSettingsSubject = BehaviorSubject(); 15 : 16 : Subject<PageRoute> _routeSubject = BehaviorSubject(); 17 : 18 7 : PalNavigatorObserver._(); 19 : 20 7 : factory PalNavigatorObserver.instance() { 21 : if(_instance == null) { 22 7 : _instance = PalNavigatorObserver._(); 23 : } 24 : return _instance; 25 : } 26 : 27 21 : _notify(RouteSettings route) => _routeSettingsSubject.add(route); 28 : 29 21 : _notifyRoute(PageRoute route) => _routeSubject.add(route); 30 : 31 7 : @override 32 : void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { 33 7 : super.didPush(route, previousRoute); 34 7 : if (route is PageRoute) { 35 14 : _notify(route.settings); 36 7 : _notifyRoute(route); 37 : } 38 : } 39 : 40 0 : @override 41 : void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) { 42 0 : super.didReplace(newRoute: newRoute, oldRoute: oldRoute); 43 0 : if (newRoute is PageRoute) { 44 0 : _notify(newRoute.settings); 45 0 : _notifyRoute(newRoute); 46 : } 47 : } 48 : 49 1 : @override 50 : void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { 51 1 : super.didPop(route, previousRoute); 52 2 : if (previousRoute is PageRoute && route is PageRoute) { 53 2 : _notify(previousRoute.settings); 54 1 : _notifyRoute(previousRoute); 55 : } 56 : } 57 : 58 9 : Stream<RouteSettings> get routeSettings => _routeSettingsSubject.asBroadcastStream(); 59 : 60 6 : Stream<PageRoute> get route => _routeSubject.asBroadcastStream(); 61 : }