Showing
10 changed files
with
227 additions
and
62 deletions
| 1 | +## [3.5.0] | ||
| 2 | +- Added logwritter (@stefandevo) | ||
| 3 | +- Added responsiveValue (@juanjoseleca) | ||
| 4 | +- Fixed ghost url for snackbar, bottomsheets, and dialogs and unnamed navigation. | ||
| 5 | + | ||
| 1 | ## [3.4.6] | 6 | ## [3.4.6] |
| 2 | - Fix TextField dispose throw on last Flutter hotfix | 7 | - Fix TextField dispose throw on last Flutter hotfix |
| 3 | 8 | ||
| @@ -7,6 +12,7 @@ | @@ -7,6 +12,7 @@ | ||
| 7 | 12 | ||
| 8 | ## [3.4.4] | 13 | ## [3.4.4] |
| 9 | - Fix exception 'isInit called null' when tags are used in conjunction with dependencies. (@djade007) | 14 | - Fix exception 'isInit called null' when tags are used in conjunction with dependencies. (@djade007) |
| 15 | +- Fix typos (@tiagocpeixoto) | ||
| 10 | 16 | ||
| 11 | ## [3.4.3] | 17 | ## [3.4.3] |
| 12 | - Fix onInit fired only first time | 18 | - Fix onInit fired only first time |
| @@ -16,7 +16,6 @@ import '../../utils.dart'; | @@ -16,7 +16,6 @@ import '../../utils.dart'; | ||
| 16 | abstract class GetInterface { | 16 | abstract class GetInterface { |
| 17 | bool defaultPopGesture = GetPlatform.isIOS; | 17 | bool defaultPopGesture = GetPlatform.isIOS; |
| 18 | bool defaultOpaqueRoute = true; | 18 | bool defaultOpaqueRoute = true; |
| 19 | - bool forceRouteName = true; | ||
| 20 | Transition defaultTransition; | 19 | Transition defaultTransition; |
| 21 | Duration defaultDurationTransition = Duration(milliseconds: 400); | 20 | Duration defaultDurationTransition = Duration(milliseconds: 400); |
| 22 | bool defaultGlobalState = true; | 21 | bool defaultGlobalState = true; |
| 1 | import 'package:get/src/core/log.dart'; | 1 | import 'package:get/src/core/log.dart'; |
| 2 | import 'package:get/src/navigation/root/smart_management.dart'; | 2 | import 'package:get/src/navigation/root/smart_management.dart'; |
| 3 | import 'package:get/src/state_manager/rx/rx_interface.dart'; | 3 | import 'package:get/src/state_manager/rx/rx_interface.dart'; |
| 4 | +import 'package:get/src/utils/queue/get_queue.dart'; | ||
| 4 | 5 | ||
| 5 | class GetConfig { | 6 | class GetConfig { |
| 6 | static SmartManagement smartManagement = SmartManagement.full; | 7 | static SmartManagement smartManagement = SmartManagement.full; |
| @@ -196,6 +197,14 @@ class GetInstance { | @@ -196,6 +197,14 @@ class GetInstance { | ||
| 196 | return true; | 197 | return true; |
| 197 | } | 198 | } |
| 198 | 199 | ||
| 200 | + static GetQueue queue = GetQueue(); | ||
| 201 | + | ||
| 202 | + // Future<bool> delete<S>({String tag, String key, bool force = false}) async { | ||
| 203 | + // final s = await queue | ||
| 204 | + // .add<bool>(() async => dele<S>(tag: tag, key: key, force: force)); | ||
| 205 | + // return s; | ||
| 206 | + // } | ||
| 207 | + | ||
| 199 | /// Delete class instance on [S] and clean memory | 208 | /// Delete class instance on [S] and clean memory |
| 200 | Future<bool> delete<S>({String tag, String key, bool force = false}) async { | 209 | Future<bool> delete<S>({String tag, String key, bool force = false}) async { |
| 201 | String newKey; | 210 | String newKey; |
| @@ -205,8 +214,10 @@ class GetInstance { | @@ -205,8 +214,10 @@ class GetInstance { | ||
| 205 | newKey = key; | 214 | newKey = key; |
| 206 | } | 215 | } |
| 207 | 216 | ||
| 217 | + return queue.add<bool>(() async { | ||
| 208 | if (!_singl.containsKey(newKey)) { | 218 | if (!_singl.containsKey(newKey)) { |
| 209 | - GetConfig.log('Instance $newKey not found', isError: true); | 219 | + GetConfig.log('[GETX] Instance $newKey already been removed.', |
| 220 | + isError: true); | ||
| 210 | return false; | 221 | return false; |
| 211 | } | 222 | } |
| 212 | 223 | ||
| @@ -235,6 +246,7 @@ class GetInstance { | @@ -235,6 +246,7 @@ class GetInstance { | ||
| 235 | } | 246 | } |
| 236 | // _routesKey?.remove(key); | 247 | // _routesKey?.remove(key); |
| 237 | return true; | 248 | return true; |
| 249 | + }); | ||
| 238 | } | 250 | } |
| 239 | 251 | ||
| 240 | /// check if instance is registered | 252 | /// check if instance is registered |
| @@ -16,6 +16,7 @@ class GetModalBottomSheetRoute<T> extends PopupRoute<T> { | @@ -16,6 +16,7 @@ class GetModalBottomSheetRoute<T> extends PopupRoute<T> { | ||
| 16 | @required this.isScrollControlled, | 16 | @required this.isScrollControlled, |
| 17 | RouteSettings settings, | 17 | RouteSettings settings, |
| 18 | }) : assert(isScrollControlled != null), | 18 | }) : assert(isScrollControlled != null), |
| 19 | + name = "BOTTOMSHEET: ${builder.hashCode}", | ||
| 19 | assert(isDismissible != null), | 20 | assert(isDismissible != null), |
| 20 | assert(enableDrag != null), | 21 | assert(enableDrag != null), |
| 21 | super(settings: settings); | 22 | super(settings: settings); |
| @@ -30,6 +31,7 @@ class GetModalBottomSheetRoute<T> extends PopupRoute<T> { | @@ -30,6 +31,7 @@ class GetModalBottomSheetRoute<T> extends PopupRoute<T> { | ||
| 30 | final Color modalBarrierColor; | 31 | final Color modalBarrierColor; |
| 31 | final bool isDismissible; | 32 | final bool isDismissible; |
| 32 | final bool enableDrag; | 33 | final bool enableDrag; |
| 34 | + final String name; | ||
| 33 | 35 | ||
| 34 | // remove safearea from top | 36 | // remove safearea from top |
| 35 | final bool removeTop; | 37 | final bool removeTop; |
lib/src/navigation/dialog/dialog_route.dart
0 → 100644
| 1 | +import 'package:flutter/widgets.dart'; | ||
| 2 | + | ||
| 3 | +import '../../../instance_manager.dart'; | ||
| 4 | +import '../../../route_manager.dart'; | ||
| 5 | + | ||
| 6 | +class GetDialogRoute<T> extends PopupRoute<T> { | ||
| 7 | + GetDialogRoute({ | ||
| 8 | + @required RoutePageBuilder pageBuilder, | ||
| 9 | + bool barrierDismissible = true, | ||
| 10 | + String barrierLabel, | ||
| 11 | + Color barrierColor = const Color(0x80000000), | ||
| 12 | + Duration transitionDuration = const Duration(milliseconds: 200), | ||
| 13 | + RouteTransitionsBuilder transitionBuilder, | ||
| 14 | + RouteSettings settings, | ||
| 15 | + }) : assert(barrierDismissible != null), | ||
| 16 | + widget = pageBuilder, | ||
| 17 | + name = "DIALOG: ${pageBuilder.hashCode}", | ||
| 18 | + _barrierDismissible = barrierDismissible, | ||
| 19 | + _barrierLabel = barrierLabel, | ||
| 20 | + _barrierColor = barrierColor, | ||
| 21 | + _transitionDuration = transitionDuration, | ||
| 22 | + _transitionBuilder = transitionBuilder, | ||
| 23 | + super(settings: settings); | ||
| 24 | + | ||
| 25 | + final RoutePageBuilder widget; | ||
| 26 | + | ||
| 27 | + @override | ||
| 28 | + bool get barrierDismissible => _barrierDismissible; | ||
| 29 | + final bool _barrierDismissible; | ||
| 30 | + | ||
| 31 | + final String name; | ||
| 32 | + | ||
| 33 | + @override | ||
| 34 | + void dispose() { | ||
| 35 | + if (GetConfig.smartManagement != SmartManagement.onlyBuilder) { | ||
| 36 | + WidgetsBinding.instance.addPostFrameCallback( | ||
| 37 | + (_) => GetInstance().removeDependencyByRoute(name)); | ||
| 38 | + } | ||
| 39 | + super.dispose(); | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + @override | ||
| 43 | + String get barrierLabel => _barrierLabel; | ||
| 44 | + final String _barrierLabel; | ||
| 45 | + | ||
| 46 | + @override | ||
| 47 | + Color get barrierColor => _barrierColor; | ||
| 48 | + final Color _barrierColor; | ||
| 49 | + | ||
| 50 | + @override | ||
| 51 | + Duration get transitionDuration => _transitionDuration; | ||
| 52 | + final Duration _transitionDuration; | ||
| 53 | + | ||
| 54 | + final RouteTransitionsBuilder _transitionBuilder; | ||
| 55 | + | ||
| 56 | + @override | ||
| 57 | + Widget buildPage(BuildContext context, Animation<double> animation, | ||
| 58 | + Animation<double> secondaryAnimation) { | ||
| 59 | + return Semantics( | ||
| 60 | + child: widget(context, animation, secondaryAnimation), | ||
| 61 | + scopesRoute: true, | ||
| 62 | + explicitChildNodes: true, | ||
| 63 | + ); | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + @override | ||
| 67 | + Widget buildTransitions(BuildContext context, Animation<double> animation, | ||
| 68 | + Animation<double> secondaryAnimation, Widget child) { | ||
| 69 | + if (_transitionBuilder == null) { | ||
| 70 | + return FadeTransition( | ||
| 71 | + opacity: CurvedAnimation( | ||
| 72 | + parent: animation, | ||
| 73 | + curve: Curves.linear, | ||
| 74 | + ), | ||
| 75 | + child: child); | ||
| 76 | + } // Some default transition | ||
| 77 | + return _transitionBuilder(context, animation, secondaryAnimation, child); | ||
| 78 | + } | ||
| 79 | +} |
| @@ -4,6 +4,7 @@ import 'package:get/src/core/get_interface.dart'; | @@ -4,6 +4,7 @@ import 'package:get/src/core/get_interface.dart'; | ||
| 4 | import 'package:get/instance_manager.dart'; | 4 | import 'package:get/instance_manager.dart'; |
| 5 | import 'package:get/route_manager.dart'; | 5 | import 'package:get/route_manager.dart'; |
| 6 | import 'package:get/src/core/log.dart'; | 6 | import 'package:get/src/core/log.dart'; |
| 7 | +import 'dialog/dialog_route.dart'; | ||
| 7 | import 'root/parse_route.dart'; | 8 | import 'root/parse_route.dart'; |
| 8 | import 'routes/bindings_interface.dart'; | 9 | import 'routes/bindings_interface.dart'; |
| 9 | 10 | ||
| @@ -46,17 +47,17 @@ extension GetNavigation on GetInterface { | @@ -46,17 +47,17 @@ extension GetNavigation on GetInterface { | ||
| 46 | bool preventDuplicates = true, | 47 | bool preventDuplicates = true, |
| 47 | bool popGesture, | 48 | bool popGesture, |
| 48 | }) { | 49 | }) { |
| 49 | - if (preventDuplicates && | ||
| 50 | - '/${page.runtimeType}' == currentRoute && | ||
| 51 | - forceRouteName) { | 50 | + String routename = "/${page.runtimeType.toString()}"; |
| 51 | + if (preventDuplicates && routename == currentRoute) { | ||
| 52 | return null; | 52 | return null; |
| 53 | } | 53 | } |
| 54 | return global(id).currentState.push( | 54 | return global(id).currentState.push( |
| 55 | GetPageRoute( | 55 | GetPageRoute( |
| 56 | opaque: opaque ?? true, | 56 | opaque: opaque ?? true, |
| 57 | page: () => page, | 57 | page: () => page, |
| 58 | + routeName: routename, | ||
| 58 | settings: RouteSettings( | 59 | settings: RouteSettings( |
| 59 | - name: forceRouteName ? '/${page.runtimeType}' : '', | 60 | + // name: forceRouteName ? '${a.runtimeType}' : '', |
| 60 | arguments: arguments, | 61 | arguments: arguments, |
| 61 | ), | 62 | ), |
| 62 | popGesture: popGesture ?? defaultPopGesture, | 63 | popGesture: popGesture ?? defaultPopGesture, |
| @@ -320,18 +321,16 @@ extension GetNavigation on GetInterface { | @@ -320,18 +321,16 @@ extension GetNavigation on GetInterface { | ||
| 320 | preventDuplicates = true, | 321 | preventDuplicates = true, |
| 321 | Duration duration, | 322 | Duration duration, |
| 322 | }) { | 323 | }) { |
| 323 | - if (preventDuplicates && | ||
| 324 | - '/${page.runtimeType}' == currentRoute && | ||
| 325 | - forceRouteName) { | 324 | + String routename = "/${page.runtimeType.toString()}"; |
| 325 | + if (preventDuplicates && routename == currentRoute) { | ||
| 326 | return null; | 326 | return null; |
| 327 | } | 327 | } |
| 328 | return global(id).currentState.pushReplacement(GetPageRoute( | 328 | return global(id).currentState.pushReplacement(GetPageRoute( |
| 329 | opaque: opaque ?? true, | 329 | opaque: opaque ?? true, |
| 330 | page: () => page, | 330 | page: () => page, |
| 331 | binding: binding, | 331 | binding: binding, |
| 332 | - settings: RouteSettings( | ||
| 333 | - name: forceRouteName ? '/${page.runtimeType}' : '', | ||
| 334 | - arguments: arguments), | 332 | + settings: RouteSettings(arguments: arguments), |
| 333 | + routeName: routename, | ||
| 335 | fullscreenDialog: fullscreenDialog, | 334 | fullscreenDialog: fullscreenDialog, |
| 336 | popGesture: popGesture ?? defaultPopGesture, | 335 | popGesture: popGesture ?? defaultPopGesture, |
| 337 | transition: transition ?? defaultTransition, | 336 | transition: transition ?? defaultTransition, |
| @@ -380,16 +379,17 @@ extension GetNavigation on GetInterface { | @@ -380,16 +379,17 @@ extension GetNavigation on GetInterface { | ||
| 380 | }) { | 379 | }) { |
| 381 | var route = (Route<dynamic> rota) => false; | 380 | var route = (Route<dynamic> rota) => false; |
| 382 | 381 | ||
| 382 | + String routename = "/${page.runtimeType.toString()}"; | ||
| 383 | + | ||
| 383 | return global(id).currentState.pushAndRemoveUntil( | 384 | return global(id).currentState.pushAndRemoveUntil( |
| 384 | GetPageRoute( | 385 | GetPageRoute( |
| 385 | opaque: opaque ?? true, | 386 | opaque: opaque ?? true, |
| 386 | popGesture: popGesture ?? defaultPopGesture, | 387 | popGesture: popGesture ?? defaultPopGesture, |
| 387 | page: () => page, | 388 | page: () => page, |
| 388 | binding: binding, | 389 | binding: binding, |
| 389 | - settings: RouteSettings( | ||
| 390 | - name: forceRouteName ? '/${page.runtimeType}' : '', | ||
| 391 | - arguments: arguments), | 390 | + settings: RouteSettings(arguments: arguments), |
| 392 | fullscreenDialog: fullscreenDialog, | 391 | fullscreenDialog: fullscreenDialog, |
| 392 | + routeName: routename, | ||
| 393 | transition: transition ?? defaultTransition, | 393 | transition: transition ?? defaultTransition, |
| 394 | transitionDuration: duration ?? defaultDurationTransition, | 394 | transitionDuration: duration ?? defaultDurationTransition, |
| 395 | ), | 395 | ), |
| @@ -398,44 +398,76 @@ extension GetNavigation on GetInterface { | @@ -398,44 +398,76 @@ extension GetNavigation on GetInterface { | ||
| 398 | 398 | ||
| 399 | /// Show a dialog | 399 | /// Show a dialog |
| 400 | Future<T> dialog<T>( | 400 | Future<T> dialog<T>( |
| 401 | - Widget child, { | 401 | + Widget widget, { |
| 402 | bool barrierDismissible = true, | 402 | bool barrierDismissible = true, |
| 403 | + Color barrierColor, | ||
| 404 | + bool useSafeArea = true, | ||
| 403 | bool useRootNavigator = true, | 405 | bool useRootNavigator = true, |
| 404 | - // RouteSettings routeSettings | 406 | + RouteSettings routeSettings, |
| 405 | }) { | 407 | }) { |
| 406 | - return showDialog( | 408 | + assert(widget != null); |
| 409 | + assert(barrierDismissible != null); | ||
| 410 | + assert(useSafeArea != null); | ||
| 411 | + assert(useRootNavigator != null); | ||
| 412 | + assert(debugCheckHasMaterialLocalizations(context)); | ||
| 413 | + | ||
| 414 | + final ThemeData theme = Theme.of(context, shadowThemeOnly: true); | ||
| 415 | + return generalDialog( | ||
| 416 | + pageBuilder: (BuildContext buildContext, Animation<double> animation, | ||
| 417 | + Animation<double> secondaryAnimation) { | ||
| 418 | + final Widget pageChild = widget; | ||
| 419 | + Widget dialog = Builder(builder: (BuildContext context) { | ||
| 420 | + return theme != null | ||
| 421 | + ? Theme(data: theme, child: pageChild) | ||
| 422 | + : pageChild; | ||
| 423 | + }); | ||
| 424 | + if (useSafeArea) { | ||
| 425 | + dialog = SafeArea(child: dialog); | ||
| 426 | + } | ||
| 427 | + return dialog; | ||
| 428 | + }, | ||
| 407 | barrierDismissible: barrierDismissible, | 429 | barrierDismissible: barrierDismissible, |
| 408 | - useRootNavigator: useRootNavigator, | ||
| 409 | - routeSettings: RouteSettings(name: 'dialog'), | ||
| 410 | - context: overlayContext, | ||
| 411 | - builder: (_) { | ||
| 412 | - return child; | 430 | + barrierLabel: MaterialLocalizations.of(context).modalBarrierDismissLabel, |
| 431 | + barrierColor: barrierColor ?? Colors.black54, | ||
| 432 | + transitionDuration: const Duration(milliseconds: 150), | ||
| 433 | + transitionBuilder: (context, animation, secondaryAnimation, child) { | ||
| 434 | + return FadeTransition( | ||
| 435 | + opacity: CurvedAnimation( | ||
| 436 | + parent: animation, | ||
| 437 | + curve: Curves.easeOut, | ||
| 438 | + ), | ||
| 439 | + child: child, | ||
| 440 | + ); | ||
| 413 | }, | 441 | }, |
| 442 | + useRootNavigator: useRootNavigator, | ||
| 443 | + routeSettings: routeSettings, | ||
| 414 | ); | 444 | ); |
| 415 | } | 445 | } |
| 416 | 446 | ||
| 417 | /// Api from showGeneralDialog with no context | 447 | /// Api from showGeneralDialog with no context |
| 418 | Future<T> generalDialog<T>({ | 448 | Future<T> generalDialog<T>({ |
| 419 | @required RoutePageBuilder pageBuilder, | 449 | @required RoutePageBuilder pageBuilder, |
| 420 | - String barrierLabel = "Dismiss", | ||
| 421 | - bool barrierDismissible = true, | 450 | + bool barrierDismissible = false, |
| 451 | + String barrierLabel, | ||
| 422 | Color barrierColor = const Color(0x80000000), | 452 | Color barrierColor = const Color(0x80000000), |
| 423 | Duration transitionDuration = const Duration(milliseconds: 200), | 453 | Duration transitionDuration = const Duration(milliseconds: 200), |
| 424 | RouteTransitionsBuilder transitionBuilder, | 454 | RouteTransitionsBuilder transitionBuilder, |
| 425 | bool useRootNavigator = true, | 455 | bool useRootNavigator = true, |
| 426 | RouteSettings routeSettings, | 456 | RouteSettings routeSettings, |
| 427 | }) { | 457 | }) { |
| 428 | - return showGeneralDialog( | 458 | + assert(pageBuilder != null); |
| 459 | + assert(useRootNavigator != null); | ||
| 460 | + assert(!barrierDismissible || barrierLabel != null); | ||
| 461 | + return Navigator.of(overlayContext, rootNavigator: useRootNavigator) | ||
| 462 | + .push<T>(GetDialogRoute<T>( | ||
| 429 | pageBuilder: pageBuilder, | 463 | pageBuilder: pageBuilder, |
| 430 | barrierDismissible: barrierDismissible, | 464 | barrierDismissible: barrierDismissible, |
| 431 | barrierLabel: barrierLabel, | 465 | barrierLabel: barrierLabel, |
| 432 | barrierColor: barrierColor, | 466 | barrierColor: barrierColor, |
| 433 | transitionDuration: transitionDuration, | 467 | transitionDuration: transitionDuration, |
| 434 | transitionBuilder: transitionBuilder, | 468 | transitionBuilder: transitionBuilder, |
| 435 | - useRootNavigator: useRootNavigator, | ||
| 436 | - routeSettings: RouteSettings(name: 'dialog'), | ||
| 437 | - context: overlayContext, | ||
| 438 | - ); | 469 | + settings: routeSettings, |
| 470 | + )); | ||
| 439 | } | 471 | } |
| 440 | 472 | ||
| 441 | Future<T> defaultDialog<T>({ | 473 | Future<T> defaultDialog<T>({ |
| @@ -567,7 +599,7 @@ extension GetNavigation on GetInterface { | @@ -567,7 +599,7 @@ extension GetNavigation on GetInterface { | ||
| 567 | clipBehavior: clipBehavior, | 599 | clipBehavior: clipBehavior, |
| 568 | isDismissible: isDismissible, | 600 | isDismissible: isDismissible, |
| 569 | modalBarrierColor: barrierColor, | 601 | modalBarrierColor: barrierColor, |
| 570 | - settings: RouteSettings(name: "bottomsheet"), | 602 | + settings: settings, |
| 571 | enableDrag: enableDrag, | 603 | enableDrag: enableDrag, |
| 572 | )); | 604 | )); |
| 573 | } | 605 | } |
| @@ -50,7 +50,6 @@ class GetMaterialApp extends StatelessWidget { | @@ -50,7 +50,6 @@ class GetMaterialApp extends StatelessWidget { | ||
| 50 | this.defaultTransition, | 50 | this.defaultTransition, |
| 51 | // this.actions, | 51 | // this.actions, |
| 52 | this.getPages, | 52 | this.getPages, |
| 53 | - this.forceRouteName = true, | ||
| 54 | this.opaqueRoute, | 53 | this.opaqueRoute, |
| 55 | this.enableLog, | 54 | this.enableLog, |
| 56 | this.logWriterCallback, | 55 | this.logWriterCallback, |
| @@ -103,7 +102,6 @@ class GetMaterialApp extends StatelessWidget { | @@ -103,7 +102,6 @@ class GetMaterialApp extends StatelessWidget { | ||
| 103 | final Function(Routing) routingCallback; | 102 | final Function(Routing) routingCallback; |
| 104 | final Transition defaultTransition; | 103 | final Transition defaultTransition; |
| 105 | final bool opaqueRoute; | 104 | final bool opaqueRoute; |
| 106 | - final bool forceRouteName; | ||
| 107 | final VoidCallback onInit; | 105 | final VoidCallback onInit; |
| 108 | final VoidCallback onDispose; | 106 | final VoidCallback onDispose; |
| 109 | final bool enableLog; | 107 | final bool enableLog; |
| @@ -191,8 +189,6 @@ class GetMaterialApp extends StatelessWidget { | @@ -191,8 +189,6 @@ class GetMaterialApp extends StatelessWidget { | ||
| 191 | 189 | ||
| 192 | if (fallbackLocale != null) Get.fallbackLocale = fallbackLocale; | 190 | if (fallbackLocale != null) Get.fallbackLocale = fallbackLocale; |
| 193 | 191 | ||
| 194 | - Get.forceRouteName = forceRouteName; | ||
| 195 | - | ||
| 196 | if (translations != null) { | 192 | if (translations != null) { |
| 197 | Get.translations = translations.keys; | 193 | Get.translations = translations.keys; |
| 198 | } else if (translationsKeys != null) { | 194 | } else if (translationsKeys != null) { |
| @@ -297,6 +293,7 @@ extension Trans on String { | @@ -297,6 +293,7 @@ extension Trans on String { | ||
| 297 | Get.translations[Get.fallbackLocale.languageCode].containsKey(this)) { | 293 | Get.translations[Get.fallbackLocale.languageCode].containsKey(this)) { |
| 298 | return Get.translations[Get.fallbackLocale.languageCode][this]; | 294 | return Get.translations[Get.fallbackLocale.languageCode][this]; |
| 299 | } | 295 | } |
| 296 | + return this; | ||
| 300 | } else { | 297 | } else { |
| 301 | return this; | 298 | return this; |
| 302 | } | 299 | } |
| @@ -27,6 +27,7 @@ class GetPageRoute<T> extends PageRoute<T> { | @@ -27,6 +27,7 @@ class GetPageRoute<T> extends PageRoute<T> { | ||
| 27 | this.barrierColor, | 27 | this.barrierColor, |
| 28 | this.binding, | 28 | this.binding, |
| 29 | this.bindings, | 29 | this.bindings, |
| 30 | + this.routeName, | ||
| 30 | this.page, | 31 | this.page, |
| 31 | this.barrierLabel, | 32 | this.barrierLabel, |
| 32 | this.maintainState = true, | 33 | this.maintainState = true, |
| @@ -42,6 +43,8 @@ class GetPageRoute<T> extends PageRoute<T> { | @@ -42,6 +43,8 @@ class GetPageRoute<T> extends PageRoute<T> { | ||
| 42 | 43 | ||
| 43 | final GetPageBuilder page; | 44 | final GetPageBuilder page; |
| 44 | 45 | ||
| 46 | + final String routeName; | ||
| 47 | + | ||
| 45 | final CustomTransition customTransition; | 48 | final CustomTransition customTransition; |
| 46 | 49 | ||
| 47 | final Bindings binding; | 50 | final Bindings binding; |
| @@ -119,8 +122,9 @@ class GetPageRoute<T> extends PageRoute<T> { | @@ -119,8 +122,9 @@ class GetPageRoute<T> extends PageRoute<T> { | ||
| 119 | element.dependencies(); | 122 | element.dependencies(); |
| 120 | } | 123 | } |
| 121 | } | 124 | } |
| 122 | - GetConfig.currentRoute = settings.name; | ||
| 123 | - return page(); | 125 | + final pageWidget = page(); |
| 126 | + GetConfig.currentRoute = settings.name ?? routeName; | ||
| 127 | + return pageWidget; | ||
| 124 | } | 128 | } |
| 125 | 129 | ||
| 126 | static bool isPopGestureInProgress(PageRoute<dynamic> route) { | 130 | static bool isPopGestureInProgress(PageRoute<dynamic> route) { |
| @@ -389,8 +393,8 @@ class GetPageRoute<T> extends PageRoute<T> { | @@ -389,8 +393,8 @@ class GetPageRoute<T> extends PageRoute<T> { | ||
| 389 | @override | 393 | @override |
| 390 | void dispose() { | 394 | void dispose() { |
| 391 | if (GetConfig.smartManagement != SmartManagement.onlyBuilder) { | 395 | if (GetConfig.smartManagement != SmartManagement.onlyBuilder) { |
| 392 | - WidgetsBinding.instance.addPostFrameCallback( | ||
| 393 | - (_) => GetInstance().removeDependencyByRoute("${settings.name}")); | 396 | + WidgetsBinding.instance.addPostFrameCallback((_) => GetInstance() |
| 397 | + .removeDependencyByRoute("${settings?.name ?? routeName}")); | ||
| 394 | } | 398 | } |
| 395 | super.dispose(); | 399 | super.dispose(); |
| 396 | } | 400 | } |
| 1 | import 'package:flutter/widgets.dart'; | 1 | import 'package:flutter/widgets.dart'; |
| 2 | +import 'package:get/route_manager.dart'; | ||
| 2 | import 'package:get/src/instance/get_instance.dart'; | 3 | import 'package:get/src/instance/get_instance.dart'; |
| 4 | +import 'package:get/src/navigation/dialog/dialog_route.dart'; | ||
| 5 | +import 'package:get/src/navigation/routes/default_route.dart'; | ||
| 6 | +import 'package:get/src/navigation/snackbar/snack_route.dart'; | ||
| 3 | 7 | ||
| 4 | class Routing { | 8 | class Routing { |
| 5 | String current; | 9 | String current; |
| @@ -25,7 +29,6 @@ class Routing { | @@ -25,7 +29,6 @@ class Routing { | ||
| 25 | 29 | ||
| 26 | void update(void fn(Routing value)) { | 30 | void update(void fn(Routing value)) { |
| 27 | fn(this); | 31 | fn(this); |
| 28 | - GetConfig.currentRoute = this.current; | ||
| 29 | } | 32 | } |
| 30 | } | 33 | } |
| 31 | 34 | ||
| @@ -46,28 +49,49 @@ class GetObserver extends NavigatorObserver { | @@ -46,28 +49,49 @@ class GetObserver extends NavigatorObserver { | ||
| 46 | // String previousArgs; | 49 | // String previousArgs; |
| 47 | String removed; | 50 | String removed; |
| 48 | 51 | ||
| 52 | + String name(Route<dynamic> route) { | ||
| 53 | + if (route?.settings?.name != null) { | ||
| 54 | + return route?.settings?.name; | ||
| 55 | + } else if (route is GetPageRoute) { | ||
| 56 | + return route.routeName; | ||
| 57 | + } else if (route is GetDialogRoute) { | ||
| 58 | + return route.name; | ||
| 59 | + } else if (route is GetModalBottomSheetRoute) { | ||
| 60 | + return route.name; | ||
| 61 | + } else { | ||
| 62 | + return route?.settings?.name; | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + | ||
| 49 | @override | 66 | @override |
| 50 | void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { | 67 | void didPush(Route<dynamic> route, Route<dynamic> previousRoute) { |
| 51 | - if ('${route?.settings?.name}' == 'snackbar') { | ||
| 52 | - GetConfig.log("[GETX] OPEN SNACKBAR ${route?.settings?.name}"); | ||
| 53 | - } else if ('${route?.settings?.name}' == 'bottomsheet') { | ||
| 54 | - GetConfig.log("[GETX] OPEN BOTTOMSHEET ${route?.settings?.name}"); | ||
| 55 | - } else if ('${route?.settings?.name}' == 'dialog') { | ||
| 56 | - GetConfig.log("[GETX] OPEN DIALOG ${route?.settings?.name}"); | ||
| 57 | - } else { | ||
| 58 | - GetConfig.log("[GETX] GOING TO ROUTE ${route?.settings?.name}"); | 68 | + bool isGetPageRoute = route is GetPageRoute; |
| 69 | + bool isSnackbar = route is SnackRoute; | ||
| 70 | + bool isDialog = route is GetDialogRoute; | ||
| 71 | + bool isBottomSheet = route is GetModalBottomSheetRoute; | ||
| 72 | + String routeName = name(route); | ||
| 73 | + | ||
| 74 | + if (isSnackbar) { | ||
| 75 | + GetConfig.log("[GETX] OPEN SNACKBAR $routeName"); | ||
| 76 | + } else if (isBottomSheet) { | ||
| 77 | + GetConfig.log("[GETX] OPEN $routeName"); | ||
| 78 | + } else if (isDialog) { | ||
| 79 | + GetConfig.log("[GETX] OPEN $routeName"); | ||
| 80 | + } else if (isGetPageRoute) { | ||
| 81 | + GetConfig.log("[GETX] GOING TO ROUTE $routeName"); | ||
| 59 | } | 82 | } |
| 83 | + GetConfig.currentRoute = routeName; | ||
| 60 | 84 | ||
| 61 | _routeSend.update((value) { | 85 | _routeSend.update((value) { |
| 62 | - if (route is PageRoute) value.current = '${route?.settings?.name}'; | 86 | + if (route is PageRoute) value.current = routeName; |
| 63 | value.args = route?.settings?.arguments; | 87 | value.args = route?.settings?.arguments; |
| 64 | value.route = route; | 88 | value.route = route; |
| 65 | value.isBack = false; | 89 | value.isBack = false; |
| 66 | value.removed = ''; | 90 | value.removed = ''; |
| 67 | value.previous = '${previousRoute?.settings?.name}'; | 91 | value.previous = '${previousRoute?.settings?.name}'; |
| 68 | - value.isSnackbar = '${route?.settings?.name}' == 'snackbar'; | ||
| 69 | - value.isBottomSheet = '${route?.settings?.name}' == 'bottomsheet'; | ||
| 70 | - value.isDialog = '${route?.settings?.name}' == 'dialog'; | 92 | + value.isSnackbar = isSnackbar; |
| 93 | + value.isBottomSheet = isBottomSheet; | ||
| 94 | + value.isDialog = isDialog; | ||
| 71 | }); | 95 | }); |
| 72 | if (routing != null) routing(_routeSend); | 96 | if (routing != null) routing(_routeSend); |
| 73 | } | 97 | } |
| @@ -76,15 +100,22 @@ class GetObserver extends NavigatorObserver { | @@ -76,15 +100,22 @@ class GetObserver extends NavigatorObserver { | ||
| 76 | void didPop(Route route, Route previousRoute) { | 100 | void didPop(Route route, Route previousRoute) { |
| 77 | super.didPop(route, previousRoute); | 101 | super.didPop(route, previousRoute); |
| 78 | 102 | ||
| 79 | - if ('${route?.settings?.name}' == 'snackbar') { | ||
| 80 | - GetConfig.log("[GETX] CLOSE SNACKBAR ${route?.settings?.name}"); | ||
| 81 | - } else if ('${route?.settings?.name}' == 'bottomsheet') { | ||
| 82 | - GetConfig.log("[GETX] CLOSE BOTTOMSHEET ${route?.settings?.name}"); | ||
| 83 | - } else if ('${route?.settings?.name}' == 'dialog') { | ||
| 84 | - GetConfig.log("[GETX] CLOSE DIALOG ${route?.settings?.name}"); | ||
| 85 | - } else { | ||
| 86 | - GetConfig.log("[GETX] BACK ROUTE ${route?.settings?.name}"); | 103 | + bool isGetPageRoute = route is GetPageRoute; |
| 104 | + bool isSnackbar = route is SnackRoute; | ||
| 105 | + bool isDialog = route is GetDialogRoute; | ||
| 106 | + bool isBottomSheet = route is GetModalBottomSheetRoute; | ||
| 107 | + String routeName = name(route); | ||
| 108 | + | ||
| 109 | + if (isSnackbar) { | ||
| 110 | + GetConfig.log("[GETX] CLOSE SNACKBAR $routeName"); | ||
| 111 | + } else if (isBottomSheet) { | ||
| 112 | + GetConfig.log("[GETX] CLOSE $routeName"); | ||
| 113 | + } else if (isDialog) { | ||
| 114 | + GetConfig.log("[GETX] CLOSE $routeName"); | ||
| 115 | + } else if (isGetPageRoute) { | ||
| 116 | + GetConfig.log("[GETX] CLOSE TO ROUTE $routeName"); | ||
| 87 | } | 117 | } |
| 118 | + GetConfig.currentRoute = routeName; | ||
| 88 | 119 | ||
| 89 | _routeSend.update((value) { | 120 | _routeSend.update((value) { |
| 90 | if (previousRoute is PageRoute) | 121 | if (previousRoute is PageRoute) |
| @@ -104,9 +135,12 @@ class GetObserver extends NavigatorObserver { | @@ -104,9 +135,12 @@ class GetObserver extends NavigatorObserver { | ||
| 104 | @override | 135 | @override |
| 105 | void didReplace({Route newRoute, Route oldRoute}) { | 136 | void didReplace({Route newRoute, Route oldRoute}) { |
| 106 | super.didReplace(newRoute: newRoute, oldRoute: oldRoute); | 137 | super.didReplace(newRoute: newRoute, oldRoute: oldRoute); |
| 138 | + | ||
| 107 | GetConfig.log("[GETX] REPLACE ROUTE ${oldRoute?.settings?.name}"); | 139 | GetConfig.log("[GETX] REPLACE ROUTE ${oldRoute?.settings?.name}"); |
| 108 | GetConfig.log("[GETX] NEW ROUTE ${newRoute?.settings?.name}"); | 140 | GetConfig.log("[GETX] NEW ROUTE ${newRoute?.settings?.name}"); |
| 109 | 141 | ||
| 142 | + GetConfig.currentRoute = name(newRoute); | ||
| 143 | + | ||
| 110 | _routeSend.update((value) { | 144 | _routeSend.update((value) { |
| 111 | if (newRoute is PageRoute) value.current = '${newRoute?.settings?.name}'; | 145 | if (newRoute is PageRoute) value.current = '${newRoute?.settings?.name}'; |
| 112 | value.args = newRoute?.settings?.arguments; | 146 | value.args = newRoute?.settings?.arguments; |
| 1 | name: get | 1 | name: get |
| 2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. | 2 | description: Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with GetX. |
| 3 | -version: 3.4.6 | 3 | +version: 3.5.0 |
| 4 | homepage: https://github.com/jonataslaw/get | 4 | homepage: https://github.com/jonataslaw/get |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
| 7 | - sdk: ">=2.6.0 <3.0.0" | 7 | + sdk: ">=2.8.0 <3.0.0" |
| 8 | 8 | ||
| 9 | dependencies: | 9 | dependencies: |
| 10 | flutter: | 10 | flutter: |
-
Please register or login to post a comment