1
0
mirror of https://github.com/flutter/samples.git synced 2025-11-08 13:58:47 +00:00
Files
samples/veggieseasons/lib/widgets/fade_transition_page.dart
Miguel Beltran 8c06626190 Migrate veggieseasons to go_router (#1544)
* add go_router

* wip migration to go_router

* small fixes

* home screen cleanup

* remove unused

* small fixes

* details should be fullscreen dialog

* remove comment

* fix navigation outside the shell by using the correct navigation keys

* add restoration id to all pages

* test passing, but parts are commented out, wip

* uncommented more test code

* Add TODOs

* fix lint issues

* fix tests

* use FadeTransitionPage

* remove unnecessary builders

* FadeTransitionPage same as CustomTransitionPage

* add comments regarding relative routes

* add missing pageKey

* add missing const

---------

Co-authored-by: Brett Morgan <brettmorgan@google.com>
2023-02-24 08:18:03 +01:00

67 lines
1.6 KiB
Dart

// Copyright 2021, the Flutter project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:flutter/cupertino.dart';
class FadeTransitionPage<T> extends Page<T> {
final Widget child;
final Duration duration;
const FadeTransitionPage({
super.key,
required this.child,
this.duration = const Duration(milliseconds: 300),
super.restorationId,
});
@override
Route<T> createRoute(BuildContext context) =>
PageBasedFadeTransitionRoute<T>(this);
}
class PageBasedFadeTransitionRoute<T> extends PageRoute<T> {
PageBasedFadeTransitionRoute(FadeTransitionPage<T> page)
: super(settings: page);
FadeTransitionPage<T> get _page => settings as FadeTransitionPage<T>;
@override
Color? get barrierColor => null;
@override
String? get barrierLabel => null;
@override
Duration get transitionDuration => _page.duration;
@override
Duration get reverseTransitionDuration => _page.duration;
@override
bool get maintainState => true;
@override
Widget buildPage(
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
) {
return _page.child;
}
@override
Widget buildTransitions(
BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child,
) {
final tween = CurveTween(curve: Curves.easeInOut);
return FadeTransition(
opacity: animation.drive(tween),
child: _page.child,
);
}
}