@@ -41,7 +41,7 @@ class MDCTabBarViewDelegateImpl extends NSObject implements MDCTabBarViewDelegat
4141 const selectedIndex = owner . tabBarItems . indexOf ( item ) ;
4242
4343 if ( owner . selectedIndex !== selectedIndex ) {
44- owner . _canSelectItem = false ;
44+ owner . beginTabTransition ( ) ;
4545 }
4646
4747 const tabStrip = owner . tabStrip ;
@@ -396,7 +396,7 @@ class UIPageViewControllerDelegateImpl extends NSObject implements UIPageViewCon
396396 // or it will create weird behaviors
397397 owner . _animateNextChange = false ;
398398 owner . selectedIndex = nextViewControllerIndex ;
399- owner . _canSelectItem = true ;
399+ owner . finishTabTransition ( ) ;
400400 }
401401 // HACK: UIPageViewController fix; see https://stackoverflow.com/questions/15325891
402402 if ( owner . _needsCacheUpdate ) {
@@ -502,6 +502,8 @@ export class Tabs extends TabsBase {
502502 private _rippleColor : Color ;
503503 public iosCustomPositioning : boolean ;
504504
505+ private _layoutPending = false ;
506+
505507 constructor ( ) {
506508 super ( ) ;
507509
@@ -526,6 +528,26 @@ export class Tabs extends TabsBase {
526528 super . disposeNativeView ( ) ;
527529 }
528530
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+
529551 // TODO
530552 // @profile
531553 public onLoaded ( ) {
@@ -781,7 +803,9 @@ export class Tabs extends TabsBase {
781803 this . _needsCacheUpdate = true ;
782804 super . onItemsChanged ( oldItems , newItems ) ;
783805 if ( oldItems ) {
784- this . _canSelectItem = true ;
806+ if ( ! this . _canSelectItem ) {
807+ this . finishTabTransition ( ) ;
808+ }
785809 this . _setCanBeLoaded ( this . selectedIndex ) ;
786810 this . _loadUnloadTabItems ( this . selectedIndex ) ;
787811 }
@@ -1175,7 +1199,7 @@ export class Tabs extends TabsBase {
11751199 const doneAnimating = ( ) => {
11761200 this . visitFrames ( item , ( frame ) => ( frame . _animationInProgress = false ) ) ;
11771201
1178- this . _canSelectItem = true ;
1202+ this . finishTabTransition ( ) ;
11791203 this . _setCanBeLoaded ( value ) ;
11801204 this . _loadUnloadTabItems ( value ) ;
11811205 } ;
0 commit comments