generate method

Route? generate(
  1. RouteSettings settings, {
  2. bool? active,
  3. RouteFactory? onGenerate,
})

Implementation

Route? generate(RouteSettings settings,
    {bool? active, RouteFactory? onGenerate}) {
  if (onGenerate != null) {
    this.onGenerate = onGenerate;
  }

  String? path = settings.name;

  if (path == null) {
    return null;
  }

  active ??= Control.isInitialized;

  if (!active) {
    ControlScope.root.setup?.args.set(settings);
    return null;
  }

  final args = ControlArgs.of(settings.arguments);

  final controlRoute = parent.getRoute(path);

  if (controlRoute != null) {
    final mask = RouteMask.of(controlRoute._mask ?? controlRoute.identifier);
    final params = mask.params(RouteMask.of(path));

    args.add(value: controlRoute);
    args.add(value: mask);
    params.forEach((key, value) => args.add(key: key, value: value));
  }

  if (this.onGenerate == null) {
    return controlRoute
        ?._copyWith(
          identifier: path,
          arguments: args.data,
        )
        .init(args: args.data);
  }

  return this.onGenerate?.call(RouteSettings(
        name: path,
        arguments: args.data,
      ));
}