import 'package:flutter/material.dart'; class LoadingIndicator extends StatelessWidget { final String? message; final bool showAnimation; const LoadingIndicator({ super.key, this.message, this.showAnimation = false, }); @override Widget build(BuildContext context) { final theme = Theme.of(context); return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ if (showAnimation) ...[ // Optional: Lottie Animation für Loading SizedBox( width: 120, height: 120, child: CircularProgressIndicator( strokeWidth: 3, valueColor: AlwaysStoppedAnimation( theme.colorScheme.primary, ), ), ), ] else ...[ SizedBox( width: 48, height: 48, child: CircularProgressIndicator( strokeWidth: 3, valueColor: AlwaysStoppedAnimation( theme.colorScheme.primary, ), ), ), ], if (message != null) ...[ const SizedBox(height: 24), Text( message!, style: theme.textTheme.bodyMedium?.copyWith( color: theme.colorScheme.onSurface.withValues(alpha: 179), ), textAlign: TextAlign.center, ), ], ], ), ); } } class SkeletonLoading extends StatelessWidget { final int itemCount; final EdgeInsets padding; const SkeletonLoading({ super.key, this.itemCount = 5, this.padding = const EdgeInsets.symmetric(horizontal: 16, vertical: 8), }); @override Widget build(BuildContext context) { return ListView.builder( padding: padding, itemCount: itemCount, itemBuilder: (context, index) { return Padding( padding: const EdgeInsets.only(bottom: 12), child: _SkeletonCard(), ); }, ); } } class _SkeletonCard extends StatelessWidget { @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.grey.shade200, borderRadius: BorderRadius.circular(16), ), child: Row( children: [ Container( width: 56, height: 56, decoration: BoxDecoration( color: Colors.grey.shade300, borderRadius: BorderRadius.circular(14), ), ), const SizedBox(width: 16), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: double.infinity, height: 16, decoration: BoxDecoration( color: Colors.grey.shade300, borderRadius: BorderRadius.circular(4), ), ), const SizedBox(height: 8), Container( width: 120, height: 12, decoration: BoxDecoration( color: Colors.grey.shade300, borderRadius: BorderRadius.circular(4), ), ), ], ), ), ], ), ); } }