Showing
9 changed files
with
89 additions
and
75 deletions
| @@ -7,7 +7,7 @@ class ProductDetailsBinding extends Binding { | @@ -7,7 +7,7 @@ class ProductDetailsBinding extends Binding { | ||
| 7 | List<Bind> dependencies() { | 7 | List<Bind> dependencies() { |
| 8 | return [ | 8 | return [ |
| 9 | Bind.create<ProductDetailsController>( | 9 | Bind.create<ProductDetailsController>( |
| 10 | - () => ProductDetailsController( | 10 | + (_) => ProductDetailsController( |
| 11 | Get.parameters['productId'] ?? '', | 11 | Get.parameters['productId'] ?? '', |
| 12 | ), | 12 | ), |
| 13 | ) | 13 | ) |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | 2 | ||
| 3 | +import 'package:flutter/material.dart'; | ||
| 4 | + | ||
| 3 | import '../../get_core/get_core.dart'; | 5 | import '../../get_core/get_core.dart'; |
| 4 | import '../../get_navigation/src/router_report.dart'; | 6 | import '../../get_navigation/src/router_report.dart'; |
| 5 | import 'lifecycle.dart'; | 7 | import 'lifecycle.dart'; |
| @@ -493,6 +495,10 @@ extension Inst on GetInterface { | @@ -493,6 +495,10 @@ extension Inst on GetInterface { | ||
| 493 | 495 | ||
| 494 | typedef InstanceBuilderCallback<S> = S Function(); | 496 | typedef InstanceBuilderCallback<S> = S Function(); |
| 495 | 497 | ||
| 498 | +typedef InstanceCreateBuilderCallback<S> = S Function(BuildContext _); | ||
| 499 | + | ||
| 500 | +// typedef InstanceBuilderCallback<S> = S Function(); | ||
| 501 | + | ||
| 496 | // typedef InjectorBuilderCallback<S> = S Function(Inst); | 502 | // typedef InjectorBuilderCallback<S> = S Function(Inst); |
| 497 | 503 | ||
| 498 | typedef AsyncInstanceBuilderCallback<S> = Future<S> Function(); | 504 | typedef AsyncInstanceBuilderCallback<S> = Future<S> Function(); |
| @@ -362,7 +362,6 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -362,7 +362,6 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 362 | Widget child, { | 362 | Widget child, { |
| 363 | bool limitedSwipe = false, | 363 | bool limitedSwipe = false, |
| 364 | double initialOffset = 0, | 364 | double initialOffset = 0, |
| 365 | - Transition? transition, | ||
| 366 | }) { | 365 | }) { |
| 367 | // Check if the route has an animation that's currently participating | 366 | // Check if the route has an animation that's currently participating |
| 368 | // in a back swipe gesture. | 367 | // in a back swipe gesture. |
| @@ -393,9 +392,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -393,9 +392,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 393 | secondaryAnimation, | 392 | secondaryAnimation, |
| 394 | GetBackGestureDetector<T>( | 393 | GetBackGestureDetector<T>( |
| 395 | popGestureEnable: () => | 394 | popGestureEnable: () => |
| 396 | - _isPopGestureEnabled(route, canSwipe(route)), | 395 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 397 | onStartPopGesture: () { | 396 | onStartPopGesture: () { |
| 398 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 397 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 399 | return _startPopGesture(route); | 398 | return _startPopGesture(route); |
| 400 | }, | 399 | }, |
| 401 | limitedSwipe: limitedSwipe, | 400 | limitedSwipe: limitedSwipe, |
| @@ -411,7 +410,7 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -411,7 +410,7 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 411 | final iosAnimation = animation; | 410 | final iosAnimation = animation; |
| 412 | animation = CurvedAnimation(parent: animation, curve: finalCurve); | 411 | animation = CurvedAnimation(parent: animation, curve: finalCurve); |
| 413 | 412 | ||
| 414 | - switch (transition ?? Get.defaultTransition) { | 413 | + switch (route.transition ?? Get.defaultTransition) { |
| 415 | case Transition.leftToRight: | 414 | case Transition.leftToRight: |
| 416 | return SlideLeftTransition().buildTransitions( | 415 | return SlideLeftTransition().buildTransitions( |
| 417 | context, | 416 | context, |
| @@ -421,9 +420,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -421,9 +420,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 421 | secondaryAnimation, | 420 | secondaryAnimation, |
| 422 | GetBackGestureDetector<T>( | 421 | GetBackGestureDetector<T>( |
| 423 | popGestureEnable: () => | 422 | popGestureEnable: () => |
| 424 | - _isPopGestureEnabled(route, canSwipe(route)), | 423 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 425 | onStartPopGesture: () { | 424 | onStartPopGesture: () { |
| 426 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 425 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 427 | return _startPopGesture(route); | 426 | return _startPopGesture(route); |
| 428 | }, | 427 | }, |
| 429 | limitedSwipe: limitedSwipe, | 428 | limitedSwipe: limitedSwipe, |
| @@ -442,9 +441,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -442,9 +441,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 442 | secondaryAnimation, | 441 | secondaryAnimation, |
| 443 | GetBackGestureDetector<T>( | 442 | GetBackGestureDetector<T>( |
| 444 | popGestureEnable: () => | 443 | popGestureEnable: () => |
| 445 | - _isPopGestureEnabled(route, canSwipe(route)), | 444 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 446 | onStartPopGesture: () { | 445 | onStartPopGesture: () { |
| 447 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 446 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 448 | return _startPopGesture(route); | 447 | return _startPopGesture(route); |
| 449 | }, | 448 | }, |
| 450 | limitedSwipe: limitedSwipe, | 449 | limitedSwipe: limitedSwipe, |
| @@ -463,9 +462,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -463,9 +462,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 463 | secondaryAnimation, | 462 | secondaryAnimation, |
| 464 | GetBackGestureDetector<T>( | 463 | GetBackGestureDetector<T>( |
| 465 | popGestureEnable: () => | 464 | popGestureEnable: () => |
| 466 | - _isPopGestureEnabled(route, canSwipe(route)), | 465 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 467 | onStartPopGesture: () { | 466 | onStartPopGesture: () { |
| 468 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 467 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 469 | return _startPopGesture(route); | 468 | return _startPopGesture(route); |
| 470 | }, | 469 | }, |
| 471 | limitedSwipe: limitedSwipe, | 470 | limitedSwipe: limitedSwipe, |
| @@ -478,9 +477,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -478,9 +477,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 478 | case Transition.noTransition: | 477 | case Transition.noTransition: |
| 479 | return GetBackGestureDetector<T>( | 478 | return GetBackGestureDetector<T>( |
| 480 | popGestureEnable: () => | 479 | popGestureEnable: () => |
| 481 | - _isPopGestureEnabled(route, canSwipe(route)), | 480 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 482 | onStartPopGesture: () { | 481 | onStartPopGesture: () { |
| 483 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 482 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 484 | return _startPopGesture(route); | 483 | return _startPopGesture(route); |
| 485 | }, | 484 | }, |
| 486 | limitedSwipe: limitedSwipe, | 485 | limitedSwipe: limitedSwipe, |
| @@ -499,9 +498,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -499,9 +498,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 499 | secondaryAnimation, | 498 | secondaryAnimation, |
| 500 | GetBackGestureDetector<T>( | 499 | GetBackGestureDetector<T>( |
| 501 | popGestureEnable: () => | 500 | popGestureEnable: () => |
| 502 | - _isPopGestureEnabled(route, canSwipe(route)), | 501 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 503 | onStartPopGesture: () { | 502 | onStartPopGesture: () { |
| 504 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 503 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 505 | return _startPopGesture(route); | 504 | return _startPopGesture(route); |
| 506 | }, | 505 | }, |
| 507 | limitedSwipe: limitedSwipe, | 506 | limitedSwipe: limitedSwipe, |
| @@ -520,9 +519,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -520,9 +519,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 520 | secondaryAnimation, | 519 | secondaryAnimation, |
| 521 | GetBackGestureDetector<T>( | 520 | GetBackGestureDetector<T>( |
| 522 | popGestureEnable: () => | 521 | popGestureEnable: () => |
| 523 | - _isPopGestureEnabled(route, canSwipe(route)), | 522 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 524 | onStartPopGesture: () { | 523 | onStartPopGesture: () { |
| 525 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 524 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 526 | return _startPopGesture(route); | 525 | return _startPopGesture(route); |
| 527 | }, | 526 | }, |
| 528 | limitedSwipe: limitedSwipe, | 527 | limitedSwipe: limitedSwipe, |
| @@ -541,9 +540,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -541,9 +540,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 541 | secondaryAnimation, | 540 | secondaryAnimation, |
| 542 | GetBackGestureDetector<T>( | 541 | GetBackGestureDetector<T>( |
| 543 | popGestureEnable: () => | 542 | popGestureEnable: () => |
| 544 | - _isPopGestureEnabled(route, canSwipe(route)), | 543 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 545 | onStartPopGesture: () { | 544 | onStartPopGesture: () { |
| 546 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 545 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 547 | return _startPopGesture(route); | 546 | return _startPopGesture(route); |
| 548 | }, | 547 | }, |
| 549 | limitedSwipe: limitedSwipe, | 548 | limitedSwipe: limitedSwipe, |
| @@ -562,9 +561,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -562,9 +561,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 562 | secondaryAnimation, | 561 | secondaryAnimation, |
| 563 | GetBackGestureDetector<T>( | 562 | GetBackGestureDetector<T>( |
| 564 | popGestureEnable: () => | 563 | popGestureEnable: () => |
| 565 | - _isPopGestureEnabled(route, canSwipe(route)), | 564 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 566 | onStartPopGesture: () { | 565 | onStartPopGesture: () { |
| 567 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 566 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 568 | return _startPopGesture(route); | 567 | return _startPopGesture(route); |
| 569 | }, | 568 | }, |
| 570 | limitedSwipe: limitedSwipe, | 569 | limitedSwipe: limitedSwipe, |
| @@ -583,9 +582,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -583,9 +582,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 583 | secondaryAnimation, | 582 | secondaryAnimation, |
| 584 | GetBackGestureDetector<T>( | 583 | GetBackGestureDetector<T>( |
| 585 | popGestureEnable: () => | 584 | popGestureEnable: () => |
| 586 | - _isPopGestureEnabled(route, canSwipe(route)), | 585 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 587 | onStartPopGesture: () { | 586 | onStartPopGesture: () { |
| 588 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 587 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 589 | return _startPopGesture(route); | 588 | return _startPopGesture(route); |
| 590 | }, | 589 | }, |
| 591 | limitedSwipe: limitedSwipe, | 590 | limitedSwipe: limitedSwipe, |
| @@ -602,9 +601,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -602,9 +601,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 602 | linearTransition: linearTransition, | 601 | linearTransition: linearTransition, |
| 603 | child: GetBackGestureDetector<T>( | 602 | child: GetBackGestureDetector<T>( |
| 604 | popGestureEnable: () => | 603 | popGestureEnable: () => |
| 605 | - _isPopGestureEnabled(route, canSwipe(route)), | 604 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 606 | onStartPopGesture: () { | 605 | onStartPopGesture: () { |
| 607 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 606 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 608 | return _startPopGesture(route); | 607 | return _startPopGesture(route); |
| 609 | }, | 608 | }, |
| 610 | limitedSwipe: limitedSwipe, | 609 | limitedSwipe: limitedSwipe, |
| @@ -623,9 +622,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -623,9 +622,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 623 | secondaryAnimation, | 622 | secondaryAnimation, |
| 624 | GetBackGestureDetector<T>( | 623 | GetBackGestureDetector<T>( |
| 625 | popGestureEnable: () => | 624 | popGestureEnable: () => |
| 626 | - _isPopGestureEnabled(route, canSwipe(route)), | 625 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 627 | onStartPopGesture: () { | 626 | onStartPopGesture: () { |
| 628 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 627 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 629 | return _startPopGesture(route); | 628 | return _startPopGesture(route); |
| 630 | }, | 629 | }, |
| 631 | limitedSwipe: limitedSwipe, | 630 | limitedSwipe: limitedSwipe, |
| @@ -643,9 +642,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -643,9 +642,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 643 | secondaryAnimation, | 642 | secondaryAnimation, |
| 644 | GetBackGestureDetector<T>( | 643 | GetBackGestureDetector<T>( |
| 645 | popGestureEnable: () => | 644 | popGestureEnable: () => |
| 646 | - _isPopGestureEnabled(route, canSwipe(route)), | 645 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 647 | onStartPopGesture: () { | 646 | onStartPopGesture: () { |
| 648 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 647 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 649 | return _startPopGesture(route); | 648 | return _startPopGesture(route); |
| 650 | }, | 649 | }, |
| 651 | limitedSwipe: limitedSwipe, | 650 | limitedSwipe: limitedSwipe, |
| @@ -663,9 +662,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -663,9 +662,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 663 | secondaryAnimation, | 662 | secondaryAnimation, |
| 664 | GetBackGestureDetector<T>( | 663 | GetBackGestureDetector<T>( |
| 665 | popGestureEnable: () => | 664 | popGestureEnable: () => |
| 666 | - _isPopGestureEnabled(route, canSwipe(route)), | 665 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 667 | onStartPopGesture: () { | 666 | onStartPopGesture: () { |
| 668 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 667 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 669 | return _startPopGesture(route); | 668 | return _startPopGesture(route); |
| 670 | }, | 669 | }, |
| 671 | limitedSwipe: limitedSwipe, | 670 | limitedSwipe: limitedSwipe, |
| @@ -683,9 +682,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -683,9 +682,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 683 | secondaryAnimation, | 682 | secondaryAnimation, |
| 684 | GetBackGestureDetector<T>( | 683 | GetBackGestureDetector<T>( |
| 685 | popGestureEnable: () => | 684 | popGestureEnable: () => |
| 686 | - _isPopGestureEnabled(route, canSwipe(route)), | 685 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 687 | onStartPopGesture: () { | 686 | onStartPopGesture: () { |
| 688 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 687 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 689 | return _startPopGesture(route); | 688 | return _startPopGesture(route); |
| 690 | }, | 689 | }, |
| 691 | limitedSwipe: limitedSwipe, | 690 | limitedSwipe: limitedSwipe, |
| @@ -704,9 +703,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -704,9 +703,9 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 704 | secondaryAnimation, | 703 | secondaryAnimation, |
| 705 | GetBackGestureDetector<T>( | 704 | GetBackGestureDetector<T>( |
| 706 | popGestureEnable: () => | 705 | popGestureEnable: () => |
| 707 | - _isPopGestureEnabled(route, canSwipe(route)), | 706 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 708 | onStartPopGesture: () { | 707 | onStartPopGesture: () { |
| 709 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 708 | + assert(_isPopGestureEnabled(route, canSwipe(route), context)); |
| 710 | return _startPopGesture(route); | 709 | return _startPopGesture(route); |
| 711 | }, | 710 | }, |
| 712 | limitedSwipe: limitedSwipe, | 711 | limitedSwipe: limitedSwipe, |
| @@ -731,9 +730,11 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -731,9 +730,11 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 731 | secondaryAnimation, | 730 | secondaryAnimation, |
| 732 | GetBackGestureDetector<T>( | 731 | GetBackGestureDetector<T>( |
| 733 | popGestureEnable: () => | 732 | popGestureEnable: () => |
| 734 | - _isPopGestureEnabled(route, canSwipe(route)), | 733 | + _isPopGestureEnabled(route, canSwipe(route), context), |
| 735 | onStartPopGesture: () { | 734 | onStartPopGesture: () { |
| 736 | - assert(_isPopGestureEnabled(route, canSwipe(route))); | 735 | + assert( |
| 736 | + _isPopGestureEnabled(route, canSwipe(route), context), | ||
| 737 | + ); | ||
| 737 | return _startPopGesture(route); | 738 | return _startPopGesture(route); |
| 738 | }, | 739 | }, |
| 739 | limitedSwipe: limitedSwipe, | 740 | limitedSwipe: limitedSwipe, |
| @@ -758,11 +759,13 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -758,11 +759,13 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 758 | /// | 759 | /// |
| 759 | /// * [popGestureEnabled], which returns true if a user-triggered pop gesture | 760 | /// * [popGestureEnabled], which returns true if a user-triggered pop gesture |
| 760 | /// would be allowed. | 761 | /// would be allowed. |
| 761 | - // static bool isPopGestureInProgress(PageRoute<dynamic> route) { | ||
| 762 | - // return route.navigator!.userGestureInProgress; | ||
| 763 | - // } | 762 | + static bool isPopGestureInProgress(BuildContext context) { |
| 763 | + final route = ModalRoute.of(context)!; | ||
| 764 | + return route.navigator!.userGestureInProgress; | ||
| 765 | + } | ||
| 764 | 766 | ||
| 765 | - static bool _isPopGestureEnabled<T>(PageRoute<T> route, bool canSwipe) { | 767 | + static bool _isPopGestureEnabled<T>( |
| 768 | + PageRoute<T> route, bool canSwipe, BuildContext context) { | ||
| 766 | // If there's nothing to go back to, then obviously we don't support | 769 | // If there's nothing to go back to, then obviously we don't support |
| 767 | // the back gesture. | 770 | // the back gesture. |
| 768 | if (route.isFirst) return false; | 771 | if (route.isFirst) return false; |
| @@ -784,7 +787,7 @@ Cannot read the previousTitle for a route that has not yet been installed''', | @@ -784,7 +787,7 @@ Cannot read the previousTitle for a route that has not yet been installed''', | ||
| 784 | return false; | 787 | return false; |
| 785 | } | 788 | } |
| 786 | // If we're in a gesture already, we cannot start another. | 789 | // If we're in a gesture already, we cannot start another. |
| 787 | - if (CupertinoRouteTransitionMixin.isPopGestureInProgress(route)) { | 790 | + if (GetPageRouteTransitionMixin.isPopGestureInProgress(context)) { |
| 788 | return false; | 791 | return false; |
| 789 | } | 792 | } |
| 790 | 793 |
| @@ -147,8 +147,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | @@ -147,8 +147,7 @@ class GetRouterOutlet extends RouterOutlet<GetDelegate, RouteDecoder> { | ||
| 147 | return ret; | 147 | return ret; |
| 148 | }, | 148 | }, |
| 149 | emptyPage: (delegate) => | 149 | emptyPage: (delegate) => |
| 150 | - delegate.matchRoute(initialRoute).route ?? | ||
| 151 | - delegate.notFoundRoute, | 150 | + delegate.matchRoute(initialRoute).route ?? delegate.notFoundRoute, |
| 152 | key: Get.nestedKey(anchorRoute)?.navigatorKey, | 151 | key: Get.nestedKey(anchorRoute)?.navigatorKey, |
| 153 | delegate: delegate, | 152 | delegate: delegate, |
| 154 | ); | 153 | ); |
| 1 | // ignore_for_file: overridden_fields | 1 | // ignore_for_file: overridden_fields |
| 2 | 2 | ||
| 3 | +import 'dart:async'; | ||
| 4 | + | ||
| 3 | import 'package:flutter/material.dart'; | 5 | import 'package:flutter/material.dart'; |
| 4 | 6 | ||
| 5 | import '../../../instance_manager.dart'; | 7 | import '../../../instance_manager.dart'; |
| @@ -149,10 +151,10 @@ abstract class Bind<T> extends StatelessWidget { | @@ -149,10 +151,10 @@ abstract class Bind<T> extends StatelessWidget { | ||
| 149 | ); | 151 | ); |
| 150 | } | 152 | } |
| 151 | 153 | ||
| 152 | - static Bind create<S>(InstanceBuilderCallback<S> builder, | 154 | + static Bind create<S>(InstanceCreateBuilderCallback<S> builder, |
| 153 | {String? tag, bool permanent = true}) { | 155 | {String? tag, bool permanent = true}) { |
| 154 | - Get.create<S>(builder, tag: tag, permanent: permanent); | ||
| 155 | return _FactoryBind<S>( | 156 | return _FactoryBind<S>( |
| 157 | + create: builder, | ||
| 156 | tag: tag, | 158 | tag: tag, |
| 157 | ); | 159 | ); |
| 158 | } | 160 | } |
| @@ -192,6 +194,7 @@ abstract class Bind<T> extends StatelessWidget { | @@ -192,6 +194,7 @@ abstract class Bind<T> extends StatelessWidget { | ||
| 192 | factory Bind.builder({ | 194 | factory Bind.builder({ |
| 193 | Widget? child, | 195 | Widget? child, |
| 194 | InitBuilder<T>? init, | 196 | InitBuilder<T>? init, |
| 197 | + InstanceCreateBuilderCallback<T>? create, | ||
| 195 | bool global = true, | 198 | bool global = true, |
| 196 | bool autoRemove = true, | 199 | bool autoRemove = true, |
| 197 | bool assignId = false, | 200 | bool assignId = false, |
| @@ -206,6 +209,7 @@ abstract class Bind<T> extends StatelessWidget { | @@ -206,6 +209,7 @@ abstract class Bind<T> extends StatelessWidget { | ||
| 206 | _FactoryBind<T>( | 209 | _FactoryBind<T>( |
| 207 | // key: key, | 210 | // key: key, |
| 208 | init: init, | 211 | init: init, |
| 212 | + create: create, | ||
| 209 | global: global, | 213 | global: global, |
| 210 | autoRemove: autoRemove, | 214 | autoRemove: autoRemove, |
| 211 | assignId: assignId, | 215 | assignId: assignId, |
| @@ -254,6 +258,8 @@ class _FactoryBind<T> extends Bind<T> { | @@ -254,6 +258,8 @@ class _FactoryBind<T> extends Bind<T> { | ||
| 254 | @override | 258 | @override |
| 255 | final InitBuilder<T>? init; | 259 | final InitBuilder<T>? init; |
| 256 | 260 | ||
| 261 | + final InstanceCreateBuilderCallback<T>? create; | ||
| 262 | + | ||
| 257 | @override | 263 | @override |
| 258 | final bool global; | 264 | final bool global; |
| 259 | @override | 265 | @override |
| @@ -282,6 +288,7 @@ class _FactoryBind<T> extends Bind<T> { | @@ -282,6 +288,7 @@ class _FactoryBind<T> extends Bind<T> { | ||
| 282 | Key? key, | 288 | Key? key, |
| 283 | this.child, | 289 | this.child, |
| 284 | this.init, | 290 | this.init, |
| 291 | + this.create, | ||
| 285 | this.global = true, | 292 | this.global = true, |
| 286 | this.autoRemove = true, | 293 | this.autoRemove = true, |
| 287 | this.assignId = false, | 294 | this.assignId = false, |
| @@ -298,6 +305,7 @@ class _FactoryBind<T> extends Bind<T> { | @@ -298,6 +305,7 @@ class _FactoryBind<T> extends Bind<T> { | ||
| 298 | Bind<T> _copyWithChild(Widget child) { | 305 | Bind<T> _copyWithChild(Widget child) { |
| 299 | return Bind<T>.builder( | 306 | return Bind<T>.builder( |
| 300 | init: init, | 307 | init: init, |
| 308 | + create: create, | ||
| 301 | global: global, | 309 | global: global, |
| 302 | autoRemove: autoRemove, | 310 | autoRemove: autoRemove, |
| 303 | assignId: assignId, | 311 | assignId: assignId, |
| @@ -315,7 +323,7 @@ class _FactoryBind<T> extends Bind<T> { | @@ -315,7 +323,7 @@ class _FactoryBind<T> extends Bind<T> { | ||
| 315 | @override | 323 | @override |
| 316 | Widget build(BuildContext context) { | 324 | Widget build(BuildContext context) { |
| 317 | return Binder<T>( | 325 | return Binder<T>( |
| 318 | - init: init, | 326 | + create: create, |
| 319 | global: global, | 327 | global: global, |
| 320 | autoRemove: autoRemove, | 328 | autoRemove: autoRemove, |
| 321 | assignId: assignId, | 329 | assignId: assignId, |
| @@ -367,9 +375,11 @@ class Binder<T> extends InheritedWidget { | @@ -367,9 +375,11 @@ class Binder<T> extends InheritedWidget { | ||
| 367 | this.id, | 375 | this.id, |
| 368 | this.didChangeDependencies, | 376 | this.didChangeDependencies, |
| 369 | this.didUpdateWidget, | 377 | this.didUpdateWidget, |
| 378 | + this.create, | ||
| 370 | }) : super(key: key, child: child); | 379 | }) : super(key: key, child: child); |
| 371 | 380 | ||
| 372 | final InitBuilder<T>? init; | 381 | final InitBuilder<T>? init; |
| 382 | + final InstanceCreateBuilderCallback? create; | ||
| 373 | final bool global; | 383 | final bool global; |
| 374 | final Object? id; | 384 | final Object? id; |
| 375 | final String? tag; | 385 | final String? tag; |
| @@ -442,7 +452,7 @@ class BindElement<T> extends InheritedElement { | @@ -442,7 +452,7 @@ class BindElement<T> extends InheritedElement { | ||
| 442 | 452 | ||
| 443 | _controllerBuilder = () => Get.find<T>(tag: widget.tag); | 453 | _controllerBuilder = () => Get.find<T>(tag: widget.tag); |
| 444 | } else { | 454 | } else { |
| 445 | - _controllerBuilder = widget.init; | 455 | + _controllerBuilder = widget.create?.call(this) ?? widget.init; |
| 446 | _isCreator = true; | 456 | _isCreator = true; |
| 447 | if (widget.lazy) { | 457 | if (widget.lazy) { |
| 448 | Get.lazyPut<T>(_controllerBuilder!, tag: widget.tag); | 458 | Get.lazyPut<T>(_controllerBuilder!, tag: widget.tag); |
| @@ -451,7 +461,7 @@ class BindElement<T> extends InheritedElement { | @@ -451,7 +461,7 @@ class BindElement<T> extends InheritedElement { | ||
| 451 | } | 461 | } |
| 452 | } | 462 | } |
| 453 | } else { | 463 | } else { |
| 454 | - _controllerBuilder = widget.init; | 464 | + _controllerBuilder = widget.create?.call(this) ?? widget.init; |
| 455 | _isCreator = true; | 465 | _isCreator = true; |
| 456 | _needStart = true; | 466 | _needStart = true; |
| 457 | } | 467 | } |
| @@ -482,6 +492,10 @@ class BindElement<T> extends InheritedElement { | @@ -482,6 +492,10 @@ class BindElement<T> extends InheritedElement { | ||
| 482 | _remove?.call(); | 492 | _remove?.call(); |
| 483 | localController.addListener(filter); | 493 | localController.addListener(filter); |
| 484 | _remove = () => localController.removeListener(filter); | 494 | _remove = () => localController.removeListener(filter); |
| 495 | + } else if (localController is StreamController) { | ||
| 496 | + _remove?.call(); | ||
| 497 | + final stream = localController.stream.listen((_) => filter()); | ||
| 498 | + _remove = () => stream.cancel(); | ||
| 485 | } | 499 | } |
| 486 | } | 500 | } |
| 487 | 501 |
| @@ -91,7 +91,7 @@ class _GetCache<S extends GetLifeCycleMixin> extends WidgetCache<GetWidget<S>> { | @@ -91,7 +91,7 @@ class _GetCache<S extends GetLifeCycleMixin> extends WidgetCache<GetWidget<S>> { | ||
| 91 | widget!.controller.onDelete(); | 91 | widget!.controller.onDelete(); |
| 92 | Get.log('"${widget!.controller.runtimeType}" onClose() called'); | 92 | Get.log('"${widget!.controller.runtimeType}" onClose() called'); |
| 93 | Get.log('"${widget!.controller.runtimeType}" deleted from memory'); | 93 | Get.log('"${widget!.controller.runtimeType}" deleted from memory'); |
| 94 | - GetWidget._cache[widget!] = null; | 94 | + // GetWidget._cache[widget!] = null; |
| 95 | }); | 95 | }); |
| 96 | } | 96 | } |
| 97 | info = null; | 97 | info = null; |
| 1 | +import 'dart:async'; | ||
| 1 | import 'dart:collection'; | 2 | import 'dart:collection'; |
| 2 | 3 | ||
| 3 | import 'package:flutter/foundation.dart'; | 4 | import 'package:flutter/foundation.dart'; |
| @@ -23,6 +24,9 @@ class ListNotifierGroup = ListNotifier with ListNotifierGroupMixin; | @@ -23,6 +24,9 @@ class ListNotifierGroup = ListNotifier with ListNotifierGroupMixin; | ||
| 23 | mixin ListNotifierSingleMixin on Listenable { | 24 | mixin ListNotifierSingleMixin on Listenable { |
| 24 | List<GetStateUpdate>? _updaters = <GetStateUpdate>[]; | 25 | List<GetStateUpdate>? _updaters = <GetStateUpdate>[]; |
| 25 | 26 | ||
| 27 | + int _version = 0; | ||
| 28 | + int _microtaskVersion = 0; | ||
| 29 | + | ||
| 26 | @override | 30 | @override |
| 27 | Disposer addListener(GetStateUpdate listener) { | 31 | Disposer addListener(GetStateUpdate listener) { |
| 28 | assert(_debugAssertNotDisposed()); | 32 | assert(_debugAssertNotDisposed()); |
| @@ -57,8 +61,15 @@ mixin ListNotifierSingleMixin on Listenable { | @@ -57,8 +61,15 @@ mixin ListNotifierSingleMixin on Listenable { | ||
| 57 | } | 61 | } |
| 58 | 62 | ||
| 59 | void _notifyUpdate() { | 63 | void _notifyUpdate() { |
| 60 | - for (var element in _updaters!) { | ||
| 61 | - element(); | 64 | + if (_microtaskVersion == _version) { |
| 65 | + _microtaskVersion++; | ||
| 66 | + scheduleMicrotask(() { | ||
| 67 | + _version++; | ||
| 68 | + _microtaskVersion = _version; | ||
| 69 | + for (var element in _updaters!) { | ||
| 70 | + element(); | ||
| 71 | + } | ||
| 72 | + }); | ||
| 62 | } | 73 | } |
| 63 | } | 74 | } |
| 64 | 75 |
| 1 | import 'dart:async'; | 1 | import 'dart:async'; |
| 2 | 2 | ||
| 3 | -import 'package:flutter/scheduler.dart'; | ||
| 4 | import 'package:flutter/widgets.dart'; | 3 | import 'package:flutter/widgets.dart'; |
| 5 | 4 | ||
| 6 | import 'list_notifier.dart'; | 5 | import 'list_notifier.dart'; |
| @@ -70,7 +69,7 @@ class _ValueBuilderState<T> extends State<ValueBuilder<T>> { | @@ -70,7 +69,7 @@ class _ValueBuilderState<T> extends State<ValueBuilder<T>> { | ||
| 70 | } | 69 | } |
| 71 | } | 70 | } |
| 72 | 71 | ||
| 73 | -class ObxElement = StatelessElement with ObserverComponent; | 72 | +class ObxElement = StatelessElement with StatelessObserverComponent; |
| 74 | 73 | ||
| 75 | // It's a experimental feature | 74 | // It's a experimental feature |
| 76 | class Observer extends ObxStatelessWidget { | 75 | class Observer extends ObxStatelessWidget { |
| @@ -91,31 +90,13 @@ abstract class ObxStatelessWidget extends StatelessWidget { | @@ -91,31 +90,13 @@ abstract class ObxStatelessWidget extends StatelessWidget { | ||
| 91 | } | 90 | } |
| 92 | 91 | ||
| 93 | /// a Component that can track changes in a reactive variable | 92 | /// a Component that can track changes in a reactive variable |
| 94 | -mixin ObserverComponent on ComponentElement { | 93 | +mixin StatelessObserverComponent on StatelessElement { |
| 95 | List<Disposer>? disposers = <Disposer>[]; | 94 | List<Disposer>? disposers = <Disposer>[]; |
| 96 | 95 | ||
| 97 | void getUpdate() { | 96 | void getUpdate() { |
| 98 | - if (disposers != null) { | ||
| 99 | - _safeRebuild(); | ||
| 100 | - } | ||
| 101 | - } | ||
| 102 | - | ||
| 103 | - Future<bool> _safeRebuild() async { | ||
| 104 | - if (dirty) return false; | ||
| 105 | - if (SchedulerBinding.instance == null) { | ||
| 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; | ||
| 113 | - } | ||
| 114 | - | 97 | + if (disposers != null && !dirty) { |
| 115 | markNeedsBuild(); | 98 | markNeedsBuild(); |
| 116 | } | 99 | } |
| 117 | - | ||
| 118 | - return true; | ||
| 119 | } | 100 | } |
| 120 | 101 | ||
| 121 | @override | 102 | @override |
| 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: 5.0.0-beta.45 | 3 | +version: 5.0.0-beta.50 |
| 4 | homepage: https://github.com/jonataslaw/getx | 4 | homepage: https://github.com/jonataslaw/getx |
| 5 | 5 | ||
| 6 | environment: | 6 | environment: |
-
Please register or login to post a comment