1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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: imageCacheManager,
- 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),
- );
- }
- }
- // UI Components
- 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,
- ),
- ),
- );
- }
- }
|