// 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 extends Page { final Widget child; final Duration duration; const FadeTransitionPage({ super.key, required this.child, this.duration = const Duration(milliseconds: 300), super.restorationId, }); @override Route createRoute(BuildContext context) => PageBasedFadeTransitionRoute(this); } class PageBasedFadeTransitionRoute extends PageRoute { PageBasedFadeTransitionRoute(FadeTransitionPage page) : super(settings: page); FadeTransitionPage get _page => settings as FadeTransitionPage; @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 animation, Animation secondaryAnimation, ) { return _page.child; } @override Widget buildTransitions( BuildContext context, Animation animation, Animation secondaryAnimation, Widget child, ) { final tween = CurveTween(curve: Curves.easeInOut); return FadeTransition( opacity: animation.drive(tween), child: _page.child, ); } }