Commit 1ff3a359 authored by Ian Hickson's avatar Ian Hickson

Merge pull request #712 from Hixie/yak2-discriminating-transitions

Be more discerning with forward transitions
parents 15a13b89 cd19702c
......@@ -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,
......@@ -437,4 +440,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,30 +65,33 @@ void main() {
tester.pumpWidget(
new MaterialApp(
routes: <String, RouteBuilder>{
'/': (RouteArguments args) {
return new Builder(
key: insideKey,
builder: (BuildContext context) {
PageRoute route = ModalRoute.of(context);
return new Column([
new TestTransition(
childFirstHalf: new Text('A'),
childSecondHalf: new Text('B'),
performance: route.performance
),
new TestTransition(
childFirstHalf: new Text('C'),
childSecondHalf: new Text('D'),
performance: route.forwardPerformance
),
]);
}
);
},
'/2': (RouteArguments args) => new Text('E'),
'/3': (RouteArguments args) => new Text('F'),
'/4': (RouteArguments args) => new Text('G'),
onGenerateRoute: (NamedRouteSettings settings) {
switch (settings.name) {
case '/':
return new TestRoute(
new Builder(
key: insideKey,
builder: (BuildContext context) {
PageRoute route = ModalRoute.of(context);
return new Column([
new TestTransition(
childFirstHalf: new Text('A'),
childSecondHalf: new Text('B'),
performance: route.performance
),
new TestTransition(
childFirstHalf: new Text('C'),
childSecondHalf: new Text('D'),
performance: route.forwardPerformance
),
]);
}
)
);
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