diff --git a/ios/Classes/Boost/FlutterBoostPlugin.m b/ios/Classes/Boost/FlutterBoostPlugin.m
index ff8441cfa0d6134e2b05a79f81199d6af809ee76..67760b5a9ebf88230f1a19d57b2fdb9c9ef8b393 100755
--- a/ios/Classes/Boost/FlutterBoostPlugin.m
+++ b/ios/Classes/Boost/FlutterBoostPlugin.m
@@ -94,7 +94,11 @@
         pageInfo[@"params"] = [FlutterBoostPlugin sharedInstance].fParams;
         pageInfo[@"uniqueId"] = [FlutterBoostPlugin sharedInstance].fPageId;
         if(result) result(pageInfo);
-    }else{
+    } if([@"disablePopGesture" isEqualToString:call.method]) {
+        [FlutterBoostPlugin sharedInstance].application.flutterViewController.navigationController.interactivePopGestureRecognizer.enabled = NO;
+    } if([@"enablePopGesture" isEqualToString:call.method]){
+        [FlutterBoostPlugin sharedInstance].application.flutterViewController.navigationController.interactivePopGestureRecognizer.enabled = YES;
+    } else{
         result(FlutterMethodNotImplemented);
     }
 }
diff --git a/lib/container/boost_container.dart b/lib/container/boost_container.dart
index d28a0c6558a47699c39c1bed2e56bcda5d6f94a6..dd006347aaa80455f408766b82f3986e9653f8f0 100755
--- a/lib/container/boost_container.dart
+++ b/lib/container/boost_container.dart
@@ -21,6 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+import 'dart:io';
+
 import 'package:flutter/material.dart';
 import 'container_manager.dart';
 import '../flutter_boost.dart';
@@ -201,6 +203,11 @@ class BoostContainerState extends NavigatorState {
 
     if (canPop()) {
          super.pop<T>(result);
+         if (Platform.isIOS && multipleRouteMode && !canPop()) {
+           FlutterBoost.singleton.channel
+               .invokeMethod<dynamic>('enablePopGesture', null);
+           //开启native返回手势
+         }
     } else {
       if (T is Map<String, dynamic>) {
         FlutterBoost.singleton
@@ -229,6 +236,11 @@ class BoostContainerState extends NavigatorState {
           .postPushRoute(name, uniqueId, params, newRoute ?? route, future);
     }
 
+    if (Platform.isIOS && multipleRouteMode && canPop()) {
+      FlutterBoost.singleton.channel
+          .invokeMethod<dynamic>('disablePopGesture', null);
+    }
+
     return future;
   }
 
diff --git a/lib/container/container_coordinator.dart b/lib/container/container_coordinator.dart
index 9d70dfa8846a5deef15e7f30f1cb5fa8058c17ac..4bd55d40d1f0a39704aa9370aae13ee07f3fd7f3 100755
--- a/lib/container/container_coordinator.dart
+++ b/lib/container/container_coordinator.dart
@@ -32,6 +32,17 @@ import 'boost_container.dart';
 import '../flutter_boost.dart';
 import '../support/logger.dart';
 
+class BoostRouteSettings {
+  final String uniqueId;
+  final String name;
+  final Map params;
+
+  const BoostRouteSettings({this.uniqueId, this.name, this.params});
+}
+
+typedef BoostRouteSettings BoostRouteSettingsBuilder(String url,
+    {Map<String, dynamic> urlParams, Map<String, dynamic> exts});
+
 class ContainerCoordinator {
   static ContainerCoordinator get singleton => _instance;
 
@@ -40,6 +51,7 @@ class ContainerCoordinator {
   final Map<String, PageBuilder> _pageBuilders = <String, PageBuilder>{};
   PageBuilder _defaultPageBuilder;
 
+  BoostRouteSettingsBuilder _routeSettingsBuilder;
 
   ContainerCoordinator(BoostChannel channel) {
     assert(_instance == null);
@@ -94,6 +106,22 @@ class ContainerCoordinator {
     return page;
   }
 
+  BoostRouteSettings createRouteSettings(String url,
+      {Map<String, dynamic> urlParams, Map<String, dynamic> exts}) {
+    if (_routeSettingsBuilder != null) {
+      return _routeSettingsBuilder(url, urlParams:urlParams,exts:exts);
+    }
+
+    return BoostRouteSettings(
+        uniqueId: '${url}_${DateTime.now().millisecondsSinceEpoch}',
+        name: url,
+        params: urlParams);
+  }
+
+  void registerRouteSettingsBuilder(BoostRouteSettingsBuilder builder) {
+    _routeSettingsBuilder = builder;
+  }
+
   //Register a default page builder.
   void registerDefaultPageBuilder(PageBuilder builder) {
     _defaultPageBuilder = builder;
diff --git a/lib/flutter_boost.dart b/lib/flutter_boost.dart
index 7627fd81fae1de1b431a0174063cbf88049ce46a..357bb7beeeb4331827a45f71c8f352d2a0b602ce 100755
--- a/lib/flutter_boost.dart
+++ b/lib/flutter_boost.dart
@@ -28,6 +28,7 @@ import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
 import 'container/boost_container.dart';
 import 'container/container_coordinator.dart';
+import 'container/container_coordinator.dart';
 import 'container/container_manager.dart';
 
 import 'channel/boost_channel.dart';
@@ -37,6 +38,7 @@ import 'observers_holders.dart';
 export 'container/boost_container.dart';
 export 'container/container_manager.dart';
 export 'flutter_boost_api.dart';
+export 'container/container_coordinator.dart' show BoostRouteSettings;
 
 typedef Widget PageBuilder(String pageName, Map params, String uniqueId);
 
@@ -48,6 +50,9 @@ typedef void PostPushRoute(String url, String uniqueId, Map params, Route route,
 
 typedef Route FlutterBoostRouteBuilder(Widget widget);
 
+
+
+
 class FlutterBoost {
   static final FlutterBoost _instance = FlutterBoost();
   final GlobalKey<ContainerManagerState> containerManagerKey =
@@ -124,6 +129,11 @@ class FlutterBoost {
     ContainerCoordinator.singleton.registerPageBuilders(builders);
   }
 
+  ///Register a route settings builder
+  void registerRouteSettingsBuilder(BoostRouteSettingsBuilder builder) {
+    ContainerCoordinator.singleton.registerRouteSettingsBuilder(builder);
+  }
+
   Future<Map<dynamic, dynamic>> open(String url,
       {Map<String, dynamic> urlParams,
         Map<String, dynamic> exts}) {
@@ -145,14 +155,15 @@ class FlutterBoost {
         Map<String, dynamic> exts,
         FlutterBoostRouteBuilder routeBuilder}) {
 
-//    if(!ContainerCoordinator.singleton.isFlutterPageUrl(url)){
-//      return open(url, urlParams: urlParams, exts: exts);
-//    }
 
-    String  uniqueId='${url}_${DateTime.now().millisecondsSinceEpoch}';
+    final BoostRouteSettings routeSettings = ContainerCoordinator.singleton.createRouteSettings(url,urlParams: urlParams,exts: exts);
 
     final Widget page = ContainerCoordinator.singleton.createPage(
-        url, urlParams, uniqueId);
+        routeSettings.name, routeSettings.params, routeSettings.uniqueId);
+
+    if (page == null ) {
+      return open(url, urlParams: urlParams, exts: exts);
+    }
 
     final Route<Map<dynamic, dynamic>> route = routeBuilder != null
         ? routeBuilder(page)
diff --git a/lib/flutter_boost_api.dart b/lib/flutter_boost_api.dart
index a6998d9cf57209173e2e050c3cd1d34a623e436c..e8ea4f1e9d08cb69f1ceaf25cc84bc796fc1a00c 100644
--- a/lib/flutter_boost_api.dart
+++ b/lib/flutter_boost_api.dart
@@ -7,13 +7,7 @@ import 'flutter_boost.dart';
 
 typedef Route FlutterBoostRouteBuilder(Widget widget);
 
-class BoostRouteSettings {
-  final String uniqueId;
-  final String name;
-  final Map params;
 
-  const BoostRouteSettings({this.uniqueId, this.name, this.params});
-}
 
 typedef BoostRouteSettings BoostRouteSettingsBuilder(String url,
     {Map<String, dynamic> urlParams, Map<String, dynamic> exts});