Showing
37 changed files
with
485 additions
and
588 deletions
| @@ -5,13 +5,11 @@ import '../data/home_repository.dart'; | @@ -5,13 +5,11 @@ import '../data/home_repository.dart'; | ||
| 5 | import '../domain/adapters/repository_adapter.dart'; | 5 | import '../domain/adapters/repository_adapter.dart'; |
| 6 | import '../presentation/controllers/home_controller.dart'; | 6 | import '../presentation/controllers/home_controller.dart'; |
| 7 | 7 | ||
| 8 | -class HomeBinding extends Binding { | 8 | +class HomeBinding extends Bindings { |
| 9 | @override | 9 | @override |
| 10 | - List<Bind> dependencies() { | ||
| 11 | - return [ | ||
| 12 | - Bind.lazyPut<IHomeProvider>(() => HomeProvider()), | ||
| 13 | - Bind.lazyPut<IHomeRepository>(() => HomeRepository(provider: Get.find())), | ||
| 14 | - Bind.lazyPut(() => HomeController(homeRepository: Get.find())), | ||
| 15 | - ]; | 10 | + void dependencies() { |
| 11 | + Get.lazyPut<IHomeProvider>(() => HomeProvider()); | ||
| 12 | + Get.lazyPut<IHomeRepository>(() => HomeRepository(provider: Get.find())); | ||
| 13 | + Get.lazyPut(() => HomeController(homeRepository: Get.find())); | ||
| 16 | } | 14 | } |
| 17 | } | 15 | } |
| @@ -9,8 +9,6 @@ class CountryView extends GetView<HomeController> { | @@ -9,8 +9,6 @@ class CountryView extends GetView<HomeController> { | ||
| 9 | const CountryView({Key? key}) : super(key: key); | 9 | const CountryView({Key? key}) : super(key: key); |
| 10 | @override | 10 | @override |
| 11 | Widget build(BuildContext context) { | 11 | Widget build(BuildContext context) { |
| 12 | - print('BUILD CONTRY'); | ||
| 13 | - print(context.params); | ||
| 14 | return Container( | 12 | return Container( |
| 15 | decoration: BoxDecoration( | 13 | decoration: BoxDecoration( |
| 16 | image: DecorationImage( | 14 | image: DecorationImage( |
| @@ -9,8 +9,7 @@ class DetailsView extends GetView<HomeController> { | @@ -9,8 +9,7 @@ class DetailsView extends GetView<HomeController> { | ||
| 9 | const DetailsView({Key? key}) : super(key: key); | 9 | const DetailsView({Key? key}) : super(key: key); |
| 10 | @override | 10 | @override |
| 11 | Widget build(BuildContext context) { | 11 | Widget build(BuildContext context) { |
| 12 | - final args = ModalRoute.of(context)!.settings.arguments as PageSettings; | ||
| 13 | - final parameter = args.params; //Get.rootDelegate.parameters; | 12 | + final parameter = context.params; //Get.parameters; |
| 14 | final country = controller.getCountryById(parameter['id'] ?? ''); | 13 | final country = controller.getCountryById(parameter['id'] ?? ''); |
| 15 | return Container( | 14 | return Container( |
| 16 | decoration: BoxDecoration( | 15 | decoration: BoxDecoration( |
| @@ -8,8 +8,6 @@ class HomeView extends GetView<HomeController> { | @@ -8,8 +8,6 @@ class HomeView extends GetView<HomeController> { | ||
| 8 | 8 | ||
| 9 | @override | 9 | @override |
| 10 | Widget build(BuildContext context) { | 10 | Widget build(BuildContext context) { |
| 11 | - print('REBUILD HOME'); | ||
| 12 | - // print(Get.parameters); | ||
| 13 | return Container( | 11 | return Container( |
| 14 | decoration: BoxDecoration( | 12 | decoration: BoxDecoration( |
| 15 | color: Colors.white, | 13 | color: Colors.white, |
| @@ -80,7 +78,7 @@ class HomeView extends GetView<HomeController> { | @@ -80,7 +78,7 @@ class HomeView extends GetView<HomeController> { | ||
| 80 | ), | 78 | ), |
| 81 | onPressed: () async { | 79 | onPressed: () async { |
| 82 | //await Navigation Get.rootDelegate.toNamed('/home/country'); | 80 | //await Navigation Get.rootDelegate.toNamed('/home/country'); |
| 83 | - Get.toNamed('/countrdhia'); | 81 | + Get.toNamed('/home/country'); |
| 84 | }, | 82 | }, |
| 85 | child: Text( | 83 | child: Text( |
| 86 | 'fetch_country'.tr, | 84 | 'fetch_country'.tr, |
| @@ -2,30 +2,32 @@ import 'package:get/get.dart'; | @@ -2,30 +2,32 @@ import 'package:get/get.dart'; | ||
| 2 | 2 | ||
| 3 | import '../pages/home/bindings/home_binding.dart'; | 3 | import '../pages/home/bindings/home_binding.dart'; |
| 4 | import '../pages/home/presentation/views/country_view.dart'; | 4 | import '../pages/home/presentation/views/country_view.dart'; |
| 5 | +import '../pages/home/presentation/views/details_view.dart'; | ||
| 5 | import '../pages/home/presentation/views/home_view.dart'; | 6 | import '../pages/home/presentation/views/home_view.dart'; |
| 6 | 7 | ||
| 7 | part 'app_routes.dart'; | 8 | part 'app_routes.dart'; |
| 8 | 9 | ||
| 9 | // ignore: avoid_classes_with_only_static_members | 10 | // ignore: avoid_classes_with_only_static_members |
| 10 | class AppPages { | 11 | class AppPages { |
| 11 | - static const INITIAL = '${Routes.HOME}?schineider=uuu'; | 12 | + static const INITIAL = Routes.HOME; |
| 12 | 13 | ||
| 13 | static final routes = [ | 14 | static final routes = [ |
| 14 | GetPage( | 15 | GetPage( |
| 15 | - name: '${Routes.HOME}', | ||
| 16 | - page: () => const HomeView(), | ||
| 17 | - binding: HomeBinding(), | ||
| 18 | - children: [], | ||
| 19 | - ), | 16 | + name: Routes.HOME, |
| 17 | + page: () => HomeView(), | ||
| 18 | + bindings: [HomeBinding()], | ||
| 19 | + children: [ | ||
| 20 | + GetPage( | ||
| 21 | + name: Routes.COUNTRY, | ||
| 22 | + page: () => CountryView(), | ||
| 23 | + children: [ | ||
| 20 | GetPage( | 24 | GetPage( |
| 21 | - name: '${Routes.COUNTRY}/:xasa', | ||
| 22 | - page: () => const CountryView(), | ||
| 23 | - // children: [ | ||
| 24 | - // GetPage( | ||
| 25 | - // name: Routes.DETAILS, | ||
| 26 | - // page: () => DetailsView(), | ||
| 27 | - // ), | ||
| 28 | - // ], | 25 | + name: Routes.DETAILS, |
| 26 | + page: () => DetailsView(), | ||
| 27 | + ), | ||
| 28 | + ], | ||
| 29 | + ), | ||
| 30 | + ], | ||
| 29 | ), | 31 | ), |
| 30 | ]; | 32 | ]; |
| 31 | } | 33 | } |
| @@ -5,23 +5,24 @@ import '../routes/app_pages.dart'; | @@ -5,23 +5,24 @@ import '../routes/app_pages.dart'; | ||
| 5 | 5 | ||
| 6 | class EnsureAuthMiddleware extends GetMiddleware { | 6 | class EnsureAuthMiddleware extends GetMiddleware { |
| 7 | @override | 7 | @override |
| 8 | - Future<RouteDecoder?> redirectDelegate(RouteDecoder route) async { | 8 | + Future<RouteDecoder?> redirect(RouteDecoder route) async { |
| 9 | // you can do whatever you want here | 9 | // you can do whatever you want here |
| 10 | // but it's preferable to make this method fast | 10 | // but it's preferable to make this method fast |
| 11 | // await Future.delayed(Duration(milliseconds: 500)); | 11 | // await Future.delayed(Duration(milliseconds: 500)); |
| 12 | 12 | ||
| 13 | if (!AuthService.to.isLoggedInValue) { | 13 | if (!AuthService.to.isLoggedInValue) { |
| 14 | - final newRoute = Routes.LOGIN_THEN(route.arguments!.name); | 14 | + final path = route.args.name as String; |
| 15 | + final newRoute = Routes.LOGIN_THEN(path); | ||
| 15 | 16 | ||
| 16 | return RouteDecoder.fromRoute(newRoute); | 17 | return RouteDecoder.fromRoute(newRoute); |
| 17 | } | 18 | } |
| 18 | - return await super.redirectDelegate(route); | 19 | + return await super.redirect(route); |
| 19 | } | 20 | } |
| 20 | } | 21 | } |
| 21 | 22 | ||
| 22 | class EnsureNotAuthedMiddleware extends GetMiddleware { | 23 | class EnsureNotAuthedMiddleware extends GetMiddleware { |
| 23 | @override | 24 | @override |
| 24 | - Future<RouteDecoder?> redirectDelegate(RouteDecoder route) async { | 25 | + Future<RouteDecoder?> redirect(RouteDecoder route) async { |
| 25 | if (AuthService.to.isLoggedInValue) { | 26 | if (AuthService.to.isLoggedInValue) { |
| 26 | //NEVER navigate to auth screen, when user is already authed | 27 | //NEVER navigate to auth screen, when user is already authed |
| 27 | return null; | 28 | return null; |
| @@ -29,6 +30,6 @@ class EnsureNotAuthedMiddleware extends GetMiddleware { | @@ -29,6 +30,6 @@ class EnsureNotAuthedMiddleware extends GetMiddleware { | ||
| 29 | //OR redirect user to another screen | 30 | //OR redirect user to another screen |
| 30 | //return RouteDecoder.fromRoute(Routes.PROFILE); | 31 | //return RouteDecoder.fromRoute(Routes.PROFILE); |
| 31 | } | 32 | } |
| 32 | - return await super.redirectDelegate(route); | 33 | + return await super.redirect(route); |
| 33 | } | 34 | } |
| 34 | } | 35 | } |
| @@ -31,8 +31,7 @@ class ProductsView extends GetView<ProductsController> { | @@ -31,8 +31,7 @@ class ProductsView extends GetView<ProductsController> { | ||
| 31 | final item = controller.products[index]; | 31 | final item = controller.products[index]; |
| 32 | return ListTile( | 32 | return ListTile( |
| 33 | onTap: () { | 33 | onTap: () { |
| 34 | - Get | ||
| 35 | - .toNamed(Routes.PRODUCT_DETAILS(item.id)); | 34 | + Get.toNamed(Routes.PRODUCT_DETAILS(item.id)); |
| 36 | }, | 35 | }, |
| 37 | title: Text(item.name), | 36 | title: Text(item.name), |
| 38 | subtitle: Text(item.id), | 37 | subtitle: Text(item.id), |
| @@ -29,7 +29,7 @@ class AppPages { | @@ -29,7 +29,7 @@ class AppPages { | ||
| 29 | GetPage( | 29 | GetPage( |
| 30 | name: '/', | 30 | name: '/', |
| 31 | page: () => RootView(), | 31 | page: () => RootView(), |
| 32 | - binding: RootBinding(), | 32 | + bindings: [RootBinding()], |
| 33 | participatesInRootNavigator: true, | 33 | participatesInRootNavigator: true, |
| 34 | preventDuplicates: true, | 34 | preventDuplicates: true, |
| 35 | children: [ | 35 | children: [ |
| @@ -40,19 +40,23 @@ class AppPages { | @@ -40,19 +40,23 @@ class AppPages { | ||
| 40 | ], | 40 | ], |
| 41 | name: _Paths.LOGIN, | 41 | name: _Paths.LOGIN, |
| 42 | page: () => LoginView(), | 42 | page: () => LoginView(), |
| 43 | - binding: LoginBinding(), | 43 | + bindings: [LoginBinding()], |
| 44 | ), | 44 | ), |
| 45 | GetPage( | 45 | GetPage( |
| 46 | preventDuplicates: true, | 46 | preventDuplicates: true, |
| 47 | name: _Paths.HOME, | 47 | name: _Paths.HOME, |
| 48 | page: () => HomeView(), | 48 | page: () => HomeView(), |
| 49 | - binding: HomeBinding(), | 49 | + bindings: [ |
| 50 | + HomeBinding(), | ||
| 51 | + ], | ||
| 50 | title: null, | 52 | title: null, |
| 51 | children: [ | 53 | children: [ |
| 52 | GetPage( | 54 | GetPage( |
| 53 | name: _Paths.DASHBOARD, | 55 | name: _Paths.DASHBOARD, |
| 54 | page: () => DashboardView(), | 56 | page: () => DashboardView(), |
| 55 | - binding: DashboardBinding(), | 57 | + bindings: [ |
| 58 | + DashboardBinding(), | ||
| 59 | + ], | ||
| 56 | ), | 60 | ), |
| 57 | GetPage( | 61 | GetPage( |
| 58 | middlewares: [ | 62 | middlewares: [ |
| @@ -63,19 +67,19 @@ class AppPages { | @@ -63,19 +67,19 @@ class AppPages { | ||
| 63 | page: () => ProfileView(), | 67 | page: () => ProfileView(), |
| 64 | title: 'Profile', | 68 | title: 'Profile', |
| 65 | transition: Transition.size, | 69 | transition: Transition.size, |
| 66 | - binding: ProfileBinding(), | 70 | + bindings: [ProfileBinding()], |
| 67 | ), | 71 | ), |
| 68 | GetPage( | 72 | GetPage( |
| 69 | name: _Paths.PRODUCTS, | 73 | name: _Paths.PRODUCTS, |
| 70 | page: () => ProductsView(), | 74 | page: () => ProductsView(), |
| 71 | title: 'Products', | 75 | title: 'Products', |
| 72 | transition: Transition.zoom, | 76 | transition: Transition.zoom, |
| 73 | - binding: ProductsBinding(), | 77 | + bindings: [ProductsBinding()], |
| 74 | children: [ | 78 | children: [ |
| 75 | GetPage( | 79 | GetPage( |
| 76 | name: _Paths.PRODUCT_DETAILS, | 80 | name: _Paths.PRODUCT_DETAILS, |
| 77 | page: () => ProductDetailsView(), | 81 | page: () => ProductDetailsView(), |
| 78 | - binding: ProductDetailsBinding(), | 82 | + bindings: [ProductDetailsBinding()], |
| 79 | middlewares: [ | 83 | middlewares: [ |
| 80 | //only enter this route when authed | 84 | //only enter this route when authed |
| 81 | EnsureAuthMiddleware(), | 85 | EnsureAuthMiddleware(), |
| @@ -88,7 +92,9 @@ class AppPages { | @@ -88,7 +92,9 @@ class AppPages { | ||
| 88 | GetPage( | 92 | GetPage( |
| 89 | name: _Paths.SETTINGS, | 93 | name: _Paths.SETTINGS, |
| 90 | page: () => SettingsView(), | 94 | page: () => SettingsView(), |
| 91 | - binding: SettingsBinding(), | 95 | + bindings: [ |
| 96 | + SettingsBinding(), | ||
| 97 | + ], | ||
| 92 | ), | 98 | ), |
| 93 | ], | 99 | ], |
| 94 | ), | 100 | ), |
| @@ -7,7 +7,7 @@ export 'get_common/get_reset.dart'; | @@ -7,7 +7,7 @@ export 'get_common/get_reset.dart'; | ||
| 7 | export 'get_connect/connect.dart'; | 7 | export 'get_connect/connect.dart'; |
| 8 | export 'get_core/get_core.dart'; | 8 | export 'get_core/get_core.dart'; |
| 9 | export 'get_instance/get_instance.dart'; | 9 | export 'get_instance/get_instance.dart'; |
| 10 | -export 'get_navigation/get_navigation.dart'; | 10 | +export 'get_navigation/get_navigation.dart' hide FirstWhereOrNullExt; |
| 11 | export 'get_rx/get_rx.dart'; | 11 | export 'get_rx/get_rx.dart'; |
| 12 | export 'get_state_manager/get_state_manager.dart'; | 12 | export 'get_state_manager/get_state_manager.dart'; |
| 13 | export 'get_utils/get_utils.dart'; | 13 | export 'get_utils/get_utils.dart'; |
| @@ -5,7 +5,6 @@ import 'package:flutter/scheduler.dart'; | @@ -5,7 +5,6 @@ import 'package:flutter/scheduler.dart'; | ||
| 5 | 5 | ||
| 6 | import '../../get_core/get_core.dart'; | 6 | import '../../get_core/get_core.dart'; |
| 7 | import '../../get_instance/src/bindings_interface.dart'; | 7 | import '../../get_instance/src/bindings_interface.dart'; |
| 8 | -import '../../get_state_manager/src/simple/get_state.dart'; | ||
| 9 | import '../../get_utils/get_utils.dart'; | 8 | import '../../get_utils/get_utils.dart'; |
| 10 | import '../get_navigation.dart'; | 9 | import '../get_navigation.dart'; |
| 11 | import 'dialog/dialog_route.dart'; | 10 | import 'dialog/dialog_route.dart'; |
| @@ -512,7 +511,7 @@ extension GetNavigationExt on GetInterface { | @@ -512,7 +511,7 @@ extension GetNavigationExt on GetInterface { | ||
| 512 | String? routeName, | 511 | String? routeName, |
| 513 | bool fullscreenDialog = false, | 512 | bool fullscreenDialog = false, |
| 514 | dynamic arguments, | 513 | dynamic arguments, |
| 515 | - Binding? binding, | 514 | + List<BindingsInterface>? bindings, |
| 516 | bool preventDuplicates = true, | 515 | bool preventDuplicates = true, |
| 517 | bool? popGesture, | 516 | bool? popGesture, |
| 518 | bool showCupertinoParallax = true, | 517 | bool showCupertinoParallax = true, |
| @@ -530,7 +529,7 @@ extension GetNavigationExt on GetInterface { | @@ -530,7 +529,7 @@ extension GetNavigationExt on GetInterface { | ||
| 530 | routeName: routeName, | 529 | routeName: routeName, |
| 531 | fullscreenDialog: fullscreenDialog, | 530 | fullscreenDialog: fullscreenDialog, |
| 532 | arguments: arguments, | 531 | arguments: arguments, |
| 533 | - binding: binding, | 532 | + bindings: bindings, |
| 534 | preventDuplicates: preventDuplicates, | 533 | preventDuplicates: preventDuplicates, |
| 535 | popGesture: popGesture, | 534 | popGesture: popGesture, |
| 536 | showCupertinoParallax: showCupertinoParallax, | 535 | showCupertinoParallax: showCupertinoParallax, |
| @@ -802,6 +801,13 @@ extension GetNavigationExt on GetInterface { | @@ -802,6 +801,13 @@ extension GetNavigationExt on GetInterface { | ||
| 802 | bool canPop = true, | 801 | bool canPop = true, |
| 803 | int? id, | 802 | int? id, |
| 804 | }) { | 803 | }) { |
| 804 | + //TODO: remove this when change own api to Dialog and BottomSheets | ||
| 805 | + //to declarative way | ||
| 806 | + if (isDialogOpen! || isBottomSheetOpen!) { | ||
| 807 | + searchDelegate(id).navigatorKey.currentState?.pop(); | ||
| 808 | + return; | ||
| 809 | + } | ||
| 810 | + | ||
| 805 | //TODO: This code brings compatibility of the new snackbar with GetX 4, | 811 | //TODO: This code brings compatibility of the new snackbar with GetX 4, |
| 806 | // remove this code in version 5 | 812 | // remove this code in version 5 |
| 807 | if (isSnackbarOpen && !closeOverlays) { | 813 | if (isSnackbarOpen && !closeOverlays) { |
| @@ -816,8 +822,10 @@ extension GetNavigationExt on GetInterface { | @@ -816,8 +822,10 @@ extension GetNavigationExt on GetInterface { | ||
| 816 | closeAllSnackbars(); | 822 | closeAllSnackbars(); |
| 817 | } | 823 | } |
| 818 | 824 | ||
| 819 | - searchDelegate(id) | ||
| 820 | - .backUntil((route) => (!isDialogOpen! && !isBottomSheetOpen!)); | 825 | + while ((isDialogOpen! && isBottomSheetOpen!)) { |
| 826 | + searchDelegate(id).navigatorKey.currentState?.pop(); | ||
| 827 | + } | ||
| 828 | + | ||
| 821 | // navigator?.popUntil((route) { | 829 | // navigator?.popUntil((route) { |
| 822 | // return; | 830 | // return; |
| 823 | // }); | 831 | // }); |
| @@ -881,7 +889,7 @@ extension GetNavigationExt on GetInterface { | @@ -881,7 +889,7 @@ extension GetNavigationExt on GetInterface { | ||
| 881 | int? id, | 889 | int? id, |
| 882 | String? routeName, | 890 | String? routeName, |
| 883 | dynamic arguments, | 891 | dynamic arguments, |
| 884 | - Binding? binding, | 892 | + List<BindingsInterface>? bindings, |
| 885 | bool fullscreenDialog = false, | 893 | bool fullscreenDialog = false, |
| 886 | bool preventDuplicates = true, | 894 | bool preventDuplicates = true, |
| 887 | Duration? duration, | 895 | Duration? duration, |
| @@ -901,7 +909,7 @@ extension GetNavigationExt on GetInterface { | @@ -901,7 +909,7 @@ extension GetNavigationExt on GetInterface { | ||
| 901 | id: id, | 909 | id: id, |
| 902 | routeName: routeName, | 910 | routeName: routeName, |
| 903 | arguments: arguments, | 911 | arguments: arguments, |
| 904 | - binding: binding, | 912 | + bindings: bindings, |
| 905 | fullscreenDialog: fullscreenDialog, | 913 | fullscreenDialog: fullscreenDialog, |
| 906 | preventDuplicates: preventDuplicates, | 914 | preventDuplicates: preventDuplicates, |
| 907 | duration: duration, | 915 | duration: duration, |
| @@ -960,7 +968,7 @@ extension GetNavigationExt on GetInterface { | @@ -960,7 +968,7 @@ extension GetNavigationExt on GetInterface { | ||
| 960 | int? id, | 968 | int? id, |
| 961 | String? routeName, | 969 | String? routeName, |
| 962 | dynamic arguments, | 970 | dynamic arguments, |
| 963 | - Binding? binding, | 971 | + List<BindingsInterface>? bindings, |
| 964 | bool fullscreenDialog = false, | 972 | bool fullscreenDialog = false, |
| 965 | Transition? transition, | 973 | Transition? transition, |
| 966 | Curve? curve, | 974 | Curve? curve, |
| @@ -977,7 +985,7 @@ extension GetNavigationExt on GetInterface { | @@ -977,7 +985,7 @@ extension GetNavigationExt on GetInterface { | ||
| 977 | id: id, | 985 | id: id, |
| 978 | // routeName routeName, | 986 | // routeName routeName, |
| 979 | arguments: arguments, | 987 | arguments: arguments, |
| 980 | - binding: binding, | 988 | + bindings: bindings, |
| 981 | fullscreenDialog: fullscreenDialog, | 989 | fullscreenDialog: fullscreenDialog, |
| 982 | transition: transition, | 990 | transition: transition, |
| 983 | curve: curve, | 991 | curve: curve, |
| @@ -1083,7 +1091,6 @@ extension GetNavigationExt on GetInterface { | @@ -1083,7 +1091,6 @@ extension GetNavigationExt on GetInterface { | ||
| 1083 | GetDelegate _key; | 1091 | GetDelegate _key; |
| 1084 | if (k == null) { | 1092 | if (k == null) { |
| 1085 | _key = Get.rootController.rootDelegate; | 1093 | _key = Get.rootController.rootDelegate; |
| 1086 | - print(_key.navigatorKey); | ||
| 1087 | } else { | 1094 | } else { |
| 1088 | if (!keys.containsKey(k)) { | 1095 | if (!keys.containsKey(k)) { |
| 1089 | throw 'Route id ($k) not found'; | 1096 | throw 'Route id ($k) not found'; |
| @@ -1105,7 +1112,8 @@ extension GetNavigationExt on GetInterface { | @@ -1105,7 +1112,8 @@ extension GetNavigationExt on GetInterface { | ||
| 1105 | } | 1112 | } |
| 1106 | 1113 | ||
| 1107 | /// give current arguments | 1114 | /// give current arguments |
| 1108 | - dynamic get arguments => routing.args; | 1115 | + //dynamic get arguments => routing.args; |
| 1116 | + dynamic get arguments => _getxController.rootDelegate.arguments(); | ||
| 1109 | 1117 | ||
| 1110 | /// give name from current route | 1118 | /// give name from current route |
| 1111 | String get currentRoute => routing.current; | 1119 | String get currentRoute => routing.current; |
| @@ -114,24 +114,10 @@ class GetCupertinoApp extends StatelessWidget { | @@ -114,24 +114,10 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 114 | this.highContrastTheme, | 114 | this.highContrastTheme, |
| 115 | this.highContrastDarkTheme, | 115 | this.highContrastDarkTheme, |
| 116 | this.actions, | 116 | this.actions, |
| 117 | - }) : routerDelegate = Get.createDelegate( | ||
| 118 | - pages: getPages ?? | ||
| 119 | - [ | ||
| 120 | - GetPage( | ||
| 121 | - name: _cleanRouteName("/${home.runtimeType}"), | ||
| 122 | - page: () => home!, | ||
| 123 | - ), | ||
| 124 | - ], | ||
| 125 | - notFoundRoute: unknownRoute, | ||
| 126 | - navigatorKey: navigatorKey, | ||
| 127 | - ), | ||
| 128 | - routeInformationParser = Get.createInformationParser( | ||
| 129 | - initialRoute: initialRoute ?? | ||
| 130 | - getPages?.first.name ?? | ||
| 131 | - _cleanRouteName("/${home.runtimeType}"), | ||
| 132 | - ), | ||
| 133 | - routeInformationProvider = null, | 117 | + }) : routeInformationProvider = null, |
| 134 | backButtonDispatcher = null, | 118 | backButtonDispatcher = null, |
| 119 | + routeInformationParser = null, | ||
| 120 | + routerDelegate = null, | ||
| 135 | super(key: key); | 121 | super(key: key); |
| 136 | 122 | ||
| 137 | static String _cleanRouteName(String name) { | 123 | static String _cleanRouteName(String name) { |
| @@ -149,8 +135,8 @@ class GetCupertinoApp extends StatelessWidget { | @@ -149,8 +135,8 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 149 | Key? key, | 135 | Key? key, |
| 150 | this.theme, | 136 | this.theme, |
| 151 | this.routeInformationProvider, | 137 | this.routeInformationProvider, |
| 152 | - RouteInformationParser<Object>? routeInformationParser, | ||
| 153 | - RouterDelegate<Object>? routerDelegate, | 138 | + this.routeInformationParser, |
| 139 | + this.routerDelegate, | ||
| 154 | this.backButtonDispatcher, | 140 | this.backButtonDispatcher, |
| 155 | this.builder, | 141 | this.builder, |
| 156 | this.title = '', | 142 | this.title = '', |
| @@ -190,33 +176,27 @@ class GetCupertinoApp extends StatelessWidget { | @@ -190,33 +176,27 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 190 | this.transitionDuration, | 176 | this.transitionDuration, |
| 191 | this.defaultGlobalState, | 177 | this.defaultGlobalState, |
| 192 | this.getPages, | 178 | this.getPages, |
| 179 | + this.navigatorObservers, | ||
| 193 | this.unknownRoute, | 180 | this.unknownRoute, |
| 194 | - }) : routerDelegate = routerDelegate ??= Get.createDelegate( | ||
| 195 | - pages: getPages ?? [], | ||
| 196 | - notFoundRoute: unknownRoute, | ||
| 197 | - ), | ||
| 198 | - routeInformationParser = | ||
| 199 | - routeInformationParser ??= Get.createInformationParser( | ||
| 200 | - initialRoute: getPages?.first.name ?? '/', | ||
| 201 | - ), | ||
| 202 | - navigatorObservers = null, | ||
| 203 | - navigatorKey = null, | 181 | + }) : navigatorKey = null, |
| 204 | onGenerateRoute = null, | 182 | onGenerateRoute = null, |
| 205 | home = null, | 183 | home = null, |
| 206 | onGenerateInitialRoutes = null, | 184 | onGenerateInitialRoutes = null, |
| 207 | onUnknownRoute = null, | 185 | onUnknownRoute = null, |
| 208 | routes = null, | 186 | routes = null, |
| 209 | initialRoute = null, | 187 | initialRoute = null, |
| 210 | - super(key: key) { | ||
| 211 | - Get.routerDelegate = routerDelegate; | ||
| 212 | - Get.routeInformationParser = routeInformationParser; | ||
| 213 | - } | 188 | + super(key: key); |
| 214 | 189 | ||
| 215 | @override | 190 | @override |
| 216 | Widget build(BuildContext context) => GetBuilder<GetMaterialController>( | 191 | Widget build(BuildContext context) => GetBuilder<GetMaterialController>( |
| 217 | init: Get.rootController, | 192 | init: Get.rootController, |
| 218 | dispose: (d) { | 193 | dispose: (d) { |
| 219 | onDispose?.call(); | 194 | onDispose?.call(); |
| 195 | + Get.clearRouteTree(); | ||
| 196 | + Get.clearTranslations(); | ||
| 197 | + Get.resetRootNavigator(); | ||
| 198 | + Get.routerDelegate = null; | ||
| 199 | + Get.routeInformationParser = null; | ||
| 220 | }, | 200 | }, |
| 221 | initState: (i) { | 201 | initState: (i) { |
| 222 | Get.engine!.addPostFrameCallback((timeStamp) { | 202 | Get.engine!.addPostFrameCallback((timeStamp) { |
| @@ -237,6 +217,13 @@ class GetCupertinoApp extends StatelessWidget { | @@ -237,6 +217,13 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 237 | initialBinding?.dependencies(); | 217 | initialBinding?.dependencies(); |
| 238 | if (getPages != null) { | 218 | if (getPages != null) { |
| 239 | Get.addPages(getPages!); | 219 | Get.addPages(getPages!); |
| 220 | + } else { | ||
| 221 | + Get.addPage( | ||
| 222 | + GetPage( | ||
| 223 | + name: _cleanRouteName("/${home.runtimeType}"), | ||
| 224 | + page: () => home!, | ||
| 225 | + ), | ||
| 226 | + ); | ||
| 240 | } | 227 | } |
| 241 | 228 | ||
| 242 | Get.smartManagement = smartManagement; | 229 | Get.smartManagement = smartManagement; |
| @@ -252,46 +239,11 @@ class GetCupertinoApp extends StatelessWidget { | @@ -252,46 +239,11 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 252 | transitionDuration ?? Get.defaultTransitionDuration, | 239 | transitionDuration ?? Get.defaultTransitionDuration, |
| 253 | ); | 240 | ); |
| 254 | }, | 241 | }, |
| 255 | - builder: (_) => routerDelegate != null | ||
| 256 | - ? CupertinoApp.router( | ||
| 257 | - routerDelegate: routerDelegate!, | ||
| 258 | - routeInformationParser: routeInformationParser!, | ||
| 259 | - backButtonDispatcher: backButtonDispatcher, | ||
| 260 | - routeInformationProvider: routeInformationProvider, | ||
| 261 | - key: _.unikey, | ||
| 262 | - theme: theme, | ||
| 263 | - builder: defaultBuilder, | ||
| 264 | - title: title, | ||
| 265 | - onGenerateTitle: onGenerateTitle, | ||
| 266 | - color: color, | ||
| 267 | - locale: Get.locale ?? locale, | ||
| 268 | - localizationsDelegates: localizationsDelegates, | ||
| 269 | - localeListResolutionCallback: localeListResolutionCallback, | ||
| 270 | - localeResolutionCallback: localeResolutionCallback, | ||
| 271 | - supportedLocales: supportedLocales, | ||
| 272 | - showPerformanceOverlay: showPerformanceOverlay, | ||
| 273 | - checkerboardRasterCacheImages: checkerboardRasterCacheImages, | ||
| 274 | - checkerboardOffscreenLayers: checkerboardOffscreenLayers, | ||
| 275 | - showSemanticsDebugger: showSemanticsDebugger, | ||
| 276 | - debugShowCheckedModeBanner: debugShowCheckedModeBanner, | ||
| 277 | - shortcuts: shortcuts, | ||
| 278 | - useInheritedMediaQuery: useInheritedMediaQuery, | ||
| 279 | - ) | ||
| 280 | - : CupertinoApp( | ||
| 281 | - key: _.unikey, | ||
| 282 | - theme: theme, | ||
| 283 | - navigatorKey: (navigatorKey == null | ||
| 284 | - ? Get.key | ||
| 285 | - : Get.addKey(navigatorKey!)), | ||
| 286 | - home: home, | ||
| 287 | - routes: routes ?? const <String, WidgetBuilder>{}, | ||
| 288 | - initialRoute: initialRoute, | ||
| 289 | - onGenerateRoute: | ||
| 290 | - (getPages != null ? generator : onGenerateRoute), | ||
| 291 | - onGenerateInitialRoutes: (getPages == null || home != null) | ||
| 292 | - ? onGenerateInitialRoutes | ||
| 293 | - : initialRoutesGenerate, | ||
| 294 | - onUnknownRoute: onUnknownRoute, | 242 | + builder: (_) { |
| 243 | + final routerDelegate = Get.createDelegate( | ||
| 244 | + pages: getPages ?? [], | ||
| 245 | + notFoundRoute: unknownRoute, | ||
| 246 | + navigatorKey: navigatorKey, | ||
| 295 | navigatorObservers: (navigatorObservers == null | 247 | navigatorObservers: (navigatorObservers == null |
| 296 | ? <NavigatorObserver>[ | 248 | ? <NavigatorObserver>[ |
| 297 | GetObserver(routingCallback, Get.routing) | 249 | GetObserver(routingCallback, Get.routing) |
| @@ -299,7 +251,20 @@ class GetCupertinoApp extends StatelessWidget { | @@ -299,7 +251,20 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 299 | : <NavigatorObserver>[ | 251 | : <NavigatorObserver>[ |
| 300 | GetObserver(routingCallback, Get.routing) | 252 | GetObserver(routingCallback, Get.routing) |
| 301 | ] | 253 | ] |
| 302 | - ..addAll(navigatorObservers!)), | 254 | + ..addAll(navigatorObservers!))); |
| 255 | + final routeInformationParser = Get.createInformationParser( | ||
| 256 | + initialRoute: initialRoute ?? | ||
| 257 | + getPages?.first.name ?? | ||
| 258 | + _cleanRouteName("/${home.runtimeType}"), | ||
| 259 | + ); | ||
| 260 | + | ||
| 261 | + return CupertinoApp.router( | ||
| 262 | + routerDelegate: routerDelegate, | ||
| 263 | + routeInformationParser: routeInformationParser, | ||
| 264 | + backButtonDispatcher: backButtonDispatcher, | ||
| 265 | + routeInformationProvider: routeInformationProvider, | ||
| 266 | + key: _.unikey, | ||
| 267 | + theme: theme, | ||
| 303 | builder: defaultBuilder, | 268 | builder: defaultBuilder, |
| 304 | title: title, | 269 | title: title, |
| 305 | onGenerateTitle: onGenerateTitle, | 270 | onGenerateTitle: onGenerateTitle, |
| @@ -316,8 +281,8 @@ class GetCupertinoApp extends StatelessWidget { | @@ -316,8 +281,8 @@ class GetCupertinoApp extends StatelessWidget { | ||
| 316 | debugShowCheckedModeBanner: debugShowCheckedModeBanner, | 281 | debugShowCheckedModeBanner: debugShowCheckedModeBanner, |
| 317 | shortcuts: shortcuts, | 282 | shortcuts: shortcuts, |
| 318 | useInheritedMediaQuery: useInheritedMediaQuery, | 283 | useInheritedMediaQuery: useInheritedMediaQuery, |
| 319 | - // actions: actions, | ||
| 320 | - ), | 284 | + ); |
| 285 | + }, | ||
| 321 | ); | 286 | ); |
| 322 | 287 | ||
| 323 | Widget defaultBuilder(BuildContext context, Widget? child) { | 288 | Widget defaultBuilder(BuildContext context, Widget? child) { |
| @@ -7,64 +7,6 @@ import '../../../get_state_manager/get_state_manager.dart'; | @@ -7,64 +7,6 @@ import '../../../get_state_manager/get_state_manager.dart'; | ||
| 7 | import '../../../get_utils/get_utils.dart'; | 7 | import '../../../get_utils/get_utils.dart'; |
| 8 | import '../../get_navigation.dart'; | 8 | import '../../get_navigation.dart'; |
| 9 | 9 | ||
| 10 | -// extension GetMaterialExt on MaterialApp{ | ||
| 11 | -// MaterialApp get(){ | ||
| 12 | -// final app = MaterialApp.router( | ||
| 13 | -// key: key, | ||
| 14 | -// routeInformationProvider:routeInformationProvider, | ||
| 15 | -// scaffoldMessengerKey:scaffoldMessengerKey, | ||
| 16 | -// // RouteInformationParser<Object>? routeInformationParser, | ||
| 17 | -// // RouterDelegate<Object>? routerDelegate, | ||
| 18 | -// backButtonDispatcher:backButtonDispatcher, | ||
| 19 | -// builder:builder, | ||
| 20 | -// title:title, | ||
| 21 | -// onGenerateTitle:onGenerateTitle, | ||
| 22 | -// color:color, | ||
| 23 | -// theme:theme, | ||
| 24 | -// darkTheme:darkTheme, | ||
| 25 | -// useInheritedMediaQuery:useInheritedMediaQuery, | ||
| 26 | -// highContrastTheme:highContrastTheme, | ||
| 27 | -// highContrastDarkTheme:highContrastDarkTheme, | ||
| 28 | -// themeMode :themeMode, | ||
| 29 | -// locale:locale, | ||
| 30 | -// localizationsDelegates:localizationsDelegates, | ||
| 31 | -// localeListResolutionCallback: localeListResolutionCallback, | ||
| 32 | -// localeResolutionCallback: localeResolutionCallback, | ||
| 33 | -// supportedLocales: supportedLocales, | ||
| 34 | -// debugShowMaterialGrid :debugShowMaterialGrid, | ||
| 35 | -// showPerformanceOverlay :showPerformanceOverlay, | ||
| 36 | -// checkerboardRasterCacheImages :checkerboardRasterCacheImages, | ||
| 37 | -// checkerboardOffscreenLayers :checkerboardOffscreenLayers, | ||
| 38 | -// showSemanticsDebugger :showSemanticsDebugger, | ||
| 39 | -// debugShowCheckedModeBanner :debugShowCheckedModeBanner, | ||
| 40 | -// shortcuts: shortcuts, | ||
| 41 | -// scrollBehavior:scrollBehavior, | ||
| 42 | -// actions:actions, | ||
| 43 | -// customTransition:customTransition, | ||
| 44 | -// translationsKeys:translationsKeys, | ||
| 45 | -// translations:translations, | ||
| 46 | -// textDirection:textDirection, | ||
| 47 | -// fallbackLocale:fallbackLocale, | ||
| 48 | -// routingCallback:routingCallback, | ||
| 49 | -// defaultTransition:defaultTransition, | ||
| 50 | -// opaqueRoute:opaqueRoute, | ||
| 51 | -// onInit:onInit, | ||
| 52 | -// onReady:onReady, | ||
| 53 | -// onDispose:onDispose, | ||
| 54 | -// enableLog:enableLog, | ||
| 55 | -// logWriterCallback:logWriterCallback, | ||
| 56 | -// popGesture:popGesture, | ||
| 57 | -// smartManagement:smartManagement | ||
| 58 | -// initialBinding:initialBinding, | ||
| 59 | -// transitionDuration:transitionDuration, | ||
| 60 | -// defaultGlobalState:defaultGlobalState, | ||
| 61 | -// getPages:getPages, | ||
| 62 | -// navigatorObservers: navigatorObservers, | ||
| 63 | -// unknownRoute:unknownRoute, | ||
| 64 | -// ); | ||
| 65 | -// } | ||
| 66 | -// } | ||
| 67 | - | ||
| 68 | class GetMaterialApp extends StatelessWidget { | 10 | class GetMaterialApp extends StatelessWidget { |
| 69 | final GlobalKey<NavigatorState>? navigatorKey; | 11 | final GlobalKey<NavigatorState>? navigatorKey; |
| 70 | 12 | ||
| @@ -181,24 +123,10 @@ class GetMaterialApp extends StatelessWidget { | @@ -181,24 +123,10 @@ class GetMaterialApp extends StatelessWidget { | ||
| 181 | this.highContrastTheme, | 123 | this.highContrastTheme, |
| 182 | this.highContrastDarkTheme, | 124 | this.highContrastDarkTheme, |
| 183 | this.actions, | 125 | this.actions, |
| 184 | - }) : routerDelegate = Get.createDelegate( | ||
| 185 | - pages: getPages ?? | ||
| 186 | - [ | ||
| 187 | - GetPage( | ||
| 188 | - name: _cleanRouteName("/${home.runtimeType}"), | ||
| 189 | - page: () => home!, | ||
| 190 | - ), | ||
| 191 | - ], | ||
| 192 | - notFoundRoute: unknownRoute, | ||
| 193 | - navigatorKey: navigatorKey, | ||
| 194 | - ), | ||
| 195 | - routeInformationParser = Get.createInformationParser( | ||
| 196 | - initialRoute: initialRoute ?? | ||
| 197 | - getPages?.first.name ?? | ||
| 198 | - _cleanRouteName("/${home.runtimeType}"), | ||
| 199 | - ), | ||
| 200 | - routeInformationProvider = null, | 126 | + }) : routeInformationProvider = null, |
| 201 | backButtonDispatcher = null, | 127 | backButtonDispatcher = null, |
| 128 | + routeInformationParser = null, | ||
| 129 | + routerDelegate = null, | ||
| 202 | super(key: key); | 130 | super(key: key); |
| 203 | 131 | ||
| 204 | static String _cleanRouteName(String name) { | 132 | static String _cleanRouteName(String name) { |
| @@ -216,8 +144,8 @@ class GetMaterialApp extends StatelessWidget { | @@ -216,8 +144,8 @@ class GetMaterialApp extends StatelessWidget { | ||
| 216 | Key? key, | 144 | Key? key, |
| 217 | this.routeInformationProvider, | 145 | this.routeInformationProvider, |
| 218 | this.scaffoldMessengerKey, | 146 | this.scaffoldMessengerKey, |
| 219 | - RouteInformationParser<Object>? routeInformationParser, | ||
| 220 | - RouterDelegate<Object>? routerDelegate, | 147 | + this.routeInformationParser, |
| 148 | + this.routerDelegate, | ||
| 221 | this.backButtonDispatcher, | 149 | this.backButtonDispatcher, |
| 222 | this.builder, | 150 | this.builder, |
| 223 | this.title = '', | 151 | this.title = '', |
| @@ -264,33 +192,29 @@ class GetMaterialApp extends StatelessWidget { | @@ -264,33 +192,29 @@ class GetMaterialApp extends StatelessWidget { | ||
| 264 | this.getPages, | 192 | this.getPages, |
| 265 | this.navigatorObservers, | 193 | this.navigatorObservers, |
| 266 | this.unknownRoute, | 194 | this.unknownRoute, |
| 267 | - }) : routerDelegate = routerDelegate ??= Get.createDelegate( | ||
| 268 | - pages: getPages ?? [], | ||
| 269 | - notFoundRoute: unknownRoute, | ||
| 270 | - ), | ||
| 271 | - routeInformationParser = | ||
| 272 | - routeInformationParser ??= Get.createInformationParser( | ||
| 273 | - initialRoute: getPages?.first.name ?? '/', | ||
| 274 | - ), | ||
| 275 | - navigatorKey = null, | 195 | + }) : navigatorKey = null, |
| 276 | onGenerateRoute = null, | 196 | onGenerateRoute = null, |
| 277 | home = null, | 197 | home = null, |
| 278 | onGenerateInitialRoutes = null, | 198 | onGenerateInitialRoutes = null, |
| 279 | onUnknownRoute = null, | 199 | onUnknownRoute = null, |
| 280 | routes = null, | 200 | routes = null, |
| 281 | initialRoute = null, | 201 | initialRoute = null, |
| 282 | - super(key: key) { | ||
| 283 | - Get.routerDelegate = routerDelegate; | ||
| 284 | - Get.routeInformationParser = routeInformationParser; | ||
| 285 | - } | 202 | + super(key: key); |
| 286 | 203 | ||
| 287 | @override | 204 | @override |
| 288 | Widget build(BuildContext context) => GetBuilder<GetMaterialController>( | 205 | Widget build(BuildContext context) => GetBuilder<GetMaterialController>( |
| 289 | init: Get.rootController, | 206 | init: Get.rootController, |
| 290 | dispose: (d) { | 207 | dispose: (d) { |
| 291 | onDispose?.call(); | 208 | onDispose?.call(); |
| 209 | + Get.clearRouteTree(); | ||
| 210 | + Get.clearTranslations(); | ||
| 211 | + Get.resetRootNavigator(); | ||
| 212 | + Get.routerDelegate = null; | ||
| 213 | + Get.routeInformationParser = null; | ||
| 292 | }, | 214 | }, |
| 293 | initState: (i) { | 215 | initState: (i) { |
| 216 | + // Get.routerDelegate = routerDelegate; | ||
| 217 | + // Get.routeInformationParser = routeInformationParser; | ||
| 294 | Get.engine!.addPostFrameCallback((timeStamp) { | 218 | Get.engine!.addPostFrameCallback((timeStamp) { |
| 295 | onReady?.call(); | 219 | onReady?.call(); |
| 296 | }); | 220 | }); |
| @@ -309,6 +233,13 @@ class GetMaterialApp extends StatelessWidget { | @@ -309,6 +233,13 @@ class GetMaterialApp extends StatelessWidget { | ||
| 309 | initialBinding?.dependencies(); | 233 | initialBinding?.dependencies(); |
| 310 | if (getPages != null) { | 234 | if (getPages != null) { |
| 311 | Get.addPages(getPages!); | 235 | Get.addPages(getPages!); |
| 236 | + } else { | ||
| 237 | + Get.addPage( | ||
| 238 | + GetPage( | ||
| 239 | + name: _cleanRouteName("/${home.runtimeType}"), | ||
| 240 | + page: () => home!, | ||
| 241 | + ), | ||
| 242 | + ); | ||
| 312 | } | 243 | } |
| 313 | 244 | ||
| 314 | //Get.setDefaultDelegate(routerDelegate); | 245 | //Get.setDefaultDelegate(routerDelegate); |
| @@ -325,10 +256,23 @@ class GetMaterialApp extends StatelessWidget { | @@ -325,10 +256,23 @@ class GetMaterialApp extends StatelessWidget { | ||
| 325 | transitionDuration ?? Get.defaultTransitionDuration, | 256 | transitionDuration ?? Get.defaultTransitionDuration, |
| 326 | ); | 257 | ); |
| 327 | }, | 258 | }, |
| 328 | - builder: (_) => routerDelegate != null | ||
| 329 | - ? MaterialApp.router( | ||
| 330 | - routerDelegate: routerDelegate!, | ||
| 331 | - routeInformationParser: routeInformationParser!, | 259 | + builder: (_) { |
| 260 | + final routerDelegate = Get.createDelegate( | ||
| 261 | + pages: getPages ?? [], | ||
| 262 | + notFoundRoute: unknownRoute, | ||
| 263 | + navigatorKey: navigatorKey, | ||
| 264 | + navigatorObservers: (navigatorObservers == null | ||
| 265 | + ? <NavigatorObserver>[GetObserver(routingCallback, Get.routing)] | ||
| 266 | + : <NavigatorObserver>[GetObserver(routingCallback, Get.routing)] | ||
| 267 | + ..addAll(navigatorObservers!))); | ||
| 268 | + final routeInformationParser = Get.createInformationParser( | ||
| 269 | + initialRoute: initialRoute ?? | ||
| 270 | + getPages?.first.name ?? | ||
| 271 | + _cleanRouteName("/${home.runtimeType}"), | ||
| 272 | + ); | ||
| 273 | + return MaterialApp.router( | ||
| 274 | + routerDelegate: routerDelegate, | ||
| 275 | + routeInformationParser: routeInformationParser, | ||
| 332 | backButtonDispatcher: backButtonDispatcher, | 276 | backButtonDispatcher: backButtonDispatcher, |
| 333 | routeInformationProvider: routeInformationProvider, | 277 | routeInformationProvider: routeInformationProvider, |
| 334 | key: _.unikey, | 278 | key: _.unikey, |
| @@ -337,59 +281,10 @@ class GetMaterialApp extends StatelessWidget { | @@ -337,59 +281,10 @@ class GetMaterialApp extends StatelessWidget { | ||
| 337 | onGenerateTitle: onGenerateTitle, | 281 | onGenerateTitle: onGenerateTitle, |
| 338 | color: color, | 282 | color: color, |
| 339 | theme: _.theme ?? theme ?? ThemeData.fallback(), | 283 | theme: _.theme ?? theme ?? ThemeData.fallback(), |
| 340 | - darkTheme: | ||
| 341 | - _.darkTheme ?? darkTheme ?? theme ?? ThemeData.fallback(), | ||
| 342 | - themeMode: _.themeMode ?? themeMode, | ||
| 343 | - locale: Get.locale ?? locale, | ||
| 344 | - scaffoldMessengerKey: | ||
| 345 | - scaffoldMessengerKey ?? _.scaffoldMessengerKey, | ||
| 346 | - localizationsDelegates: localizationsDelegates, | ||
| 347 | - localeListResolutionCallback: localeListResolutionCallback, | ||
| 348 | - localeResolutionCallback: localeResolutionCallback, | ||
| 349 | - supportedLocales: supportedLocales, | ||
| 350 | - debugShowMaterialGrid: debugShowMaterialGrid, | ||
| 351 | - showPerformanceOverlay: showPerformanceOverlay, | ||
| 352 | - checkerboardRasterCacheImages: checkerboardRasterCacheImages, | ||
| 353 | - checkerboardOffscreenLayers: checkerboardOffscreenLayers, | ||
| 354 | - showSemanticsDebugger: showSemanticsDebugger, | ||
| 355 | - debugShowCheckedModeBanner: debugShowCheckedModeBanner, | ||
| 356 | - shortcuts: shortcuts, | ||
| 357 | - scrollBehavior: scrollBehavior, | ||
| 358 | - useInheritedMediaQuery: useInheritedMediaQuery, | ||
| 359 | - ) | ||
| 360 | - : MaterialApp( | ||
| 361 | - key: _.unikey, | ||
| 362 | - navigatorKey: (navigatorKey == null | ||
| 363 | - ? Get.key | ||
| 364 | - : Get.addKey(navigatorKey!)), | ||
| 365 | - scaffoldMessengerKey: | ||
| 366 | - scaffoldMessengerKey ?? _.scaffoldMessengerKey, | ||
| 367 | - home: home, | ||
| 368 | - routes: routes ?? const <String, WidgetBuilder>{}, | ||
| 369 | - initialRoute: initialRoute, | ||
| 370 | - onGenerateRoute: | ||
| 371 | - (getPages != null ? generator : onGenerateRoute), | ||
| 372 | - onGenerateInitialRoutes: (getPages == null || home != null) | ||
| 373 | - ? onGenerateInitialRoutes | ||
| 374 | - : initialRoutesGenerate, | ||
| 375 | - onUnknownRoute: onUnknownRoute, | ||
| 376 | - navigatorObservers: (navigatorObservers == null | ||
| 377 | - ? <NavigatorObserver>[ | ||
| 378 | - GetObserver(routingCallback, Get.routing) | ||
| 379 | - ] | ||
| 380 | - : <NavigatorObserver>[ | ||
| 381 | - GetObserver(routingCallback, Get.routing) | ||
| 382 | - ] | ||
| 383 | - ..addAll(navigatorObservers!)), | ||
| 384 | - builder: defaultBuilder, | ||
| 385 | - title: title, | ||
| 386 | - onGenerateTitle: onGenerateTitle, | ||
| 387 | - color: color, | ||
| 388 | - theme: _.theme ?? theme ?? ThemeData.fallback(), | ||
| 389 | - darkTheme: | ||
| 390 | - _.darkTheme ?? darkTheme ?? theme ?? ThemeData.fallback(), | 284 | + darkTheme: _.darkTheme ?? darkTheme ?? theme ?? ThemeData.fallback(), |
| 391 | themeMode: _.themeMode ?? themeMode, | 285 | themeMode: _.themeMode ?? themeMode, |
| 392 | locale: Get.locale ?? locale, | 286 | locale: Get.locale ?? locale, |
| 287 | + scaffoldMessengerKey: scaffoldMessengerKey ?? _.scaffoldMessengerKey, | ||
| 393 | localizationsDelegates: localizationsDelegates, | 288 | localizationsDelegates: localizationsDelegates, |
| 394 | localeListResolutionCallback: localeListResolutionCallback, | 289 | localeListResolutionCallback: localeListResolutionCallback, |
| 395 | localeResolutionCallback: localeResolutionCallback, | 290 | localeResolutionCallback: localeResolutionCallback, |
| @@ -403,9 +298,8 @@ class GetMaterialApp extends StatelessWidget { | @@ -403,9 +298,8 @@ class GetMaterialApp extends StatelessWidget { | ||
| 403 | shortcuts: shortcuts, | 298 | shortcuts: shortcuts, |
| 404 | scrollBehavior: scrollBehavior, | 299 | scrollBehavior: scrollBehavior, |
| 405 | useInheritedMediaQuery: useInheritedMediaQuery, | 300 | useInheritedMediaQuery: useInheritedMediaQuery, |
| 406 | - // actions: actions, | ||
| 407 | - ), | ||
| 408 | ); | 301 | ); |
| 302 | + }); | ||
| 409 | 303 | ||
| 410 | Widget defaultBuilder(BuildContext context, Widget? child) { | 304 | Widget defaultBuilder(BuildContext context, Widget? child) { |
| 411 | return Directionality( | 305 | return Directionality( |
| @@ -423,12 +317,12 @@ class GetMaterialApp extends StatelessWidget { | @@ -423,12 +317,12 @@ class GetMaterialApp extends StatelessWidget { | ||
| 423 | return PageRedirect(settings: settings, unknownRoute: unknownRoute).page(); | 317 | return PageRedirect(settings: settings, unknownRoute: unknownRoute).page(); |
| 424 | } | 318 | } |
| 425 | 319 | ||
| 426 | - List<Route<dynamic>> initialRoutesGenerate(String name) { | ||
| 427 | - return [ | ||
| 428 | - PageRedirect( | ||
| 429 | - settings: RouteSettings(name: name), | ||
| 430 | - unknownRoute: unknownRoute, | ||
| 431 | - ).page() | ||
| 432 | - ]; | ||
| 433 | - } | 320 | + // List<Route<dynamic>> initialRoutesGenerate(String name) { |
| 321 | + // return [ | ||
| 322 | + // PageRedirect( | ||
| 323 | + // settings: RouteSettings(name: name), | ||
| 324 | + // unknownRoute: unknownRoute, | ||
| 325 | + // ).page() | ||
| 326 | + // ]; | ||
| 327 | + // } | ||
| 434 | } | 328 | } |
| @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; | @@ -2,7 +2,9 @@ import 'package:flutter/material.dart'; | ||
| 2 | 2 | ||
| 3 | import '../../../get.dart'; | 3 | import '../../../get.dart'; |
| 4 | 4 | ||
| 5 | -class GetMaterialController extends SuperController { | 5 | +class GetMaterialController extends FullLifeCycleController { |
| 6 | + static GetMaterialController get to => Get.find(); | ||
| 7 | + | ||
| 6 | bool testMode = false; | 8 | bool testMode = false; |
| 7 | Key? unikey; | 9 | Key? unikey; |
| 8 | ThemeData? theme; | 10 | ThemeData? theme; |
| @@ -49,18 +51,6 @@ class GetMaterialController extends SuperController { | @@ -49,18 +51,6 @@ class GetMaterialController extends SuperController { | ||
| 49 | }); | 51 | }); |
| 50 | } | 52 | } |
| 51 | 53 | ||
| 52 | - @override | ||
| 53 | - void onDetached() {} | ||
| 54 | - | ||
| 55 | - @override | ||
| 56 | - void onInactive() {} | ||
| 57 | - | ||
| 58 | - @override | ||
| 59 | - void onPaused() {} | ||
| 60 | - | ||
| 61 | - @override | ||
| 62 | - void onResumed() {} | ||
| 63 | - | ||
| 64 | void restartApp() { | 54 | void restartApp() { |
| 65 | unikey = UniqueKey(); | 55 | unikey = UniqueKey(); |
| 66 | update(); | 56 | update(); |
| @@ -32,7 +32,7 @@ mixin PageRouteReportMixin<T> on Route<T> { | @@ -32,7 +32,7 @@ mixin PageRouteReportMixin<T> on Route<T> { | ||
| 32 | } | 32 | } |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | -class GetPageRoute<T> extends MaterialPageRoute<T> | 35 | +class GetPageRoute<T> extends PageRoute<T> |
| 36 | with GetPageRouteTransitionMixin<T>, PageRouteReportMixin { | 36 | with GetPageRouteTransitionMixin<T>, PageRouteReportMixin { |
| 37 | /// Creates a page route for use in an iOS designed app. | 37 | /// Creates a page route for use in an iOS designed app. |
| 38 | /// | 38 | /// |
| @@ -51,7 +51,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | @@ -51,7 +51,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | ||
| 51 | this.customTransition, | 51 | this.customTransition, |
| 52 | this.barrierDismissible = false, | 52 | this.barrierDismissible = false, |
| 53 | this.barrierColor, | 53 | this.barrierColor, |
| 54 | - this.binding, | 54 | + this.bindings, |
| 55 | this.binds, | 55 | this.binds, |
| 56 | this.routeName, | 56 | this.routeName, |
| 57 | this.page, | 57 | this.page, |
| @@ -64,7 +64,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | @@ -64,7 +64,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | ||
| 64 | }) : super( | 64 | }) : super( |
| 65 | settings: settings, | 65 | settings: settings, |
| 66 | fullscreenDialog: fullscreenDialog, | 66 | fullscreenDialog: fullscreenDialog, |
| 67 | - builder: (context) => Container(), | 67 | + // builder: (context) => Container(), |
| 68 | ); | 68 | ); |
| 69 | 69 | ||
| 70 | @override | 70 | @override |
| @@ -73,7 +73,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | @@ -73,7 +73,7 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | ||
| 73 | final String? routeName; | 73 | final String? routeName; |
| 74 | //final String reference; | 74 | //final String reference; |
| 75 | final CustomTransition? customTransition; | 75 | final CustomTransition? customTransition; |
| 76 | - final BindingsInterface? binding; | 76 | + final List<BindingsInterface>? bindings; |
| 77 | final Map<String, String>? parameter; | 77 | final Map<String, String>? parameter; |
| 78 | final List<Bind>? binds; | 78 | final List<Bind>? binds; |
| 79 | 79 | ||
| @@ -118,11 +118,11 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | @@ -118,11 +118,11 @@ class GetPageRoute<T> extends MaterialPageRoute<T> | ||
| 118 | ]; | 118 | ]; |
| 119 | 119 | ||
| 120 | final localbindings = [ | 120 | final localbindings = [ |
| 121 | - if (binding != null) ...<BindingsInterface>[binding!], | 121 | + if (bindings != null) ...bindings!, |
| 122 | ]; | 122 | ]; |
| 123 | 123 | ||
| 124 | final bindingsToBind = middlewareRunner | 124 | final bindingsToBind = middlewareRunner |
| 125 | - .runOnBindingsStart(binding != null ? localbindings : localbinds); | 125 | + .runOnBindingsStart(bindings != null ? localbindings : localbinds); |
| 126 | 126 | ||
| 127 | /// Retrocompatibility workaround, remove this when Bindings api | 127 | /// Retrocompatibility workaround, remove this when Bindings api |
| 128 | /// have been removed | 128 | /// have been removed |
| @@ -35,7 +35,7 @@ class GetInformationParser extends RouteInformationParser<RouteDecoder> { | @@ -35,7 +35,7 @@ class GetInformationParser extends RouteInformationParser<RouteDecoder> { | ||
| 35 | @override | 35 | @override |
| 36 | RouteInformation restoreRouteInformation(RouteDecoder config) { | 36 | RouteInformation restoreRouteInformation(RouteDecoder config) { |
| 37 | return RouteInformation( | 37 | return RouteInformation( |
| 38 | - location: config.arguments?.name, | 38 | + location: config.pageSettings?.name, |
| 39 | state: null, | 39 | state: null, |
| 40 | ); | 40 | ); |
| 41 | } | 41 | } |
| 1 | import 'package:flutter/widgets.dart'; | 1 | import 'package:flutter/widgets.dart'; |
| 2 | 2 | ||
| 3 | -import '../../../get_state_manager/src/simple/get_state.dart'; | 3 | +import '../../../get_instance/src/bindings_interface.dart'; |
| 4 | import '../routes/get_route.dart'; | 4 | import '../routes/get_route.dart'; |
| 5 | import '../routes/transitions_type.dart'; | 5 | import '../routes/transitions_type.dart'; |
| 6 | 6 | ||
| @@ -15,7 +15,7 @@ mixin IGetNavigation { | @@ -15,7 +15,7 @@ mixin IGetNavigation { | ||
| 15 | String? routeName, | 15 | String? routeName, |
| 16 | bool fullscreenDialog = false, | 16 | bool fullscreenDialog = false, |
| 17 | dynamic arguments, | 17 | dynamic arguments, |
| 18 | - Binding? binding, | 18 | + List<BindingsInterface>? bindings, |
| 19 | bool preventDuplicates = true, | 19 | bool preventDuplicates = true, |
| 20 | bool? popGesture, | 20 | bool? popGesture, |
| 21 | bool showCupertinoParallax = true, | 21 | bool showCupertinoParallax = true, |
| @@ -32,7 +32,7 @@ mixin IGetNavigation { | @@ -32,7 +32,7 @@ mixin IGetNavigation { | ||
| 32 | String? routeName, | 32 | String? routeName, |
| 33 | bool fullscreenDialog = false, | 33 | bool fullscreenDialog = false, |
| 34 | dynamic arguments, | 34 | dynamic arguments, |
| 35 | - Binding? binding, | 35 | + List<BindingsInterface>? bindings, |
| 36 | bool preventDuplicates = true, | 36 | bool preventDuplicates = true, |
| 37 | bool? popGesture, | 37 | bool? popGesture, |
| 38 | bool showCupertinoParallax = true, | 38 | bool showCupertinoParallax = true, |
| @@ -47,7 +47,7 @@ mixin IGetNavigation { | @@ -47,7 +47,7 @@ mixin IGetNavigation { | ||
| 47 | int? id, | 47 | int? id, |
| 48 | String? routeName, | 48 | String? routeName, |
| 49 | dynamic arguments, | 49 | dynamic arguments, |
| 50 | - Binding? binding, | 50 | + List<BindingsInterface>? bindings, |
| 51 | bool fullscreenDialog = false, | 51 | bool fullscreenDialog = false, |
| 52 | Transition? transition, | 52 | Transition? transition, |
| 53 | Curve? curve, | 53 | Curve? curve, |
| @@ -3,7 +3,6 @@ import 'dart:async'; | @@ -3,7 +3,6 @@ import 'dart:async'; | ||
| 3 | import 'package:flutter/cupertino.dart'; | 3 | import 'package:flutter/cupertino.dart'; |
| 4 | import 'package:flutter/material.dart'; | 4 | import 'package:flutter/material.dart'; |
| 5 | 5 | ||
| 6 | -import '../../../get_core/src/get_main.dart'; | ||
| 7 | import '../../../get_instance/src/bindings_interface.dart'; | 6 | import '../../../get_instance/src/bindings_interface.dart'; |
| 8 | import '../../../get_state_manager/src/simple/get_state.dart'; | 7 | import '../../../get_state_manager/src/simple/get_state.dart'; |
| 9 | import '../../get_navigation.dart'; | 8 | import '../../get_navigation.dart'; |
| @@ -20,7 +19,8 @@ class GetPage<T> extends Page<T> { | @@ -20,7 +19,8 @@ class GetPage<T> extends Page<T> { | ||
| 20 | final bool maintainState; | 19 | final bool maintainState; |
| 21 | final bool opaque; | 20 | final bool opaque; |
| 22 | final double Function(BuildContext context)? gestureWidth; | 21 | final double Function(BuildContext context)? gestureWidth; |
| 23 | - final BindingsInterface? binding; | 22 | + //final BindingsInterface? binding; |
| 23 | + final List<BindingsInterface>? bindings; | ||
| 24 | final List<Bind> binds; | 24 | final List<Bind> binds; |
| 25 | final CustomTransition? customTransition; | 25 | final CustomTransition? customTransition; |
| 26 | final Duration? transitionDuration; | 26 | final Duration? transitionDuration; |
| @@ -61,7 +61,7 @@ class GetPage<T> extends Page<T> { | @@ -61,7 +61,7 @@ class GetPage<T> extends Page<T> { | ||
| 61 | this.opaque = true, | 61 | this.opaque = true, |
| 62 | this.transitionDuration, | 62 | this.transitionDuration, |
| 63 | this.popGesture, | 63 | this.popGesture, |
| 64 | - this.binding, | 64 | + this.bindings = const [], |
| 65 | this.binds = const [], | 65 | this.binds = const [], |
| 66 | this.transition, | 66 | this.transition, |
| 67 | this.customTransition, | 67 | this.customTransition, |
| @@ -81,7 +81,7 @@ class GetPage<T> extends Page<T> { | @@ -81,7 +81,7 @@ class GetPage<T> extends Page<T> { | ||
| 81 | super( | 81 | super( |
| 82 | key: ValueKey(name), | 82 | key: ValueKey(name), |
| 83 | name: name, | 83 | name: name, |
| 84 | - arguments: Get.arguments, | 84 | + // arguments: Get.arguments, |
| 85 | ); | 85 | ); |
| 86 | // settings = RouteSettings(name: name, arguments: Get.arguments); | 86 | // settings = RouteSettings(name: name, arguments: Get.arguments); |
| 87 | 87 | ||
| @@ -96,7 +96,8 @@ class GetPage<T> extends Page<T> { | @@ -96,7 +96,8 @@ class GetPage<T> extends Page<T> { | ||
| 96 | Alignment? alignment, | 96 | Alignment? alignment, |
| 97 | bool? maintainState, | 97 | bool? maintainState, |
| 98 | bool? opaque, | 98 | bool? opaque, |
| 99 | - BindingsInterface? binding, | 99 | + List<BindingsInterface>? bindings, |
| 100 | + // BindingsInterface? binding, | ||
| 100 | List<Bind>? binds, | 101 | List<Bind>? binds, |
| 101 | CustomTransition? customTransition, | 102 | CustomTransition? customTransition, |
| 102 | Duration? transitionDuration, | 103 | Duration? transitionDuration, |
| @@ -126,7 +127,7 @@ class GetPage<T> extends Page<T> { | @@ -126,7 +127,7 @@ class GetPage<T> extends Page<T> { | ||
| 126 | alignment: alignment ?? this.alignment, | 127 | alignment: alignment ?? this.alignment, |
| 127 | maintainState: maintainState ?? this.maintainState, | 128 | maintainState: maintainState ?? this.maintainState, |
| 128 | opaque: opaque ?? this.opaque, | 129 | opaque: opaque ?? this.opaque, |
| 129 | - binding: binding ?? this.binding, | 130 | + bindings: bindings ?? this.bindings, |
| 130 | binds: binds ?? this.binds, | 131 | binds: binds ?? this.binds, |
| 131 | customTransition: customTransition ?? this.customTransition, | 132 | customTransition: customTransition ?? this.customTransition, |
| 132 | transitionDuration: transitionDuration ?? this.transitionDuration, | 133 | transitionDuration: transitionDuration ?? this.transitionDuration, |
| @@ -3,7 +3,7 @@ import 'dart:async'; | @@ -3,7 +3,7 @@ import 'dart:async'; | ||
| 3 | import 'package:flutter/foundation.dart'; | 3 | import 'package:flutter/foundation.dart'; |
| 4 | import 'package:flutter/material.dart'; | 4 | import 'package:flutter/material.dart'; |
| 5 | 5 | ||
| 6 | -import '../../../get_state_manager/src/simple/get_state.dart'; | 6 | +import '../../../get_instance/src/bindings_interface.dart'; |
| 7 | import '../../../get_state_manager/src/simple/list_notifier.dart'; | 7 | import '../../../get_state_manager/src/simple/list_notifier.dart'; |
| 8 | import '../../../get_utils/src/platform/platform.dart'; | 8 | import '../../../get_utils/src/platform/platform.dart'; |
| 9 | import '../../../route_manager.dart'; | 9 | import '../../../route_manager.dart'; |
| @@ -107,7 +107,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -107,7 +107,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 107 | } | 107 | } |
| 108 | var iterator = config; | 108 | var iterator = config; |
| 109 | for (var item in middlewares) { | 109 | for (var item in middlewares) { |
| 110 | - var redirectRes = await item.redirectDelegate(iterator); | 110 | + var redirectRes = await item.redirect(iterator); |
| 111 | if (redirectRes == null) return null; | 111 | if (redirectRes == null) return null; |
| 112 | iterator = redirectRes; | 112 | iterator = redirectRes; |
| 113 | } | 113 | } |
| @@ -141,15 +141,15 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -141,15 +141,15 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 141 | } | 141 | } |
| 142 | 142 | ||
| 143 | T arguments<T>() { | 143 | T arguments<T>() { |
| 144 | - return currentConfiguration?.arguments?.arguments as T; | 144 | + return currentConfiguration?.pageSettings?.arguments as T; |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | Map<String, String> get parameters { | 147 | Map<String, String> get parameters { |
| 148 | - return currentConfiguration?.arguments?.params ?? {}; | 148 | + return currentConfiguration?.pageSettings?.params ?? {}; |
| 149 | } | 149 | } |
| 150 | 150 | ||
| 151 | PageSettings? get pageSettings { | 151 | PageSettings? get pageSettings { |
| 152 | - return currentConfiguration?.arguments; | 152 | + return currentConfiguration?.pageSettings; |
| 153 | } | 153 | } |
| 154 | 154 | ||
| 155 | Future<T?> _removeHistoryEntry<T>(RouteDecoder entry, T result) async { | 155 | Future<T?> _removeHistoryEntry<T>(RouteDecoder entry, T result) async { |
| @@ -159,11 +159,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -159,11 +159,11 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 159 | Future<void> _pushHistory(RouteDecoder config) async { | 159 | Future<void> _pushHistory(RouteDecoder config) async { |
| 160 | if (config.route!.preventDuplicates) { | 160 | if (config.route!.preventDuplicates) { |
| 161 | final originalEntryIndex = _activePages.indexWhere( | 161 | final originalEntryIndex = _activePages.indexWhere( |
| 162 | - (element) => element.arguments?.name == config.arguments?.name); | 162 | + (element) => element.pageSettings?.name == config.pageSettings?.name); |
| 163 | if (originalEntryIndex >= 0) { | 163 | if (originalEntryIndex >= 0) { |
| 164 | switch (preventDuplicateHandlingMode) { | 164 | switch (preventDuplicateHandlingMode) { |
| 165 | case PreventDuplicateHandlingMode.PopUntilOriginalRoute: | 165 | case PreventDuplicateHandlingMode.PopUntilOriginalRoute: |
| 166 | - popModeUntil(config.arguments!.name, popMode: PopMode.Page); | 166 | + popModeUntil(config.pageSettings!.name, popMode: PopMode.Page); |
| 167 | break; | 167 | break; |
| 168 | case PreventDuplicateHandlingMode.ReorderRoutes: | 168 | case PreventDuplicateHandlingMode.ReorderRoutes: |
| 169 | await _unsafeHistoryRemoveAt(originalEntryIndex, null); | 169 | await _unsafeHistoryRemoveAt(originalEntryIndex, null); |
| @@ -207,7 +207,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -207,7 +207,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 207 | if (prevHistoryEntry != null) { | 207 | if (prevHistoryEntry != null) { |
| 208 | //if so, pop the entire _activePages entry | 208 | //if so, pop the entire _activePages entry |
| 209 | final newLocation = remaining.last.name; | 209 | final newLocation = remaining.last.name; |
| 210 | - final prevLocation = prevHistoryEntry.arguments?.name; | 210 | + final prevLocation = prevHistoryEntry.pageSettings?.name; |
| 211 | if (newLocation == prevLocation) { | 211 | if (newLocation == prevLocation) { |
| 212 | //pop the entire _activePages entry | 212 | //pop the entire _activePages entry |
| 213 | return await _popHistory(result); | 213 | return await _popHistory(result); |
| @@ -301,10 +301,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -301,10 +301,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 301 | key: navigatorKey, | 301 | key: navigatorKey, |
| 302 | onPopPage: _onPopVisualRoute, | 302 | onPopPage: _onPopVisualRoute, |
| 303 | pages: pages.toList(), | 303 | pages: pages.toList(), |
| 304 | - observers: [ | ||
| 305 | - GetObserver(), | ||
| 306 | - ...?navigatorObservers, | ||
| 307 | - ], | 304 | + observers: navigatorObservers, |
| 308 | transitionDelegate: | 305 | transitionDelegate: |
| 309 | transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), | 306 | transitionDelegate ?? const DefaultTransitionDelegate<dynamic>(), |
| 310 | ); | 307 | ); |
| @@ -353,7 +350,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -353,7 +350,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 353 | String? routeName, | 350 | String? routeName, |
| 354 | bool fullscreenDialog = false, | 351 | bool fullscreenDialog = false, |
| 355 | dynamic arguments, | 352 | dynamic arguments, |
| 356 | - Binding? binding, | 353 | + List<BindingsInterface>? bindings, |
| 357 | bool preventDuplicates = true, | 354 | bool preventDuplicates = true, |
| 358 | bool? popGesture, | 355 | bool? popGesture, |
| 359 | bool showCupertinoParallax = true, | 356 | bool showCupertinoParallax = true, |
| @@ -376,7 +373,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -376,7 +373,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 376 | transition: transition ?? Get.defaultTransition, | 373 | transition: transition ?? Get.defaultTransition, |
| 377 | curve: curve ?? Get.defaultTransitionCurve, | 374 | curve: curve ?? Get.defaultTransitionCurve, |
| 378 | fullscreenDialog: fullscreenDialog, | 375 | fullscreenDialog: fullscreenDialog, |
| 379 | - binding: binding, | 376 | + bindings: bindings, |
| 380 | transitionDuration: duration ?? Get.defaultTransitionDuration, | 377 | transitionDuration: duration ?? Get.defaultTransitionDuration, |
| 381 | preventDuplicateHandlingMode: preventDuplicateHandlingMode, | 378 | preventDuplicateHandlingMode: preventDuplicateHandlingMode, |
| 382 | ); | 379 | ); |
| @@ -404,7 +401,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -404,7 +401,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 404 | String? routeName, | 401 | String? routeName, |
| 405 | bool fullscreenDialog = false, | 402 | bool fullscreenDialog = false, |
| 406 | dynamic arguments, | 403 | dynamic arguments, |
| 407 | - Binding? binding, | 404 | + List<BindingsInterface>? bindings, |
| 408 | bool preventDuplicates = true, | 405 | bool preventDuplicates = true, |
| 409 | bool? popGesture, | 406 | bool? popGesture, |
| 410 | bool showCupertinoParallax = true, | 407 | bool showCupertinoParallax = true, |
| @@ -421,7 +418,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -421,7 +418,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 421 | transition: transition ?? Get.defaultTransition, | 418 | transition: transition ?? Get.defaultTransition, |
| 422 | curve: curve ?? Get.defaultTransitionCurve, | 419 | curve: curve ?? Get.defaultTransitionCurve, |
| 423 | fullscreenDialog: fullscreenDialog, | 420 | fullscreenDialog: fullscreenDialog, |
| 424 | - binding: binding, | 421 | + bindings: bindings, |
| 425 | transitionDuration: duration ?? Get.defaultTransitionDuration, | 422 | transitionDuration: duration ?? Get.defaultTransitionDuration, |
| 426 | ); | 423 | ); |
| 427 | 424 | ||
| @@ -438,7 +435,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -438,7 +435,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 438 | int? id, | 435 | int? id, |
| 439 | String? routeName, | 436 | String? routeName, |
| 440 | dynamic arguments, | 437 | dynamic arguments, |
| 441 | - Binding? binding, | 438 | + List<BindingsInterface>? bindings, |
| 442 | bool fullscreenDialog = false, | 439 | bool fullscreenDialog = false, |
| 443 | Transition? transition, | 440 | Transition? transition, |
| 444 | Curve? curve, | 441 | Curve? curve, |
| @@ -457,7 +454,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -457,7 +454,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 457 | transition: transition ?? Get.defaultTransition, | 454 | transition: transition ?? Get.defaultTransition, |
| 458 | curve: curve ?? Get.defaultTransitionCurve, | 455 | curve: curve ?? Get.defaultTransitionCurve, |
| 459 | fullscreenDialog: fullscreenDialog, | 456 | fullscreenDialog: fullscreenDialog, |
| 460 | - binding: binding, | 457 | + bindings: bindings, |
| 461 | transitionDuration: duration ?? Get.defaultTransitionDuration, | 458 | transitionDuration: duration ?? Get.defaultTransitionDuration, |
| 462 | ); | 459 | ); |
| 463 | 460 | ||
| @@ -607,7 +604,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | @@ -607,7 +604,7 @@ class GetDelegate extends RouterDelegate<RouteDecoder> | ||
| 607 | var iterator = currentConfiguration; | 604 | var iterator = currentConfiguration; |
| 608 | while (_canPop(popMode) && | 605 | while (_canPop(popMode) && |
| 609 | iterator != null && | 606 | iterator != null && |
| 610 | - iterator.arguments?.name != fullRoute) { | 607 | + iterator.pageSettings?.name != fullRoute) { |
| 611 | await _pop(popMode, null); | 608 | await _pop(popMode, null); |
| 612 | // replace iterator | 609 | // replace iterator |
| 613 | iterator = currentConfiguration; | 610 | iterator = currentConfiguration; |
| @@ -98,7 +98,7 @@ class GetObserver extends NavigatorObserver { | @@ -98,7 +98,7 @@ class GetObserver extends NavigatorObserver { | ||
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | RouterReportManager.instance.reportCurrentRoute(route); | 100 | RouterReportManager.instance.reportCurrentRoute(route); |
| 101 | - _routeSend?.update((value) { | 101 | + _routeSend!.update((value) { |
| 102 | // Only PageRoute is allowed to change current value | 102 | // Only PageRoute is allowed to change current value |
| 103 | if (route is PageRoute) { | 103 | if (route is PageRoute) { |
| 104 | value.current = newRoute.name ?? ''; | 104 | value.current = newRoute.name ?? ''; |
| 1 | import '../../../route_manager.dart'; | 1 | import '../../../route_manager.dart'; |
| 2 | -import 'page_settings.dart'; | ||
| 3 | 2 | ||
| 4 | class RouteDecoder { | 3 | class RouteDecoder { |
| 5 | const RouteDecoder( | 4 | const RouteDecoder( |
| 6 | this.currentTreeBranch, | 5 | this.currentTreeBranch, |
| 7 | - this.arguments, | 6 | + this.pageSettings, |
| 8 | ); | 7 | ); |
| 9 | final List<GetPage> currentTreeBranch; | 8 | final List<GetPage> currentTreeBranch; |
| 10 | - final PageSettings? arguments; | 9 | + final PageSettings? pageSettings; |
| 11 | 10 | ||
| 12 | factory RouteDecoder.fromRoute(String location) { | 11 | factory RouteDecoder.fromRoute(String location) { |
| 13 | var uri = Uri.parse(location); | 12 | var uri = Uri.parse(location); |
| @@ -38,7 +37,20 @@ class RouteDecoder { | @@ -38,7 +37,20 @@ class RouteDecoder { | ||
| 38 | 37 | ||
| 39 | List<GetPage>? get currentChildrens => route?.children; | 38 | List<GetPage>? get currentChildrens => route?.children; |
| 40 | 39 | ||
| 41 | - Map<String, String> get parameters => arguments?.params ?? {}; | 40 | + Map<String, String> get parameters => pageSettings?.params ?? {}; |
| 41 | + | ||
| 42 | + dynamic get args { | ||
| 43 | + return pageSettings?.arguments; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + T? arguments<T>() { | ||
| 47 | + final args = pageSettings?.arguments; | ||
| 48 | + if (args is T) { | ||
| 49 | + return pageSettings?.arguments as T; | ||
| 50 | + } else { | ||
| 51 | + return null; | ||
| 52 | + } | ||
| 53 | + } | ||
| 42 | 54 | ||
| 43 | void replaceArguments(Object? arguments) { | 55 | void replaceArguments(Object? arguments) { |
| 44 | final _route = route; | 56 | final _route = route; |
| @@ -20,21 +20,6 @@ abstract class _RouteMiddleware { | @@ -20,21 +20,6 @@ abstract class _RouteMiddleware { | ||
| 20 | /// {@end-tool} | 20 | /// {@end-tool} |
| 21 | int? priority; | 21 | int? priority; |
| 22 | 22 | ||
| 23 | - /// This function will be called when the page of | ||
| 24 | - /// the called route is being searched for. | ||
| 25 | - /// It take RouteSettings as a result an redirect to the new settings or | ||
| 26 | - /// give it null and there will be no redirecting. | ||
| 27 | - /// {@tool snippet} | ||
| 28 | - /// ```dart | ||
| 29 | - /// GetPage redirect(String route) { | ||
| 30 | - /// final authService = Get.find<AuthService>(); | ||
| 31 | - /// return authService.authed.value ? null : RouteSettings(name: '/login'); | ||
| 32 | - /// } | ||
| 33 | - /// ``` | ||
| 34 | - /// {@end-tool} | ||
| 35 | - RouteSettings? redirect(String route); | ||
| 36 | - | ||
| 37 | - /// Similar to [redirect], | ||
| 38 | /// This function will be called when the router delegate changes the | 23 | /// This function will be called when the router delegate changes the |
| 39 | /// current route. | 24 | /// current route. |
| 40 | /// | 25 | /// |
| @@ -45,13 +30,13 @@ abstract class _RouteMiddleware { | @@ -45,13 +30,13 @@ abstract class _RouteMiddleware { | ||
| 45 | /// and no new routes are pushed. | 30 | /// and no new routes are pushed. |
| 46 | /// {@tool snippet} | 31 | /// {@tool snippet} |
| 47 | /// ```dart | 32 | /// ```dart |
| 48 | - /// GetNavConfig? redirect(GetNavConfig route) { | 33 | + /// RouteDecoder? redirect(RouteDecoder route) { |
| 49 | /// final authService = Get.find<AuthService>(); | 34 | /// final authService = Get.find<AuthService>(); |
| 50 | - /// return authService.authed.value ? null : RouteSettings(name: '/login'); | 35 | + /// return authService.authed.value ? null : RouteDecoder.fromRoute('/login'); |
| 51 | /// } | 36 | /// } |
| 52 | /// ``` | 37 | /// ``` |
| 53 | /// {@end-tool} | 38 | /// {@end-tool} |
| 54 | - Future<RouteDecoder?> redirectDelegate(RouteDecoder route); | 39 | + Future<RouteDecoder?> redirect(RouteDecoder route); |
| 55 | 40 | ||
| 56 | /// This function will be called when this Page is called | 41 | /// This function will be called when this Page is called |
| 57 | /// you can use it to change something about the page or give it new page | 42 | /// you can use it to change something about the page or give it new page |
| @@ -101,8 +86,8 @@ class GetMiddleware implements _RouteMiddleware { | @@ -101,8 +86,8 @@ class GetMiddleware implements _RouteMiddleware { | ||
| 101 | 86 | ||
| 102 | GetMiddleware({this.priority}); | 87 | GetMiddleware({this.priority}); |
| 103 | 88 | ||
| 104 | - @override | ||
| 105 | - RouteSettings? redirect(String? route) => null; | 89 | + // @override |
| 90 | + // RouteSettings? redirect(String? route) => null; | ||
| 106 | 91 | ||
| 107 | @override | 92 | @override |
| 108 | GetPage? onPageCalled(GetPage? page) => page; | 93 | GetPage? onPageCalled(GetPage? page) => page; |
| @@ -120,7 +105,7 @@ class GetMiddleware implements _RouteMiddleware { | @@ -120,7 +105,7 @@ class GetMiddleware implements _RouteMiddleware { | ||
| 120 | void onPageDispose() {} | 105 | void onPageDispose() {} |
| 121 | 106 | ||
| 122 | @override | 107 | @override |
| 123 | - Future<RouteDecoder?> redirectDelegate(RouteDecoder route) => | 108 | + Future<RouteDecoder?> redirect(RouteDecoder route) => |
| 124 | SynchronousFuture(route); | 109 | SynchronousFuture(route); |
| 125 | } | 110 | } |
| 126 | 111 | ||
| @@ -144,17 +129,17 @@ class MiddlewareRunner { | @@ -144,17 +129,17 @@ class MiddlewareRunner { | ||
| 144 | return page; | 129 | return page; |
| 145 | } | 130 | } |
| 146 | 131 | ||
| 147 | - RouteSettings? runRedirect(String? route) { | ||
| 148 | - RouteSettings? to; | ||
| 149 | - for (final element in _getMiddlewares()) { | ||
| 150 | - to = element.redirect(route); | ||
| 151 | - if (to != null) { | ||
| 152 | - break; | ||
| 153 | - } | ||
| 154 | - } | ||
| 155 | - Get.log('Redirect to $to'); | ||
| 156 | - return to; | ||
| 157 | - } | 132 | + // RouteSettings? runRedirect(String? route) { |
| 133 | + // RouteSettings? to; | ||
| 134 | + // for (final element in _getMiddlewares()) { | ||
| 135 | + // to = element.redirect(route); | ||
| 136 | + // if (to != null) { | ||
| 137 | + // break; | ||
| 138 | + // } | ||
| 139 | + // } | ||
| 140 | + // Get.log('Redirect to $to'); | ||
| 141 | + // return to; | ||
| 142 | + // } | ||
| 158 | 143 | ||
| 159 | List<R>? runOnBindingsStart<R>(List<R>? bindings) { | 144 | List<R>? runOnBindingsStart<R>(List<R>? bindings) { |
| 160 | _getMiddlewares().forEach((element) { | 145 | _getMiddlewares().forEach((element) { |
| @@ -212,7 +197,7 @@ class PageRedirect { | @@ -212,7 +197,7 @@ class PageRedirect { | ||
| 212 | showCupertinoParallax: _r.showCupertinoParallax, | 197 | showCupertinoParallax: _r.showCupertinoParallax, |
| 213 | gestureWidth: _r.gestureWidth, | 198 | gestureWidth: _r.gestureWidth, |
| 214 | customTransition: _r.customTransition, | 199 | customTransition: _r.customTransition, |
| 215 | - binding: _r.binding, | 200 | + bindings: _r.bindings, |
| 216 | binds: _r.binds, | 201 | binds: _r.binds, |
| 217 | transitionDuration: | 202 | transitionDuration: |
| 218 | _r.transitionDuration ?? Get.defaultTransitionDuration, | 203 | _r.transitionDuration ?? Get.defaultTransitionDuration, |
| @@ -235,13 +220,13 @@ class PageRedirect { | @@ -235,13 +220,13 @@ class PageRedirect { | ||
| 235 | title: _r.title, | 220 | title: _r.title, |
| 236 | maintainState: _r.maintainState, | 221 | maintainState: _r.maintainState, |
| 237 | routeName: _r.name, | 222 | routeName: _r.name, |
| 238 | - settings: _r, | 223 | + settings: settings, |
| 239 | curve: _r.curve, | 224 | curve: _r.curve, |
| 240 | showCupertinoParallax: _r.showCupertinoParallax, | 225 | showCupertinoParallax: _r.showCupertinoParallax, |
| 241 | gestureWidth: _r.gestureWidth, | 226 | gestureWidth: _r.gestureWidth, |
| 242 | opaque: _r.opaque, | 227 | opaque: _r.opaque, |
| 243 | customTransition: _r.customTransition, | 228 | customTransition: _r.customTransition, |
| 244 | - binding: _r.binding, | 229 | + bindings: _r.bindings, |
| 245 | binds: _r.binds, | 230 | binds: _r.binds, |
| 246 | transitionDuration: | 231 | transitionDuration: |
| 247 | _r.transitionDuration ?? Get.defaultTransitionDuration, | 232 | _r.transitionDuration ?? Get.defaultTransitionDuration, |
| @@ -274,11 +259,11 @@ class PageRedirect { | @@ -274,11 +259,11 @@ class PageRedirect { | ||
| 274 | if (match.route!.middlewares == null || match.route!.middlewares!.isEmpty) { | 259 | if (match.route!.middlewares == null || match.route!.middlewares!.isEmpty) { |
| 275 | return false; | 260 | return false; |
| 276 | } | 261 | } |
| 277 | - final newSettings = runner.runRedirect(settings!.name); | ||
| 278 | - if (newSettings == null) { | ||
| 279 | - return false; | ||
| 280 | - } | ||
| 281 | - settings = newSettings; | 262 | + // final newSettings = runner.runRedirect(settings!.name); |
| 263 | + // if (newSettings == null) { | ||
| 264 | + // return false; | ||
| 265 | + // } | ||
| 266 | + // settings = newSettings; | ||
| 282 | return true; | 267 | return true; |
| 283 | } | 268 | } |
| 284 | 269 |
| @@ -137,7 +137,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | @@ -137,7 +137,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | ||
| 137 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); | 137 | return (emptyWidget?.call(rDelegate) ?? SizedBox.shrink()); |
| 138 | }, | 138 | }, |
| 139 | pickPages: pickPages, | 139 | pickPages: pickPages, |
| 140 | - delegate: delegate ?? Get.rootController.rootDelegate, | 140 | + delegate: delegate ?? GetMaterialController.to.rootDelegate, |
| 141 | ); | 141 | ); |
| 142 | 142 | ||
| 143 | GetRouterOutlet.builder({ | 143 | GetRouterOutlet.builder({ |
| @@ -154,16 +154,18 @@ extension ListExtension<E> on List<E> { | @@ -154,16 +154,18 @@ extension ListExtension<E> on List<E> { | ||
| 154 | // (this as RxList)._value; | 154 | // (this as RxList)._value; |
| 155 | // } | 155 | // } |
| 156 | 156 | ||
| 157 | - clear(); | 157 | + if (this is RxList) { |
| 158 | + (this as RxList).value.clear(); | ||
| 159 | + } | ||
| 158 | add(item); | 160 | add(item); |
| 159 | } | 161 | } |
| 160 | 162 | ||
| 161 | /// Replaces all existing items of this list with [items] | 163 | /// Replaces all existing items of this list with [items] |
| 162 | void assignAll(Iterable<E> items) { | 164 | void assignAll(Iterable<E> items) { |
| 163 | - // if (this is RxList) { | ||
| 164 | - // (this as RxList)._value; | ||
| 165 | - // } | ||
| 166 | - clear(); | 165 | + if (this is RxList) { |
| 166 | + (this as RxList).value.clear(); | ||
| 167 | + } | ||
| 168 | + //clear(); | ||
| 167 | addAll(items); | 169 | addAll(items); |
| 168 | } | 170 | } |
| 169 | } | 171 | } |
| @@ -26,25 +26,25 @@ extension _Empty on Object { | @@ -26,25 +26,25 @@ extension _Empty on Object { | ||
| 26 | 26 | ||
| 27 | mixin StateMixin<T> on ListNotifier { | 27 | mixin StateMixin<T> on ListNotifier { |
| 28 | late T _value; | 28 | late T _value; |
| 29 | - GetState<T>? _status; | 29 | + GetStatus<T>? _status; |
| 30 | 30 | ||
| 31 | void _fillInitialStatus() { | 31 | void _fillInitialStatus() { |
| 32 | _status = (value == null || value!._isEmpty()) | 32 | _status = (value == null || value!._isEmpty()) |
| 33 | - ? GetState<T>.loading() | ||
| 34 | - : GetState<T>.success(_value); | 33 | + ? GetStatus<T>.loading() |
| 34 | + : GetStatus<T>.success(_value); | ||
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | - GetState<T> get status { | 37 | + GetStatus<T> get status { |
| 38 | reportRead(); | 38 | reportRead(); |
| 39 | - return _status ??= _status = GetState.loading(); | 39 | + return _status ??= _status = GetStatus.loading(); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | T get state => value; | 42 | T get state => value; |
| 43 | 43 | ||
| 44 | - set status(GetState<T> newStatus) { | 44 | + set status(GetStatus<T> newStatus) { |
| 45 | if (newStatus == status) return; | 45 | if (newStatus == status) return; |
| 46 | _status = newStatus; | 46 | _status = newStatus; |
| 47 | - if (newStatus is SuccessState<T>) { | 47 | + if (newStatus is SuccessStatus<T>) { |
| 48 | _value = newStatus.data!; | 48 | _value = newStatus.data!; |
| 49 | return; | 49 | return; |
| 50 | } | 50 | } |
| @@ -69,14 +69,14 @@ mixin StateMixin<T> on ListNotifier { | @@ -69,14 +69,14 @@ mixin StateMixin<T> on ListNotifier { | ||
| 69 | final compute = body(); | 69 | final compute = body(); |
| 70 | compute().then((newValue) { | 70 | compute().then((newValue) { |
| 71 | if ((newValue == null || newValue._isEmpty()) && useEmpty) { | 71 | if ((newValue == null || newValue._isEmpty()) && useEmpty) { |
| 72 | - status = GetState<T>.loading(); | 72 | + status = GetStatus<T>.loading(); |
| 73 | } else { | 73 | } else { |
| 74 | - status = GetState<T>.success(newValue); | 74 | + status = GetStatus<T>.success(newValue); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | refresh(); | 77 | refresh(); |
| 78 | }, onError: (err) { | 78 | }, onError: (err) { |
| 79 | - status = GetState.error(errorMessage ?? err.toString()); | 79 | + status = GetStatus.error(errorMessage ?? err.toString()); |
| 80 | refresh(); | 80 | refresh(); |
| 81 | }); | 81 | }); |
| 82 | } | 82 | } |
| @@ -91,6 +91,8 @@ class GetListenable<T> extends ListNotifierSingle implements RxInterface<T> { | @@ -91,6 +91,8 @@ class GetListenable<T> extends ListNotifierSingle implements RxInterface<T> { | ||
| 91 | if (_controller == null) { | 91 | if (_controller == null) { |
| 92 | _controller = StreamController<T>.broadcast(); | 92 | _controller = StreamController<T>.broadcast(); |
| 93 | addListener(_streamListener); | 93 | addListener(_streamListener); |
| 94 | + | ||
| 95 | + ///TODO: report to controller dispose | ||
| 94 | } | 96 | } |
| 95 | return _controller!; | 97 | return _controller!; |
| 96 | } | 98 | } |
| @@ -231,39 +233,39 @@ extension StateExt<T> on StateMixin<T> { | @@ -231,39 +233,39 @@ extension StateExt<T> on StateMixin<T> { | ||
| 231 | 233 | ||
| 232 | typedef NotifierBuilder<T> = Widget Function(T state); | 234 | typedef NotifierBuilder<T> = Widget Function(T state); |
| 233 | 235 | ||
| 234 | -abstract class GetState<T> { | ||
| 235 | - const GetState(); | ||
| 236 | - factory GetState.loading() => LoadingState(); | ||
| 237 | - factory GetState.error(String message) => ErrorState(message); | ||
| 238 | - factory GetState.empty() => EmptyState(); | ||
| 239 | - factory GetState.success(T data) => SuccessState(data); | 236 | +abstract class GetStatus<T> { |
| 237 | + const GetStatus(); | ||
| 238 | + factory GetStatus.loading() => LoadingStatus(); | ||
| 239 | + factory GetStatus.error(String message) => ErrorStatus(message); | ||
| 240 | + factory GetStatus.empty() => EmptyStatus(); | ||
| 241 | + factory GetStatus.success(T data) => SuccessStatus(data); | ||
| 240 | } | 242 | } |
| 241 | 243 | ||
| 242 | -class LoadingState<T> extends GetState<T> {} | 244 | +class LoadingStatus<T> extends GetStatus<T> {} |
| 243 | 245 | ||
| 244 | -class SuccessState<T> extends GetState<T> { | 246 | +class SuccessStatus<T> extends GetStatus<T> { |
| 245 | final T data; | 247 | final T data; |
| 246 | 248 | ||
| 247 | - SuccessState(this.data); | 249 | + SuccessStatus(this.data); |
| 248 | } | 250 | } |
| 249 | 251 | ||
| 250 | -class ErrorState<T, S> extends GetState<T> { | 252 | +class ErrorStatus<T, S> extends GetStatus<T> { |
| 251 | final S? error; | 253 | final S? error; |
| 252 | - ErrorState([this.error]); | 254 | + ErrorStatus([this.error]); |
| 253 | } | 255 | } |
| 254 | 256 | ||
| 255 | -class EmptyState<T> extends GetState<T> {} | 257 | +class EmptyStatus<T> extends GetStatus<T> {} |
| 256 | 258 | ||
| 257 | -extension StatusDataExt<T> on GetState<T> { | ||
| 258 | - bool get isLoading => this is LoadingState; | ||
| 259 | - bool get isSuccess => this is SuccessState; | ||
| 260 | - bool get isError => this is ErrorState; | ||
| 261 | - bool get isEmpty => this is EmptyState; | 259 | +extension StatusDataExt<T> on GetStatus<T> { |
| 260 | + bool get isLoading => this is LoadingStatus; | ||
| 261 | + bool get isSuccess => this is SuccessStatus; | ||
| 262 | + bool get isError => this is ErrorStatus; | ||
| 263 | + bool get isEmpty => this is EmptyStatus; | ||
| 262 | bool get isCustom => !isLoading && !isSuccess && !isError && !isEmpty; | 264 | bool get isCustom => !isLoading && !isSuccess && !isError && !isEmpty; |
| 263 | String get errorMessage { | 265 | String get errorMessage { |
| 264 | - final isError = this is ErrorState; | 266 | + final isError = this is ErrorStatus; |
| 265 | if (isError) { | 267 | if (isError) { |
| 266 | - final err = this as ErrorState; | 268 | + final err = this as ErrorStatus; |
| 267 | if (err.error != null && err.error is String) { | 269 | if (err.error != null && err.error is String) { |
| 268 | return err.error as String; | 270 | return err.error as String; |
| 269 | } | 271 | } |
| @@ -273,8 +275,8 @@ extension StatusDataExt<T> on GetState<T> { | @@ -273,8 +275,8 @@ extension StatusDataExt<T> on GetState<T> { | ||
| 273 | } | 275 | } |
| 274 | 276 | ||
| 275 | T? get data { | 277 | T? get data { |
| 276 | - if (this is SuccessState<T>) { | ||
| 277 | - final success = this as SuccessState<T>; | 278 | + if (this is SuccessStatus<T>) { |
| 279 | + final success = this as SuccessStatus<T>; | ||
| 278 | return success.data; | 280 | return success.data; |
| 279 | } | 281 | } |
| 280 | return null; | 282 | return null; |
| @@ -21,7 +21,7 @@ class ListNotifierGroup = ListNotifier with ListNotifierGroupMixin; | @@ -21,7 +21,7 @@ class ListNotifierGroup = ListNotifier with ListNotifierGroupMixin; | ||
| 21 | /// This mixin add to Listenable the addListener, removerListener and | 21 | /// This mixin add to Listenable the addListener, removerListener and |
| 22 | /// containsListener implementation | 22 | /// containsListener implementation |
| 23 | mixin ListNotifierSingleMixin on Listenable { | 23 | mixin ListNotifierSingleMixin on Listenable { |
| 24 | - List<GetStateUpdate?>? _updaters = <GetStateUpdate?>[]; | 24 | + List<GetStateUpdate>? _updaters = <GetStateUpdate>[]; |
| 25 | 25 | ||
| 26 | @override | 26 | @override |
| 27 | Disposer addListener(GetStateUpdate listener) { | 27 | Disposer addListener(GetStateUpdate listener) { |
| @@ -57,8 +57,9 @@ mixin ListNotifierSingleMixin on Listenable { | @@ -57,8 +57,9 @@ mixin ListNotifierSingleMixin on Listenable { | ||
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | void _notifyUpdate() { | 59 | void _notifyUpdate() { |
| 60 | - for (var element in _updaters!) { | ||
| 61 | - element!(); | 60 | + final list = _updaters?.toList() ?? []; |
| 61 | + for (var element in list) { | ||
| 62 | + element(); | ||
| 62 | } | 63 | } |
| 63 | } | 64 | } |
| 64 | 65 |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | 2 | ||
| 3 | +import 'package:flutter/scheduler.dart'; | ||
| 3 | import 'package:flutter/widgets.dart'; | 4 | import 'package:flutter/widgets.dart'; |
| 4 | 5 | ||
| 5 | import 'list_notifier.dart'; | 6 | import 'list_notifier.dart'; |
| @@ -95,8 +96,26 @@ mixin ObserverComponent on ComponentElement { | @@ -95,8 +96,26 @@ mixin ObserverComponent on ComponentElement { | ||
| 95 | 96 | ||
| 96 | void getUpdate() { | 97 | void getUpdate() { |
| 97 | if (disposers != null) { | 98 | if (disposers != null) { |
| 99 | + _safeRebuild(); | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + Future<bool> _safeRebuild() async { | ||
| 104 | + if (dirty) return false; | ||
| 105 | + if (SchedulerBinding.instance == null) { | ||
| 98 | markNeedsBuild(); | 106 | markNeedsBuild(); |
| 107 | + } else { | ||
| 108 | + // refresh was called during the building | ||
| 109 | + if (SchedulerBinding.instance!.schedulerPhase != SchedulerPhase.idle) { | ||
| 110 | + // Await for the end of build | ||
| 111 | + await SchedulerBinding.instance!.endOfFrame; | ||
| 112 | + if (dirty) return false; | ||
| 99 | } | 113 | } |
| 114 | + | ||
| 115 | + markNeedsBuild(); | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + return true; | ||
| 100 | } | 119 | } |
| 101 | 120 | ||
| 102 | @override | 121 | @override |
| 1 | -import 'package:collection/collection.dart'; | ||
| 2 | import 'package:flutter/material.dart'; | 1 | import 'package:flutter/material.dart'; |
| 3 | 2 | ||
| 4 | extension ContextExt on BuildContext { | 3 | extension ContextExt on BuildContext { |
| @@ -170,3 +169,12 @@ extension ContextExt on BuildContext { | @@ -170,3 +169,12 @@ extension ContextExt on BuildContext { | ||
| 170 | return strictValues.firstOrNull ?? looseValues.first; | 169 | return strictValues.firstOrNull ?? looseValues.first; |
| 171 | } | 170 | } |
| 172 | } | 171 | } |
| 172 | + | ||
| 173 | +extension IterableExt<T> on Iterable<T> { | ||
| 174 | + /// The first element, or `null` if the iterable is empty. | ||
| 175 | + T? get firstOrNull { | ||
| 176 | + var iterator = this.iterator; | ||
| 177 | + if (iterator.moveNext()) return iterator.current; | ||
| 178 | + return null; | ||
| 179 | + } | ||
| 180 | +} |
| 1 | name: get | 1 | name: get |
| 2 | description: Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX. | 2 | description: Open screens/snackbars/dialogs without context, manage states and inject dependencies easily with GetX. |
| 3 | -version: 4.6.1 | 3 | +version: 5.0.0-beta.14 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| 7 | - sdk: '>=2.12.0 <3.0.0' | 7 | + sdk: '>=2.13.0 <3.0.0' |
| 8 | 8 | ||
| 9 | dependencies: | 9 | dependencies: |
| 10 | flutter: | 10 | flutter: |
| @@ -48,9 +48,13 @@ void main() { | @@ -48,9 +48,13 @@ void main() { | ||
| 48 | ), | 48 | ), |
| 49 | )); | 49 | )); |
| 50 | 50 | ||
| 51 | + await tester.pumpAndSettle(); | ||
| 52 | + | ||
| 51 | expect(Get.isBottomSheetOpen, true); | 53 | expect(Get.isBottomSheetOpen, true); |
| 52 | 54 | ||
| 53 | Get.back(); | 55 | Get.back(); |
| 56 | + await tester.pumpAndSettle(); | ||
| 57 | + | ||
| 54 | expect(Get.isBottomSheetOpen, false); | 58 | expect(Get.isBottomSheetOpen, false); |
| 55 | 59 | ||
| 56 | // expect(() => Get.bottomSheet(Container(), isScrollControlled: null), | 60 | // expect(() => Get.bottomSheet(Container(), isScrollControlled: null), |
| @@ -51,7 +51,7 @@ void main() { | @@ -51,7 +51,7 @@ void main() { | ||
| 51 | Get.back(); | 51 | Get.back(); |
| 52 | await tester.pumpAndSettle(); | 52 | await tester.pumpAndSettle(); |
| 53 | 53 | ||
| 54 | - // expect(find.byType(YourDialogWidget), findsNothing); | 54 | + expect(find.byType(YourDialogWidget), findsNothing); |
| 55 | // expect(Get.isDialogOpen, false); | 55 | // expect(Get.isDialogOpen, false); |
| 56 | // await tester.pumpAndSettle(); | 56 | // await tester.pumpAndSettle(); |
| 57 | }); | 57 | }); |
| @@ -47,7 +47,8 @@ void main() { | @@ -47,7 +47,8 @@ void main() { | ||
| 47 | 47 | ||
| 48 | await tester.pumpAndSettle(); | 48 | await tester.pumpAndSettle(); |
| 49 | 49 | ||
| 50 | - expect(Get.rootController.rootDelegate.currentConfiguration?.route?.name, | 50 | + expect( |
| 51 | + GetMaterialController.to.rootDelegate.currentConfiguration?.route?.name, | ||
| 51 | '/404'); | 52 | '/404'); |
| 52 | }); | 53 | }); |
| 53 | 54 | ||
| @@ -124,7 +125,7 @@ void main() { | @@ -124,7 +125,7 @@ void main() { | ||
| 124 | ], | 125 | ], |
| 125 | )); | 126 | )); |
| 126 | 127 | ||
| 127 | - await tester.pump(); | 128 | + // await tester.pump(); |
| 128 | 129 | ||
| 129 | Get.toNamed('/second'); | 130 | Get.toNamed('/second'); |
| 130 | await tester.pumpAndSettle(); | 131 | await tester.pumpAndSettle(); |
| @@ -134,6 +135,7 @@ void main() { | @@ -134,6 +135,7 @@ void main() { | ||
| 134 | await tester.pumpAndSettle(); | 135 | await tester.pumpAndSettle(); |
| 135 | 136 | ||
| 136 | expect(find.byType(FirstScreen), findsOneWidget); | 137 | expect(find.byType(FirstScreen), findsOneWidget); |
| 138 | + await tester.pumpAndSettle(); | ||
| 137 | }); | 139 | }); |
| 138 | 140 | ||
| 139 | testWidgets("Get.offAll navigates to provided route", (tester) async { | 141 | testWidgets("Get.offAll navigates to provided route", (tester) async { |
| @@ -243,6 +245,8 @@ void main() { | @@ -243,6 +245,8 @@ void main() { | ||
| 243 | )); | 245 | )); |
| 244 | 246 | ||
| 245 | Get.offAndToNamed('/second'); | 247 | Get.offAndToNamed('/second'); |
| 248 | + | ||
| 249 | + await tester.pumpAndSettle(); | ||
| 246 | Get.back(); | 250 | Get.back(); |
| 247 | 251 | ||
| 248 | await tester.pumpAndSettle(); | 252 | await tester.pumpAndSettle(); |
| @@ -255,6 +259,8 @@ void main() { | @@ -255,6 +259,8 @@ void main() { | ||
| 255 | 259 | ||
| 256 | Get.to(() => FirstScreen()); | 260 | Get.to(() => FirstScreen()); |
| 257 | 261 | ||
| 262 | + await tester.pumpAndSettle(); | ||
| 263 | + | ||
| 258 | Get.offUntil(() => ThirdScreen(), (route) => route.name == '/FirstScreen'); | 264 | Get.offUntil(() => ThirdScreen(), (route) => route.name == '/FirstScreen'); |
| 259 | 265 | ||
| 260 | await tester.pumpAndSettle(); | 266 | await tester.pumpAndSettle(); |
| @@ -268,9 +274,11 @@ void main() { | @@ -268,9 +274,11 @@ void main() { | ||
| 268 | await tester.pumpWidget(Wrapper(child: Container())); | 274 | await tester.pumpWidget(Wrapper(child: Container())); |
| 269 | 275 | ||
| 270 | Get.to(() => FirstScreen()); | 276 | Get.to(() => FirstScreen()); |
| 277 | + await tester.pumpAndSettle(); | ||
| 271 | Get.to(() => SecondScreen()); | 278 | Get.to(() => SecondScreen()); |
| 272 | - Get.rootController.rootDelegate | ||
| 273 | - .offUntil(() => ThirdScreen(), (route) => route.name == '/FirstScreen'); | 279 | + await tester.pumpAndSettle(); |
| 280 | + Get.offUntil(() => ThirdScreen(), (route) => route.name == '/FirstScreen'); | ||
| 281 | + await tester.pumpAndSettle(); | ||
| 274 | Get.back(); | 282 | Get.back(); |
| 275 | 283 | ||
| 276 | await tester.pumpAndSettle(); | 284 | await tester.pumpAndSettle(); |
| @@ -360,11 +368,16 @@ void main() { | @@ -360,11 +368,16 @@ void main() { | ||
| 360 | testWidgets("Get.back navigates back", (tester) async { | 368 | testWidgets("Get.back navigates back", (tester) async { |
| 361 | await tester.pumpWidget( | 369 | await tester.pumpWidget( |
| 362 | Wrapper( | 370 | Wrapper( |
| 363 | - child: FirstScreen(), | 371 | + child: Container(), |
| 364 | defaultTransition: Transition.circularReveal, | 372 | defaultTransition: Transition.circularReveal, |
| 365 | ), | 373 | ), |
| 366 | ); | 374 | ); |
| 367 | 375 | ||
| 376 | + // await tester.pump(); | ||
| 377 | + | ||
| 378 | + Get.to(() => FirstScreen()); | ||
| 379 | + await tester.pumpAndSettle(); | ||
| 380 | + | ||
| 368 | Get.to(() => SecondScreen()); | 381 | Get.to(() => SecondScreen()); |
| 369 | await tester.pumpAndSettle(); | 382 | await tester.pumpAndSettle(); |
| 370 | Get.back(); | 383 | Get.back(); |
| @@ -377,8 +390,17 @@ void main() { | @@ -377,8 +390,17 @@ void main() { | ||
| 377 | testWidgets( | 390 | testWidgets( |
| 378 | "Get.back with closeOverlays pops both snackbar and current route", | 391 | "Get.back with closeOverlays pops both snackbar and current route", |
| 379 | (tester) async { | 392 | (tester) async { |
| 380 | - await tester.pumpWidget(Wrapper(child: FirstScreen())); | 393 | + await tester.pumpWidget( |
| 394 | + Wrapper( | ||
| 395 | + child: Container(), | ||
| 396 | + defaultTransition: Transition.circularReveal, | ||
| 397 | + ), | ||
| 398 | + ); | ||
| 399 | + | ||
| 400 | + // await tester.pump(); | ||
| 381 | 401 | ||
| 402 | + Get.to(() => FirstScreen()); | ||
| 403 | + await tester.pumpAndSettle(); | ||
| 382 | Get.to(() => SecondScreen()); | 404 | Get.to(() => SecondScreen()); |
| 383 | await tester.pumpAndSettle(); | 405 | await tester.pumpAndSettle(); |
| 384 | Get.snackbar('title', "message"); | 406 | Get.snackbar('title', "message"); |
| @@ -388,6 +410,7 @@ void main() { | @@ -388,6 +410,7 @@ void main() { | ||
| 388 | await tester.pumpAndSettle(); | 410 | await tester.pumpAndSettle(); |
| 389 | 411 | ||
| 390 | expect(Get.isSnackbarOpen, false); | 412 | expect(Get.isSnackbarOpen, false); |
| 413 | + | ||
| 391 | expect(find.byType(FirstScreen), findsOneWidget); | 414 | expect(find.byType(FirstScreen), findsOneWidget); |
| 392 | }); | 415 | }); |
| 393 | 416 |
| 1 | -void main() {} | 1 | +import 'package:flutter/cupertino.dart'; |
| 2 | +import 'package:flutter_test/flutter_test.dart'; | ||
| 3 | +import 'package:get/get.dart'; | ||
| 2 | 4 | ||
| 3 | -// import 'package:flutter/cupertino.dart'; | ||
| 4 | -// import 'package:flutter_test/flutter_test.dart'; | ||
| 5 | -// import 'package:get/get.dart'; | 5 | +import 'get_main_test.dart'; |
| 6 | 6 | ||
| 7 | -// import 'get_main_test.dart'; | 7 | +class RedirectMiddleware extends GetMiddleware { |
| 8 | + // @override | ||
| 9 | + // RouteSettings redirect(String? route) { | ||
| 10 | + // return RouteSettings(name: '/second'); | ||
| 11 | + // } | ||
| 8 | 12 | ||
| 9 | -// class RedirectMiddleware extends GetMiddleware { | ||
| 10 | -// @override | ||
| 11 | -// RouteSettings redirect(String? route) { | ||
| 12 | -// return RouteSettings(name: '/second'); | ||
| 13 | -// } | ||
| 14 | -// } | 13 | + @override |
| 14 | + Future<RouteDecoder?> redirectDelegate(RouteDecoder route) async { | ||
| 15 | + return RouteDecoder.fromRoute('/second'); | ||
| 16 | + } | ||
| 17 | +} | ||
| 15 | 18 | ||
| 16 | -// void main() { | ||
| 17 | -// testWidgets("Middleware redirect smoke test", (tester) async { | ||
| 18 | -// await tester.pumpWidget( | ||
| 19 | -// GetMaterialApp( | ||
| 20 | -// initialRoute: '/', | ||
| 21 | -// getPages: [ | ||
| 22 | -// GetPage(name: '/', page: () => Container()), | ||
| 23 | -// GetPage(name: '/first', page: () => FirstScreen(), middlewares: [ | ||
| 24 | -// RedirectMiddleware(), | ||
| 25 | -// ]), | ||
| 26 | -// GetPage(name: '/second', page: () => SecondScreen()), | ||
| 27 | -// GetPage(name: '/third', page: () => ThirdScreen()), | ||
| 28 | -// ], | ||
| 29 | -// ), | ||
| 30 | -// ); | 19 | +void main() { |
| 20 | + testWidgets("Middleware redirect smoke test", (tester) async { | ||
| 21 | + await tester.pumpWidget( | ||
| 22 | + GetMaterialApp( | ||
| 23 | + initialRoute: '/', | ||
| 24 | + getPages: [ | ||
| 25 | + GetPage(name: '/', page: () => Container()), | ||
| 26 | + GetPage(name: '/first', page: () => FirstScreen(), middlewares: [ | ||
| 27 | + RedirectMiddleware(), | ||
| 28 | + ]), | ||
| 29 | + GetPage(name: '/second', page: () => SecondScreen()), | ||
| 30 | + GetPage(name: '/third', page: () => ThirdScreen()), | ||
| 31 | + ], | ||
| 32 | + ), | ||
| 33 | + ); | ||
| 31 | 34 | ||
| 32 | -// Get.toNamed('/first'); | 35 | + Get.toNamed('/first'); |
| 33 | 36 | ||
| 34 | -// await tester.pumpAndSettle(); | ||
| 35 | -// print(Get.rootController.rootDelegate.currentConfiguration?.route?.name); | ||
| 36 | -// expect(find.byType(SecondScreen), findsOneWidget); | ||
| 37 | -// }); | ||
| 38 | -// } | 37 | + await tester.pumpAndSettle(); |
| 38 | + print(Get.rootController.rootDelegate.currentConfiguration?.route?.name); | ||
| 39 | + expect(find.byType(SecondScreen), findsOneWidget); | ||
| 40 | + }); | ||
| 41 | +} |
| 1 | -// import 'package:flutter/cupertino.dart'; | ||
| 2 | -// import 'package:flutter_test/flutter_test.dart'; | ||
| 3 | -// import 'package:get/get.dart'; | 1 | +import 'package:flutter/cupertino.dart'; |
| 2 | +import 'package:flutter_test/flutter_test.dart'; | ||
| 3 | +import 'package:get/get.dart'; | ||
| 4 | 4 | ||
| 5 | -void main() {} | 5 | +void main() { |
| 6 | + testWidgets('Back swipe dismiss interrupted by route push', (tester) async { | ||
| 7 | + // final scaffoldKey = GlobalKey(); | ||
| 6 | 8 | ||
| 7 | -// void main() { | ||
| 8 | -// testWidgets('Back swipe dismiss interrupted by route push', (tester) async { | ||
| 9 | -// // final scaffoldKey = GlobalKey(); | 9 | + await tester.pumpWidget( |
| 10 | + GetCupertinoApp( | ||
| 11 | + popGesture: true, | ||
| 12 | + home: CupertinoPageScaffold( | ||
| 13 | + // key: scaffoldKey, | ||
| 14 | + child: Center( | ||
| 15 | + child: CupertinoButton( | ||
| 16 | + onPressed: () { | ||
| 17 | + Get.to( | ||
| 18 | + () => CupertinoPageScaffold( | ||
| 19 | + child: Center(child: Text('route')), | ||
| 20 | + ), | ||
| 21 | + preventDuplicateHandlingMode: | ||
| 22 | + PreventDuplicateHandlingMode.Recreate); | ||
| 23 | + }, | ||
| 24 | + child: const Text('push'), | ||
| 25 | + ), | ||
| 26 | + ), | ||
| 27 | + ), | ||
| 28 | + ), | ||
| 29 | + ); | ||
| 10 | 30 | ||
| 11 | -// await tester.pumpWidget( | ||
| 12 | -// GetCupertinoApp( | ||
| 13 | -// popGesture: true, | ||
| 14 | -// home: CupertinoPageScaffold( | ||
| 15 | -// // key: scaffoldKey, | ||
| 16 | -// child: Center( | ||
| 17 | -// child: CupertinoButton( | ||
| 18 | -// onPressed: () { | ||
| 19 | -// Get.to( | ||
| 20 | -// () => CupertinoPageScaffold( | ||
| 21 | -// child: Center(child: Text('route')), | ||
| 22 | -// ), | ||
| 23 | -// preventDuplicateHandlingMode: | ||
| 24 | -// PreventDuplicateHandlingMode.Recreate); | ||
| 25 | -// }, | ||
| 26 | -// child: const Text('push'), | ||
| 27 | -// ), | ||
| 28 | -// ), | ||
| 29 | -// ), | ||
| 30 | -// ), | ||
| 31 | -// ); | 31 | + await tester.pumpAndSettle(); |
| 32 | 32 | ||
| 33 | -// await tester.pumpAndSettle(); | 33 | + // Check the basic iOS back-swipe dismiss transition. Dragging the pushed |
| 34 | + // route halfway across the screen will trigger the iOS dismiss animation | ||
| 34 | 35 | ||
| 35 | -// // Check the basic iOS back-swipe dismiss transition. Dragging the pushed | ||
| 36 | -// // route halfway across the screen will trigger the iOS dismiss animation | 36 | + await tester.tap(find.text('push')); |
| 37 | + await tester.pumpAndSettle(); | ||
| 38 | + expect(find.text('route'), findsOneWidget); | ||
| 39 | + expect(find.text('push'), findsNothing); | ||
| 37 | 40 | ||
| 38 | -// await tester.tap(find.text('push')); | ||
| 39 | -// await tester.pumpAndSettle(); | ||
| 40 | -// expect(find.text('route'), findsOneWidget); | ||
| 41 | -// expect(find.text('push'), findsNothing); | 41 | + var gesture = await tester.startGesture(const Offset(5, 300)); |
| 42 | + await gesture.moveBy(const Offset(400, 0)); | ||
| 43 | + await gesture.up(); | ||
| 44 | + await tester.pump(); | ||
| 45 | + expect( | ||
| 46 | + // The 'route' route has been dragged to the right, halfway across | ||
| 47 | + // the screen | ||
| 48 | + tester.getTopLeft(find.ancestor( | ||
| 49 | + of: find.text('route'), | ||
| 50 | + matching: find.byType(CupertinoPageScaffold))), | ||
| 51 | + const Offset(400, 0), | ||
| 52 | + ); | ||
| 53 | + expect( | ||
| 54 | + // The 'push' route is sliding in from the left. | ||
| 55 | + tester | ||
| 56 | + .getTopLeft(find.ancestor( | ||
| 57 | + of: find.text('push'), | ||
| 58 | + matching: find.byType(CupertinoPageScaffold))) | ||
| 59 | + .dx, | ||
| 60 | + moreOrLessEquals(-(400 / 3), epsilon: 1), | ||
| 61 | + ); | ||
| 62 | + await tester.pumpAndSettle(); | ||
| 63 | + expect(find.text('push'), findsOneWidget); | ||
| 64 | + expect( | ||
| 65 | + tester.getTopLeft(find.ancestor( | ||
| 66 | + of: find.text('push'), matching: find.byType(CupertinoPageScaffold))), | ||
| 67 | + Offset.zero, | ||
| 68 | + ); | ||
| 69 | + expect(find.text('route'), findsNothing); | ||
| 42 | 70 | ||
| 43 | -// var gesture = await tester.startGesture(const Offset(5, 300)); | ||
| 44 | -// await gesture.moveBy(const Offset(400, 0)); | ||
| 45 | -// await gesture.up(); | ||
| 46 | -// await tester.pump(); | ||
| 47 | -// expect( | ||
| 48 | -// // The 'route' route has been dragged to the right, halfway across | ||
| 49 | -// // the screen | ||
| 50 | -// tester.getTopLeft(find.ancestor( | ||
| 51 | -// of: find.text('route'), | ||
| 52 | -// matching: find.byType(CupertinoPageScaffold))), | ||
| 53 | -// const Offset(400, 0), | ||
| 54 | -// ); | ||
| 55 | -// expect( | ||
| 56 | -// // The 'push' route is sliding in from the left. | ||
| 57 | -// tester | ||
| 58 | -// .getTopLeft(find.ancestor( | ||
| 59 | -// of: find.text('push'), | ||
| 60 | -// matching: find.byType(CupertinoPageScaffold))) | ||
| 61 | -// .dx, | ||
| 62 | -// 400 / 3, | ||
| 63 | -// ); | ||
| 64 | -// await tester.pumpAndSettle(); | ||
| 65 | -// expect(find.text('push'), findsOneWidget); | ||
| 66 | -// expect( | ||
| 67 | -// tester.getTopLeft(find.ancestor( | ||
| 68 | -// of: find.text('push'), matching: find.byType(CupertinoPageScaffold))), | ||
| 69 | -// Offset.zero, | ||
| 70 | -// ); | ||
| 71 | -// expect(find.text('route'), findsNothing); | 71 | + // Run the dismiss animation 60%, which exposes the route "push" button, |
| 72 | + // and then press the button. | ||
| 72 | 73 | ||
| 73 | -// // Run the dismiss animation 60%, which exposes the route "push" button, | ||
| 74 | -// // and then press the button. | 74 | + await tester.tap(find.text('push')); |
| 75 | + await tester.pumpAndSettle(); | ||
| 76 | + expect(find.text('route'), findsOneWidget); | ||
| 77 | + expect(find.text('push'), findsNothing); | ||
| 75 | 78 | ||
| 76 | -// await tester.tap(find.text('push')); | ||
| 77 | -// await tester.pumpAndSettle(); | ||
| 78 | -// expect(find.text('route'), findsOneWidget); | ||
| 79 | -// expect(find.text('push'), findsNothing); | ||
| 80 | - | ||
| 81 | -// gesture = await tester.startGesture(const Offset(5, 300)); | ||
| 82 | -// await gesture.moveBy(const Offset(400, 0)); // Drag halfway. | ||
| 83 | -// await gesture.up(); | ||
| 84 | -// // Trigger the snapping animation. | ||
| 85 | -// // Since the back swipe drag was brought to >=50% of the screen, it will | ||
| 86 | -// // self snap to finish the pop transition as the gesture is lifted. | ||
| 87 | -// // | ||
| 88 | -// // This drag drop animation is 400ms when dropped exactly halfway | ||
| 89 | -// // (800 / [pixel distance remaining], see | ||
| 90 | -// // _CupertinoBackGestureController.dragEnd). It follows a curve that is very | ||
| 91 | -// // steep initially. | ||
| 92 | -// await tester.pump(); | ||
| 93 | -// expect( | ||
| 94 | -// tester.getTopLeft(find.ancestor( | ||
| 95 | -// of: find.text('route'), | ||
| 96 | -// matching: find.byType(CupertinoPageScaffold))), | ||
| 97 | -// const Offset(400, 0), | ||
| 98 | -// ); | ||
| 99 | -// // Let the dismissing snapping animation go 60%. | ||
| 100 | -// await tester.pump(const Duration(milliseconds: 240)); | ||
| 101 | -// expect( | ||
| 102 | -// tester | ||
| 103 | -// .getTopLeft(find.ancestor( | ||
| 104 | -// of: find.text('route'), | ||
| 105 | -// matching: find.byType(CupertinoPageScaffold))) | ||
| 106 | -// .dx, | ||
| 107 | -// moreOrLessEquals(798, epsilon: 1), | ||
| 108 | -// ); | ||
| 109 | - | ||
| 110 | -// // Use the navigator to push a route instead of tapping the 'push' button. | ||
| 111 | -// // The topmost route (the one that's animating away), ignores input while | ||
| 112 | -// // the pop is underway because route.navigator.userGestureInProgress. | ||
| 113 | -// Get.to(() => const CupertinoPageScaffold( | ||
| 114 | -// child: Center(child: Text('route')), | ||
| 115 | -// )); | ||
| 116 | - | ||
| 117 | -// await tester.pumpAndSettle(); | ||
| 118 | -// expect(find.text('route'), findsOneWidget); | ||
| 119 | -// expect(find.text('push'), findsNothing); | ||
| 120 | -// expect( | ||
| 121 | -// tester | ||
| 122 | -// .state<NavigatorState>(find.byType(Navigator)) | ||
| 123 | -// .userGestureInProgress, | ||
| 124 | -// false, | ||
| 125 | -// ); | ||
| 126 | -// }); | ||
| 127 | -// } | 79 | + gesture = await tester.startGesture(const Offset(5, 300)); |
| 80 | + await gesture.moveBy(const Offset(400, 0)); // Drag halfway. | ||
| 81 | + await gesture.up(); | ||
| 82 | + // Trigger the snapping animation. | ||
| 83 | + // Since the back swipe drag was brought to >=50% of the screen, it will | ||
| 84 | + // self snap to finish the pop transition as the gesture is lifted. | ||
| 85 | + // | ||
| 86 | + // This drag drop animation is 400ms when dropped exactly halfway | ||
| 87 | + // (800 / [pixel distance remaining], see | ||
| 88 | + // _CupertinoBackGestureController.dragEnd). It follows a curve that is very | ||
| 89 | + // steep initially. | ||
| 90 | + await tester.pump(); | ||
| 91 | + expect( | ||
| 92 | + tester.getTopLeft(find.ancestor( | ||
| 93 | + of: find.text('route'), | ||
| 94 | + matching: find.byType(CupertinoPageScaffold))), | ||
| 95 | + const Offset(400, 0), | ||
| 96 | + ); | ||
| 97 | + // Let the dismissing snapping animation go 60%. | ||
| 98 | + await tester.pump(const Duration(milliseconds: 240)); | ||
| 99 | + expect( | ||
| 100 | + tester | ||
| 101 | + .getTopLeft(find.ancestor( | ||
| 102 | + of: find.text('route'), | ||
| 103 | + matching: find.byType(CupertinoPageScaffold))) | ||
| 104 | + .dx, | ||
| 105 | + moreOrLessEquals(798, epsilon: 1), | ||
| 106 | + ); | ||
| 107 | + }); | ||
| 108 | +} |
| @@ -104,6 +104,7 @@ void main() { | @@ -104,6 +104,7 @@ void main() { | ||
| 104 | expect(find.text('title'), findsNothing); | 104 | expect(find.text('title'), findsNothing); |
| 105 | expect(find.text('titleTwo'), findsOneWidget); | 105 | expect(find.text('titleTwo'), findsOneWidget); |
| 106 | Get.closeAllSnackbars(); | 106 | Get.closeAllSnackbars(); |
| 107 | + await tester.pumpAndSettle(); | ||
| 107 | }); | 108 | }); |
| 108 | 109 | ||
| 109 | testWidgets("test snackbar dismissible", (tester) async { | 110 | testWidgets("test snackbar dismissible", (tester) async { |
| @@ -23,9 +23,11 @@ class Wrapper extends StatelessWidget { | @@ -23,9 +23,11 @@ class Wrapper extends StatelessWidget { | ||
| 23 | translations: WrapperTranslations(), | 23 | translations: WrapperTranslations(), |
| 24 | locale: WrapperTranslations.locale, | 24 | locale: WrapperTranslations.locale, |
| 25 | getPages: namedRoutes, | 25 | getPages: namedRoutes, |
| 26 | - home: Scaffold( | 26 | + home: namedRoutes == null |
| 27 | + ? Scaffold( | ||
| 27 | body: child, | 28 | body: child, |
| 28 | - ), | 29 | + ) |
| 30 | + : null, | ||
| 29 | ); | 31 | ); |
| 30 | } | 32 | } |
| 31 | } | 33 | } |
| @@ -97,7 +97,7 @@ void main() { | @@ -97,7 +97,7 @@ void main() { | ||
| 97 | controller.close(); | 97 | controller.close(); |
| 98 | }); | 98 | }); |
| 99 | 99 | ||
| 100 | - test('Rx same value will not call the same listener when `call`', () async { | 100 | + test('Rx same value will not call the same listener when call', () async { |
| 101 | var reactiveInteger = RxInt(2); | 101 | var reactiveInteger = RxInt(2); |
| 102 | var timesCalled = 0; | 102 | var timesCalled = 0; |
| 103 | reactiveInteger.listen((newInt) { | 103 | reactiveInteger.listen((newInt) { |
| @@ -114,7 +114,7 @@ void main() { | @@ -114,7 +114,7 @@ void main() { | ||
| 114 | expect(1, timesCalled); | 114 | expect(1, timesCalled); |
| 115 | }); | 115 | }); |
| 116 | 116 | ||
| 117 | - test('Rx different value will call the listener when `trigger`', () async { | 117 | + test('Rx different value will call the listener when trigger', () async { |
| 118 | var reactiveInteger = RxInt(0); | 118 | var reactiveInteger = RxInt(0); |
| 119 | var timesCalled = 0; | 119 | var timesCalled = 0; |
| 120 | reactiveInteger.listen((newInt) { | 120 | reactiveInteger.listen((newInt) { |
| @@ -131,7 +131,7 @@ void main() { | @@ -131,7 +131,7 @@ void main() { | ||
| 131 | expect(3, timesCalled); | 131 | expect(3, timesCalled); |
| 132 | }); | 132 | }); |
| 133 | 133 | ||
| 134 | - test('Rx same value will call the listener when `trigger`', () async { | 134 | + test('Rx same value will call the listener when trigger', () async { |
| 135 | var reactiveInteger = RxInt(2); | 135 | var reactiveInteger = RxInt(2); |
| 136 | var timesCalled = 0; | 136 | var timesCalled = 0; |
| 137 | reactiveInteger.listen((newInt) { | 137 | reactiveInteger.listen((newInt) { |
-
Please register or login to post a comment