MotionLoader.fromJson constructor

MotionLoader.fromJson(
  1. Map<String, dynamic> json
)

Configuration-based factory builder from a JSON map.

Implementation

factory MotionLoader.fromJson(Map<String, dynamic> json) {
  final String category = json['category'] ?? 'default';
  final String styleStr = json['style'] ?? '';
  final Color? color = json['color'] != null
      ? Color(int.parse(json['color'].toString()))
      : null;
  final double size = (json['size'] ?? 50.0).toDouble();
  final bool glow = json['glow'] ?? true;

  switch (category) {
    case 'ai':
      final style = MotionAiStyle.values.firstWhere((e) => e.name == styleStr,
          orElse: () => MotionAiStyle.neuralNetwork);
      return MotionLoader.ai(
          style: style, color: color, size: size, glow: glow);
    case 'liquid':
      final style = MotionLiquidStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionLiquidStyle.lavaLamp);
      return MotionLoader.liquid(style: style, color: color, size: size);
    case 'glass':
      final style = MotionGlassStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionGlassStyle.glassOrb);
      return MotionLoader.glass(
          style: style, color: color, size: size, glow: glow);
    case 'space':
      final style = MotionSpaceStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionSpaceStyle.blackHole);
      return MotionLoader.space(
          style: style, color: color, size: size, glow: glow);
    case 'gaming':
      final style = MotionGamingStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionGamingStyle.xpProgress);
      return MotionLoader.gaming(
          style: style, color: color, size: size, glow: glow);
    case 'physics':
      final style = MotionPhysicsStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionPhysicsStyle.pendulum);
      return MotionLoader.physics(
          style: style, color: color, size: size, glow: glow);
    case 'minimal':
      final style = MotionMinimalStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionMinimalStyle.lineDraw);
      return MotionLoader.minimal(style: style, color: color, size: size);
    case 'saas':
      final style = MotionSaasStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionSaasStyle.pulseGrid);
      return MotionLoader.saas(
          style: style, color: color, size: size, glow: glow);
    case 'cyberpunk':
      final style = MotionCyberpunkStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionCyberpunkStyle.terminalBoot);
      return MotionLoader.cyberpunk(style: style, color: color, size: size);
    case 'nature':
      final style = MotionNatureStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionNatureStyle.firefly);
      return MotionLoader.nature(style: style, color: color, size: size);
    case 'luxury':
      final style = MotionLuxuryStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionLuxuryStyle.diamondSpark);
      return MotionLoader.luxury(style: style, color: color, size: size);
    case 'geometry':
      final style = MotionGeometryStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionGeometryStyle.infiniteCube);
      return MotionLoader.geometry(style: style, color: color, size: size);
    case 'social':
      final style = MotionSocialStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionSocialStyle.reelsUpload);
      return MotionLoader.social(
          style: style, color: color, size: size, glow: glow);
    case 'threeD':
      final style = MotionThreeDStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionThreeDStyle.floatingCube);
      return MotionLoader.threeD(style: style, color: color, size: size);
    case 'audio':
      final style = MotionAudioStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionAudioStyle.equalizer);
      return MotionLoader.audio(style: style, color: color, size: size);
    case 'artistic':
      final style = MotionArtisticStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionArtisticStyle.zenCircle);
      return MotionLoader.artistic(style: style, color: color, size: size);
    case 'experimental':
      final style = MotionExperimentalStyle.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionExperimentalStyle.timeWarp);
      return MotionLoader.experimental(
          style: style, color: color, size: size);
    default:
      final type = MotionLoaderType.values.firstWhere(
          (e) => e.name == styleStr,
          orElse: () => MotionLoaderType.ai);
      return MotionLoader(type: type, color: color, size: size);
  }
}