diff --git a/flutter_modular/example/lib/app/search/presenter/pages/details_page.dart b/flutter_modular/example/lib/app/search/presenter/pages/details_page.dart index 6cee6182..5168c736 100644 --- a/flutter_modular/example/lib/app/search/presenter/pages/details_page.dart +++ b/flutter_modular/example/lib/app/search/presenter/pages/details_page.dart @@ -1,13 +1,12 @@ -import 'package:flutter/material.dart'; - import 'package:example/app/search/domain/entities/result.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_modular/flutter_modular.dart'; class DetailsPage extends StatefulWidget { - final Result result; + final Result? result; const DetailsPage({ Key? key, - required this.result, + this.result, }) : super(key: key); @override _DetailsPageState createState() => _DetailsPageState(); @@ -19,22 +18,30 @@ class _DetailsPageState extends State { print(Modular.args?.queryParams['id']); return Scaffold( appBar: AppBar( - title: Text(widget.result.nickname), + title: Text( + widget.result != null ? widget.result!.nickname : 'Make a search'), ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Hero( - tag: widget.result.image, - child: CircleAvatar( - backgroundImage: NetworkImage(widget.result.image), + body: widget.result != null + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Hero( + tag: widget.result!.image, + child: CircleAvatar( + backgroundImage: NetworkImage(widget.result!.image), + ), + ), + Text(widget.result!.nickname), + ], + ), + ) + : Center( + child: ElevatedButton( + onPressed: () => Modular.to.pushReplacementNamed('/'), + child: Text('Make a search'), ), ), - Text(widget.result.nickname), - ], - ), - ), ); } } diff --git a/flutter_modular/example/lib/app/search/presenter/pages/guardt.dart b/flutter_modular/example/lib/app/search/presenter/pages/guardt.dart index 33c5182f..4670e39a 100644 --- a/flutter_modular/example/lib/app/search/presenter/pages/guardt.dart +++ b/flutter_modular/example/lib/app/search/presenter/pages/guardt.dart @@ -1,9 +1,10 @@ import 'package:flutter_modular/flutter_modular.dart'; class GuardT extends RouteGuard { + String? guardedRoute; GuardT({this.guardedRoute}) : super(guardedRoute); - + @override Future canActivate(String path, ModularRoute router) async { print(Modular.args); diff --git a/flutter_modular/example/pubspec.yaml b/flutter_modular/example/pubspec.yaml index f6fc7db9..1698b95c 100644 --- a/flutter_modular/example/pubspec.yaml +++ b/flutter_modular/example/pubspec.yaml @@ -60,6 +60,10 @@ vars: scripts: mobx_build: $clean & $get & $runner build --delete-conflicting-outputs mobx_watch: $clean & $get & $runner watch --delete-conflicting-outputs + +# dependency_overrides: +# flutter_modular: +# path: ../../../modular/flutter_modular # To add assets to your application, add an assets section, like this: # assets: # - images/a_dot_burr.jpeg diff --git a/flutter_modular/lib/src/presenters/navigation/modular_router_delegate.dart b/flutter_modular/lib/src/presenters/navigation/modular_router_delegate.dart index ac51710a..eef9a7a3 100644 --- a/flutter_modular/lib/src/presenters/navigation/modular_router_delegate.dart +++ b/flutter_modular/lib/src/presenters/navigation/modular_router_delegate.dart @@ -103,36 +103,20 @@ class ModularRouterDelegate extends RouterDelegate if (fromModular && (routeIsInModule && !isDuplicatedPage)) { _pages.add(page); } else { - if (fromModular) { - for (var p in _pages) { - p.completePop(null); - removeInject(p.router.path!); - for (var r in p.router.routerOutlet) { - removeInject(r.path!); - } - } - if (replaceAll) { - _pages = [page]; - } else if (_pages.last.router.path != router.path) { - _pages.last = page; - } else { - _pages.last.router.routerOutlet.clear(); - _pages.last.router.routerOutlet.add(router.routerOutlet.last); - } - } else { - /// - /// The `fromModular` flag prevents all pages in `_pages` from being replaced - /// when navigating with the browser's back button - /// - - _lastPageModule.completePop(null); - removeInject(_lastPageModule.router.path!); - for (var r in _lastPageModule.router.routerOutlet) { + for (var p in _pages) { + p.completePop(null); + removeInject(p.router.path!); + for (var r in p.router.routerOutlet) { removeInject(r.path!); } - - _pages.remove(_lastPageModule); - _pages.add(page); + } + if (replaceAll) { + _pages = [page]; + } else if (_pages.last.router.path != router.path) { + _pages.last = page; + } else { + _pages.last.router.routerOutlet.clear(); + _pages.last.router.routerOutlet.add(router.routerOutlet.last); } } }