import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:veloe_kemono_party_flutter/main.dart'; import 'package:veloe_kemono_party_flutter/models/creator.dart'; import 'package:veloe_kemono_party_flutter/pages/posts_screen.dart'; class ResizedImage extends StatelessWidget { final String imageUrl; final BoxFit fit; const ResizedImage({super.key, required this.imageUrl, this.fit = BoxFit.cover}); @override Widget build(BuildContext context) { final screenSize = MediaQuery.of(context).size; return CachedNetworkImage( cacheManager: iconsCacheManager, imageUrl: imageUrl, imageBuilder: (context, imageProvider) => Image( image: ResizeImage( imageProvider, width: screenSize.width.toInt(), ), fit: fit, ), placeholder: (context, url) => const CircularProgressIndicator(), errorWidget: (context, url, error) => const Icon(Icons.error), ); } } class CreatorCard extends ConsumerWidget { final Creator creator; const CreatorCard({super.key, required this.creator}); @override Widget build(BuildContext context, WidgetRef ref) { return Card( child: ListTile( leading: Hero( tag: 'creator-${creator.id}', child: CircleAvatar( backgroundColor: Colors.grey[200], child: ResizedImage( imageUrl: creator.iconUrl, fit: BoxFit.contain, ), ), ), title: Text(creator.name), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(creator.service.toUpperCase()), Text('Last updated: ${_formatDate(creator.updated)}'), ], ), onTap: () => _showCreatorPosts(context, ref), ), ); } String _formatDate(int timestamp) { return DateTime.fromMillisecondsSinceEpoch((timestamp * 1000).toInt()).toString(); } void _showCreatorPosts(BuildContext context, WidgetRef ref) { ref.read(selectedCreatorProvider.notifier).state = creator; Navigator.push( context, MaterialPageRoute( builder: (context) => PostsScreen( creatorId: creator.id, service: creator.service, ), ), ); } }