import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import '../providers/server_provider.dart'; import '../widgets/more_tabs_button.dart'; import '../widgets/profile_avatar_button.dart'; import '../widgets/synced_header_scaffold.dart'; class ActivityView extends StatelessWidget { final ScrollController scrollController; const ActivityView({super.key, required this.scrollController}); @override Widget build(BuildContext context) { final theme = Theme.of(context); final colorScheme = theme.colorScheme; final provider = context.watch(); final activities = provider.activities; final List contentSlivers = [ const SliverToBoxAdapter(child: SizedBox(height: 16)), if (provider.isLoading && activities.isEmpty) const SliverFillRemaining( hasScrollBody: false, child: Center(child: CircularProgressIndicator()), ) else if (activities.isEmpty) SliverFillRemaining( hasScrollBody: false, child: Center( child: Text( 'No recent activity', style: theme.textTheme.titleMedium?.copyWith( color: colorScheme.onSurfaceVariant, ), ), ), ) else SliverPadding( padding: const EdgeInsets.symmetric(horizontal: 20), sliver: SliverList( delegate: SliverChildBuilderDelegate((context, index) { final act = activities[index]; return Padding( padding: const EdgeInsets.only(bottom: 12), child: Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: colorScheme.surfaceContainerLow, borderRadius: BorderRadius.circular(20), border: Border.all( color: colorScheme.outlineVariant.withValues(alpha: 0.2), ), ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: colorScheme.primaryContainer, shape: BoxShape.circle, ), child: Icon( act.icon, color: colorScheme.onPrimaryContainer, size: 20, ), ), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Text( act.title, style: theme.textTheme.titleMedium ?.copyWith( fontWeight: FontWeight.w600, fontSize: 14, ), ), ), const SizedBox(width: 8), Text( DateFormat.jm().format(act.timestamp), style: theme.textTheme.bodySmall?.copyWith( color: colorScheme.onSurfaceVariant, fontSize: 11, ), ), ], ), const SizedBox(height: 4), Text( act.subject, style: theme.textTheme.bodyMedium?.copyWith( color: colorScheme.onSurfaceVariant, fontSize: 13, ), ), const SizedBox(height: 6), Text( 'By ${act.author} • ${DateFormat.MMMd().format(act.timestamp)}', style: theme.textTheme.bodySmall?.copyWith( color: colorScheme.primary, fontWeight: FontWeight.w500, fontSize: 11, ), ), ], ), ), ], ), ), ); }, childCount: activities.length), ), ), const SliverToBoxAdapter(child: SizedBox(height: 100)), const SliverFillRemaining(hasScrollBody: false, child: SizedBox()), ]; return SyncedHeaderScaffold( scrollController: scrollController, provider: provider, actions: const [MoreTabsButton(), ProfileAvatarButton()], contentSlivers: contentSlivers, ); } }