diff --git a/packages/flutter/lib/src/widgets/drawer.dart b/packages/flutter/lib/src/widgets/drawer.dart index 945542c5dd..1d73b9fc84 100644 --- a/packages/flutter/lib/src/widgets/drawer.dart +++ b/packages/flutter/lib/src/widgets/drawer.dart @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:async'; - import 'package:sky/animation.dart'; import 'package:sky/material.dart'; import 'package:sky/src/widgets/animated_container.dart'; @@ -11,7 +9,6 @@ import 'package:sky/src/widgets/framework.dart'; import 'package:sky/src/widgets/basic.dart'; import 'package:sky/src/widgets/gesture_detector.dart'; import 'package:sky/src/widgets/navigator.dart'; -import 'package:sky/src/widgets/scrollable.dart'; import 'package:sky/src/widgets/theme.dart'; import 'package:sky/src/widgets/transitions.dart'; import 'package:sky/src/widgets/focus.dart'; diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart index 7df0d8fe0a..212b37f1a1 100644 --- a/packages/flutter/lib/src/widgets/navigator.dart +++ b/packages/flutter/lib/src/widgets/navigator.dart @@ -129,8 +129,13 @@ class NavigatorState extends State { direction: (i <= _currentPosition) ? AnimationDirection.forward : AnimationDirection.reverse ); route._onDismissed = () { + assert(_history.contains(route)); + if (_history.lastIndexOf(route) <= _currentPosition) + popRoute(route); + }; + route._onRemoveRoute = () { + assert(_history.contains(route)); setState(() { - assert(_history.contains(route)); _history.remove(route); }); }; @@ -162,14 +167,19 @@ abstract class Route { PerformanceView get performance => _performance?.view; Performance _performance; NotificationCallback _onDismissed; + NotificationCallback _onRemoveRoute; Performance createPerformance() { Duration duration = transitionDuration; if (duration > Duration.ZERO) { return new Performance(duration: duration) ..addStatusListener((PerformanceStatus status) { - if (status == PerformanceStatus.dismissed && _onDismissed != null) - _onDismissed(); + if (status == PerformanceStatus.dismissed) { + if (_onDismissed != null) + _onDismissed(); + if (_onRemoveRoute != null) + _onRemoveRoute(); + } }); } return null; @@ -245,8 +255,8 @@ abstract class Route { Widget build(NavigatorState navigator, PerformanceView nextRoutePerformance); void didPop([dynamic result]) { - if (performance == null && _onDismissed != null) - _onDismissed(); + if (performance == null && _onRemoveRoute != null) + _onRemoveRoute(); } String toString() => '$runtimeType()';