mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Match CupertinoPageTransitionsBuilder animation duration to CupertinoPageRoute (#160241)
<!-- Thanks for filing a pull request! Reviewers are typically assigned within a week of filing a request. To learn more about code review, see our documentation on Tree Hygiene: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md --> The recent changes have made it possible to customize the duration in PageTransitionsBuilder, so I have adjusted CupertinoPageTransitionsBuilder's transition duration to CupertinoPageRoute. related issue: #29068 | Before | After | Native | | --- | --- | --- | | <video src="https://github.com/user-attachments/assets/1420bb86-37d2-4d5a-b0f9-e0860e3c8f01"> | <video src="https://github.com/user-attachments/assets/f0455f3a-ca80-4cb6-a803-b9c48ec2075e"> | <video src="https://github.com/user-attachments/assets/74218f9d-f4a1-4008-84ac-caf73355f467"> | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
parent
27f8bb91a6
commit
5bd65c434a
@ -148,9 +148,13 @@ mixin CupertinoRouteTransitionMixin<T> on PageRoute<T> {
|
||||
super.didChangePrevious(previousRoute);
|
||||
}
|
||||
|
||||
/// The duration of the page transition.
|
||||
///
|
||||
/// A relatively rigorous eyeball estimation.
|
||||
static const Duration kTransitionDuration = Duration(milliseconds: 500);
|
||||
|
||||
@override
|
||||
// A relatively rigorous eyeball estimation.
|
||||
Duration get transitionDuration => const Duration(milliseconds: 500);
|
||||
Duration get transitionDuration => kTransitionDuration;
|
||||
|
||||
@override
|
||||
Color? get barrierColor => fullscreenDialog ? null : _kCupertinoPageTransitionBarrierColor;
|
||||
|
@ -1019,6 +1019,9 @@ class CupertinoPageTransitionsBuilder extends PageTransitionsBuilder {
|
||||
/// Constructs a page transition animation that matches the iOS transition.
|
||||
const CupertinoPageTransitionsBuilder();
|
||||
|
||||
@override
|
||||
Duration get transitionDuration => CupertinoRouteTransitionMixin.kTransitionDuration;
|
||||
|
||||
@override
|
||||
DelegatedTransitionBuilder? get delegatedTransition =>
|
||||
CupertinoPageTransition.delegatedTransition;
|
||||
|
@ -286,6 +286,48 @@ void main() {
|
||||
variant: TargetPlatformVariant.only(TargetPlatform.android),
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'CupertinoPageTransitionsBuilder default duration is 500ms',
|
||||
(WidgetTester tester) async {
|
||||
final Map<String, WidgetBuilder> routes = <String, WidgetBuilder>{
|
||||
'/':
|
||||
(BuildContext context) => Material(
|
||||
child: TextButton(
|
||||
child: const Text('push'),
|
||||
onPressed: () {
|
||||
Navigator.of(context).pushNamed('/b');
|
||||
},
|
||||
),
|
||||
),
|
||||
'/b': (BuildContext context) => const Text('page b'),
|
||||
};
|
||||
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: ThemeData(
|
||||
pageTransitionsTheme: const PageTransitionsTheme(
|
||||
builders: <TargetPlatform, PageTransitionsBuilder>{
|
||||
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
|
||||
},
|
||||
),
|
||||
),
|
||||
routes: routes,
|
||||
),
|
||||
);
|
||||
|
||||
expect(find.byType(CupertinoPageTransition), findsOneWidget);
|
||||
|
||||
await tester.tap(find.text('push'));
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 499));
|
||||
expect(tester.hasRunningAnimations, isTrue);
|
||||
|
||||
await tester.pump(const Duration(milliseconds: 10));
|
||||
expect(tester.hasRunningAnimations, isFalse);
|
||||
},
|
||||
variant: TargetPlatformVariant.only(TargetPlatform.iOS),
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'Animation duration changes accordingly when page transition builder changes',
|
||||
(WidgetTester tester) async {
|
||||
|
@ -1975,7 +1975,7 @@ Future<void> main() async {
|
||||
|
||||
await tester.tap(find.text('two'));
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 500));
|
||||
await tester.pump(const Duration(milliseconds: 501));
|
||||
|
||||
expect(find.byKey(firstKey), findsNothing);
|
||||
expect(find.byKey(secondKey), isOnstage);
|
||||
@ -2016,7 +2016,7 @@ Future<void> main() async {
|
||||
|
||||
await tester.tap(find.text('two'));
|
||||
await tester.pump();
|
||||
await tester.pump(const Duration(milliseconds: 500));
|
||||
await tester.pump(const Duration(milliseconds: 501));
|
||||
|
||||
expect(find.byKey(firstKey), findsNothing);
|
||||
expect(find.byKey(secondKey), isOnstage);
|
||||
|
Loading…
Reference in New Issue
Block a user