是的,肯定!一种解决方案是扩展PageRoute
并使opaque
getter返回false。可能的解决方案如下所示:
import 'package:flutter/widgets.dart';
class TransparentRoute extends PageRoute<void> {
TransparentRoute({
@required this.builder,
RouteSettings settings,
}) : assert(builder != null),
super(settings: settings, fullscreenDialog: false);
final WidgetBuilder builder;
@override
bool get opaque => false;
@override
Color get barrierColor => null;
@override
String get barrierLabel => null;
@override
bool get maintainState => true;
@override
Duration get transitionDuration => Duration(milliseconds: 350);
@override
Widget buildPage(BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
final result = builder(context);
return FadeTransition(
opacity: Tween<double>(begin: 0, end: 1).animate(animation),
child: Semantics(
scopesRoute: true,
explicitChildNodes: true,
child: result,
),
);
}
}
请记住,这还会创建自定义过渡动画,并且其行为与更复杂的MaterialPageRoute
不同(例如,向后滑动手势不适用于iOS上的当前实现)。>>
您可以这样使用它:
Navigator.of(context).push( TransparentRoute(builder: (BuildContext context) => YourSecondPage()) );
有关
PageRoute
和不同实现者的更多信息,请转到https://docs.flutter.io/flutter/widgets/PageRoute-class.html
您也不需要重写任何类,只需使用: