MotionLoader.fromJson constructor
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);
}
}