Cupertino navbar ellipsis fix (#118841)

* Passdown context

* make transitions ignore preffered text size

* Add test

* Add comment

* Return const constructor
This commit is contained in:
Mitchell Goodwin 2023-01-20 13:31:06 -08:00 committed by GitHub
parent a07e8a6ac4
commit 3c769effad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 9 deletions

View file

@ -1770,12 +1770,16 @@ class _NavigationBarTransition extends StatelessWidget {
// The actual outer box is big enough to contain both the bottom and top
// navigation bars. It's not a direct Rect lerp because some components
// can actually be outside the linearly lerp'ed Rect in the middle of
// the animation, such as the topLargeTitle.
return SizedBox(
height: math.max(heightTween.begin!, heightTween.end!) + MediaQuery.paddingOf(context).top,
width: double.infinity,
child: Stack(
children: children,
// the animation, such as the topLargeTitle. The textScaleFactor is kept
// at 1 to avoid odd transitions between pages.
return MediaQuery(
data: MediaQuery.of(context).copyWith(textScaleFactor: 1),
child: SizedBox(
height: math.max(heightTween.begin!, heightTween.end!) + MediaQuery.paddingOf(context).top,
width: double.infinity,
child: Stack(
children: children,
),
),
);
}

View file

@ -25,14 +25,18 @@ Future<void> startTransitionBetween(
String? toTitle,
TextDirection textDirection = TextDirection.ltr,
CupertinoThemeData? theme,
double textScale = 1.0,
}) async {
await tester.pumpWidget(
CupertinoApp(
theme: theme,
builder: (BuildContext context, Widget? navigator) {
return Directionality(
textDirection: textDirection,
child: navigator!,
return MediaQuery(
data: MediaQuery.of(context).copyWith(textScaleFactor: textScale),
child: Directionality(
textDirection: textDirection,
child: navigator!,
)
);
},
home: const Placeholder(),
@ -1225,6 +1229,14 @@ void main() {
expect(find.text('Page 1'), findsOneWidget);
});
testWidgets('textScaleFactor is set to 1.0 on transition', (WidgetTester tester) async {
await startTransitionBetween(tester, fromTitle: 'Page 1', textScale: 99);
await tester.pump(const Duration(milliseconds: 50));
expect(tester.firstWidget<RichText>(flying(tester, find.byType(RichText))).textScaleFactor, 1);
});
testWidgets('Back swipe gesture cancels properly with transition', (WidgetTester tester) async {
await startTransitionBetween(
tester,