DStack Api使用说明

1.dart侧Api

开放api在DStack类中

/// DStack注册,在app启动时调用
/// builders 页面buliders,observer 生命周期回调
void register(
    {Map<String, DStackWidgetBuilder> builders,
    DLifeCycleObserver observer}) {
  if (builders?.isNotEmpty == true) {
    _pageBuilders.addAll(builders);
  }
  dLifeCycleObserver = observer;
}


/// 获取节点列表
Future<List<DStackNode>> nodeList() {
  return channel.getNodeList();
}


/// routeName 路由名,pageType native或者flutter, params 参数
static Future push(String routeName, PageType pageType,
    {Map params, String storyboard, String identifier}) {
  return DNavigatorManager.push(
      routeName, pageType, params, storyboard, identifier);
}


/// 提供外界直接传builder的能力
static Future pushBuild(String routeName, WidgetBuilder builder,
    {Map params}) {
  return DNavigatorManager.pushBuild(routeName, builder, params);
}


/// 只支持flutter使用,替换flutter页面
static Future replace(String routeName, PageType pageType,
    {Map params, String storyboard, String identifier}) {
  return DNavigatorManager.replace(
      routeName, pageType, params, storyboard, identifier);
}


/// pop可以不传路由信息 result 返回值,可为空
/// 注意
/// 在flutter侧的导航栏调用该函数时,必须是拦截了flutter自带的导航栏返回事件
/// 拦截导航栏点击返回事件的方法,重写AppBar的leading Widget即可
static void pop({Map result}) {
  DNavigatorManager.pop(result);
}


/// ios手势返回
/// 注意事项同pop
static void popWithGesture() {
  DNavigatorManager.popWithGesture();
}


/// routeName 路由名,pageType native或者flutter, result 返回值,可为空
/// 注意事项同pop
static void popTo(String routeName, PageType pageType, {Map result}) {
  DNavigatorManager.popTo(routeName, pageType, result);
}


/// 返回根节点
/// 注意事项同pop
static void popToNativeRoot() {
  DNavigatorManager.popToNativeRoot();
}


/// 跨模块返回, skipName 模块名称,result 返回值,可为空
/// 注意事项同pop
static void popSkip(String skipName, {Map result}) {
  DNavigatorManager.popSkip(skipName, result);
}


/// ios独有,present方式打开页面
/// routerName 路由名 pageType native或者flutter,
/// params 参数,可谓空
static void present(String routeName, PageType pageType,
    {Map params}) {
  DNavigatorManager.present(
      routeName, pageType, params, storyboard, identifier);
}


/// ios独有,dismiss方式关闭页面,result 返回值,可为空
static void dismiss([Map result]) {
  DNavigatorManager.dismiss(result);
}

2.Android侧Api

开放api在DStack类中

/**
 * 初始化DStack
 *
 * @param context      全局上下文对象
 * @param nativeRouter flutter打开native页面的路由回调
*/
public void init(Context context, INativeRouter nativeRouter) {
    ......
}


/**
 * 注册app生命周期监听
 * param context      上下文对象
 */
private void registerAppLifecycleObserver(Context context) {
   ......
}


/**
 * native侧打开flutter页面
 *
 * @param pageRouter   页面路由地址
 * @param params       参数
 * @param containerCls flutter页面容器activity的类对象
 */
public void pushFlutterPage(String pageRouter, Map<String, Object> params, Class<?> containerCls) {
   ......
}


/**
 * native侧关闭flutter页面
 * @param pageRouter   页面路由地址
 * @param params       参数
 */
public void popFlutterPage(String pageRouter, Map<String, Object> params) {
   ......
}


/**
 * native侧返回指定页面
 * @param pageRouter   页面路由地址
 * @param params       参数
 */
public void popTo(String pageRouter, Map<String, Object> params) {
    ......
}


/**
 * 返回根页面
 */
public void popToRoot() {
   ......
}

2.iOS侧Api

开放api在DStack类中

/// 是否开启log打印
/// @param enable enable
- (void)logEnable:(BOOL)enable;


/// push打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route flutter页面的route
- (void)pushFlutterPageWithFlutterClass:(Class)cls
                                  route:(NSString *)route;


/// push打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route  flutter页面的route
/// @param params 传递给flutter页面的参数
- (void)pushFlutterPageWithFlutterClass:(Class)cls
                                  route:(NSString *)route
                                 params:(nullable NSDictionary *)params;


/// push打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route  flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
- (void)pushFlutterPageWithFlutterClass:(Class)cls
                                  route:(NSString *)route
                                 params:(nullable NSDictionary *)params
                               animated:(BOOL)animated;


/// push打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route  flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param callBack 回调出当前的DFlutterViewController
/// @param animated 是否开启转场动画
- (void)pushFlutterPageWithFlutterClass:(Class)cls
                                  route:(NSString *)route
                                 params:(nullable NSDictionary *)params
                     controllerCallBack:(nullable void (^)(DFlutterViewController *))callBack
                               animated:(BOOL)animated;


/// push打开一个flutter页面
/// 当前的FlutterViewController是从storyboard加载时调用
/// @param storyboard storyboardName
/// @param identifier identifier
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
- (void)pushFlutterPageWithStoryboard:(NSString *)storyboard
                           identifier:(NSString *)identifier
                                route:(NSString *)route
                               params:(nullable NSDictionary *)params
                             animated:(BOOL)animated;


/// push打开一个flutter页面
/// 当前的FlutterViewController是从storyboard加载时调用
/// @param storyboard storyboardName
/// @param identifier identifier
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param callBack 回调出当前的DFlutterViewController
/// @param animated 是否开启转场动画
- (void)pushFlutterPageWithStoryboard:(NSString *)storyboard
                           identifier:(NSString *)identifier
                                route:(NSString *)route
                               params:(nullable NSDictionary *)params
                   controllerCallBack:(nullable void (^)(DFlutterViewController *))callBack
                             animated:(BOOL)animated;


/// present打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route  flutter页面的route
/// @param from 起点controller
- (void)presentFlutterPageWithFlutterClass:(Class)cls
                                     route:(NSString *)route
                                      from:(UIViewController *)from;


/// present打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param from 起点controller
- (void)presentFlutterPageWithFlutterClass:(Class)cls
                                     route:(NSString *)route
                                    params:(nullable NSDictionary *)params
                                      from:(UIViewController *)from;


/// present打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
/// @param from 起点controller
/// @param root cls对应的controller所属的rootViewController
/// root有两种情况:root:UINavigationController、UITabBarController
- (void)presentFlutterPageWithFlutterClass:(Class)cls
                                     route:(NSString *)route
                                    params:(nullable NSDictionary *)params
                                  animated:(BOOL)animated
                                      from:(UIViewController *)from
                            rootController:(nullable Class)root;


/// present打开一个flutter页面
/// @param cls 当前DFlutterViewController的class或它的子类
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
/// @param from 起点controller
/// @param callBack 回调出当前的DFlutterViewController
/// @param root cls对应的controller所属的rootViewController
/// root有两种情况:root:UINavigationController、UITabBarController
- (void)presentFlutterPageWithFlutterClass:(Class)cls
                                     route:(NSString *)route
                                    params:(nullable NSDictionary *)params
                                  animated:(BOOL)animated
                                      from:(UIViewController *)from
                        controllerCallBack:(nullable void (^)(DFlutterViewController *))callBack
                            rootController:(nullable Class)root;


/// present打开一个flutter页面
/// 当前的FlutterViewController是从storyboard加载时调用
/// @param storyboard storyboardName
/// @param identifier identifier
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
/// @param from 起点controller
/// @param root cls对应的controller所属的rootViewController
/// root有两种情况:root:UINavigationController、UITabBarController
- (void)presentFlutterPageWithStoryboard:(NSString *)storyboard
                              identifier:(NSString *)identifier
                                   route:(NSString *)route
                                  params:(nullable NSDictionary *)params
                                animated:(BOOL)animated
                                    from:(UIViewController *)from
                          rootController:(nullable Class)root;


/// present打开一个flutter页面
/// 当前的FlutterViewController是从storyboard加载时调用
/// @param storyboard storyboardName
/// @param identifier identifier
/// @param route flutter页面的route
/// @param params 传递给flutter页面的参数
/// @param animated 是否开启转场动画
/// @param from 起点controller
/// @param callBack 回调出当前的DFlutterViewController
/// @param root cls对应的controller所属的rootViewController
/// root有两种情况:root:UINavigationController、UITabBarController
- (void)presentFlutterPageWithStoryboard:(NSString *)storyboard
                              identifier:(NSString *)identifier
                                   route:(NSString *)route
                                  params:(nullable NSDictionary *)params
                                animated:(BOOL)animated
                                    from:(UIViewController *)from
                      controllerCallBack:(nullable void (^)(DFlutterViewController *))callBack
                          rootController:(nullable Class)root;


/// 返回到指定的Flutter page
/// 方法调用时机:如果需要popTo的页面是Flutter页面时,必须调用该方法实现
/// 如果popTo的页面是Native页面,则使用navigationController的  popToViewController:animated:
/// @param route page的路由
/// @param animated 返回动画
- (void)popToPageWithFlutterRoute:(NSString *)route
                         animated:(BOOL)animated;
- (void)popToPageWithFlutterRoute:(NSString *)route
                           params:(nullable NSDictionary *)params
                         animated:(BOOL)animated;