@@ -41,7 +41,7 @@ class MDCTabBarViewDelegateImpl extends NSObject implements MDCTabBarViewDelegat
41
41
const selectedIndex = owner . tabBarItems . indexOf ( item ) ;
42
42
43
43
if ( owner . selectedIndex !== selectedIndex ) {
44
- owner . _canSelectItem = false ;
44
+ owner . beginTabTransition ( ) ;
45
45
}
46
46
47
47
const tabStrip = owner . tabStrip ;
@@ -396,7 +396,7 @@ class UIPageViewControllerDelegateImpl extends NSObject implements UIPageViewCon
396
396
// or it will create weird behaviors
397
397
owner . _animateNextChange = false ;
398
398
owner . selectedIndex = nextViewControllerIndex ;
399
- owner . _canSelectItem = true ;
399
+ owner . finishTabTransition ( ) ;
400
400
}
401
401
// HACK: UIPageViewController fix; see https://stackoverflow.com/questions/15325891
402
402
if ( owner . _needsCacheUpdate ) {
@@ -502,6 +502,8 @@ export class Tabs extends TabsBase {
502
502
private _rippleColor : Color ;
503
503
public iosCustomPositioning : boolean ;
504
504
505
+ private _layoutPending = false ;
506
+
505
507
constructor ( ) {
506
508
super ( ) ;
507
509
@@ -526,6 +528,26 @@ export class Tabs extends TabsBase {
526
528
super . disposeNativeView ( ) ;
527
529
}
528
530
531
+ requestLayout ( ) {
532
+ if ( ! this . _canSelectItem ) {
533
+ this . _layoutPending = true ;
534
+ } else {
535
+ this . _layoutPending = false ;
536
+ super . requestLayout ( ) ;
537
+ }
538
+ }
539
+
540
+ beginTabTransition ( ) {
541
+ this . _canSelectItem = false ;
542
+ }
543
+
544
+ finishTabTransition ( ) {
545
+ this . _canSelectItem = true ;
546
+ if ( this . _layoutPending ) {
547
+ this . requestLayout ( ) ;
548
+ }
549
+ }
550
+
529
551
// TODO
530
552
// @profile
531
553
public onLoaded ( ) {
@@ -781,7 +803,9 @@ export class Tabs extends TabsBase {
781
803
this . _needsCacheUpdate = true ;
782
804
super . onItemsChanged ( oldItems , newItems ) ;
783
805
if ( oldItems ) {
784
- this . _canSelectItem = true ;
806
+ if ( ! this . _canSelectItem ) {
807
+ this . finishTabTransition ( ) ;
808
+ }
785
809
this . _setCanBeLoaded ( this . selectedIndex ) ;
786
810
this . _loadUnloadTabItems ( this . selectedIndex ) ;
787
811
}
@@ -1175,7 +1199,7 @@ export class Tabs extends TabsBase {
1175
1199
const doneAnimating = ( ) => {
1176
1200
this . visitFrames ( item , ( frame ) => ( frame . _animationInProgress = false ) ) ;
1177
1201
1178
- this . _canSelectItem = true ;
1202
+ this . finishTabTransition ( ) ;
1179
1203
this . _setCanBeLoaded ( value ) ;
1180
1204
this . _loadUnloadTabItems ( value ) ;
1181
1205
} ;
0 commit comments