Commit cd19702c authored by Hixie's avatar Hixie

Be more discerning with forward transitions

So you don't fade out when going to a popup menu, for example.
parent 93b1f100
......@@ -5,8 +5,6 @@
import 'package:flutter/animation.dart';
import 'package:flutter/widgets.dart';
import 'colors.dart';
class _MaterialPageTransition extends TransitionWithChild {
_MaterialPageTransition({
Key key,
......@@ -52,7 +50,8 @@ class MaterialPageRoute<T> extends PageRoute<T> {
final WidgetBuilder builder;
Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
Color get barrierColor => Colors.black54;
Color get barrierColor => null;
bool canTransitionFrom(TransitionRoute nextRoute) => false;
Widget buildPage(BuildContext context) {
Widget result = builder(context);
......
......@@ -150,7 +150,7 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
final ProxyPerformance forwardPerformance = new ProxyPerformance();
void didPushNext(Route nextRoute) {
if (nextRoute is TransitionRoute) {
if (nextRoute is TransitionRoute && canTransitionTo(nextRoute) && nextRoute.canTransitionFrom(this)) {
PerformanceView current = forwardPerformance.masterPerformance;
if (current != null) {
if (current is TrainHoppingPerformance) {
......@@ -177,6 +177,9 @@ abstract class TransitionRoute<T> extends OverlayRoute<T> {
super.didPushNext(nextRoute);
}
bool canTransitionTo(TransitionRoute nextRoute) => true;
bool canTransitionFrom(TransitionRoute nextRoute) => true;
Widget wrapTransition(BuildContext context, Widget child) {
return buildForwardTransition(
context,
......@@ -434,4 +437,6 @@ abstract class PageRoute<T> extends ModalRoute<T> {
}) : super(completer: completer, settings: settings);
bool get opaque => true;
bool get barrierDismissable => false;
bool canTransitionTo(TransitionRoute nextRoute) => nextRoute is PageRoute;
bool canTransitionFrom(TransitionRoute nextRoute) => nextRoute is PageRoute;
}
......@@ -27,6 +27,14 @@ class TestTransition extends TransitionComponent {
}
}
class TestRoute<T> extends PageRoute<T> {
TestRoute(this.child);
final Widget child;
Duration get transitionDuration => kMaterialPageRouteTransitionDuration;
Color get barrierColor => null;
Widget buildPage(BuildContext context) => child;
}
void main() {
final Duration kTwoTenthsOfTheTransitionDuration = kMaterialPageRouteTransitionDuration * 0.2;
final Duration kFourTenthsOfTheTransitionDuration = kMaterialPageRouteTransitionDuration * 0.4;
......@@ -57,9 +65,11 @@ void main() {
tester.pumpWidget(
new MaterialApp(
routes: <String, RouteBuilder>{
'/': (RouteArguments args) {
return new Builder(
onGenerateRoute: (NamedRouteSettings settings) {
switch (settings.name) {
case '/':
return new TestRoute(
new Builder(
key: insideKey,
builder: (BuildContext context) {
PageRoute route = ModalRoute.of(context);
......@@ -76,11 +86,12 @@ void main() {
),
]);
}
)
);
},
'/2': (RouteArguments args) => new Text('E'),
'/3': (RouteArguments args) => new Text('F'),
'/4': (RouteArguments args) => new Text('G'),
case '/2': return new TestRoute(new Text('E'));
case '/3': return new TestRoute(new Text('F'));
case '/4': return new TestRoute(new Text('G'));
}
}
)
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment