getDrawerInstance static method

RouterProxy getDrawerInstance({
  1. required String stackId,
  2. Map? pageMap,
  3. DrawerConfig? drawerConfig,
})

获取抽屉路由实例(多实例)

用于管理抽屉内的路由栈,支持多个独立的抽屉路由栈

参数:

示例:

final drawerRouter = RouterProxy.getDrawerInstance(
  stackId: 'main-drawer',
  pageMap: {'/': DrawerHomePage()},
  drawerConfig: DrawerConfig(
    autoOpen: true,
    autoClose: true,
    isEndDrawer: true,
  ),
);

Scaffold(
  endDrawer: Container(
    width: 300,
    child: drawerRouter.build(context),
  ),
);

// 绑定 Scaffold 的 context(重要!)
drawerRouter.bindDrawerContext(context);

// 使用
drawerRouter.push(page: SettingsPage());

Implementation

static RouterProxy getDrawerInstance({
  required String stackId,
  Map? pageMap,
  DrawerConfig? drawerConfig,
}) {
  if (!_drawerInstances.containsKey(stackId)) {
    _drawerInstances[stackId] = RouterProxy._(
      stackId: stackId,
      isMainStack: false,
      isDrawerStack: true,
      pageMap: pageMap,
      drawerConfig: drawerConfig ?? const DrawerConfig(),
    );
  } else {
    // 如果实例已存在,更新 pageMap 和 drawerConfig
    final instance = _drawerInstances[stackId]!;
    if (pageMap != null) {
      instance.pageMap = pageMap;
    }
    if (drawerConfig != null) {
      instance._drawerConfig = drawerConfig;
    }
  }
  return _drawerInstances[stackId]!;
}