Files
neomovies-mobile/lib/presentation/widgets/movie_card.dart
2025-07-13 14:01:29 +03:00

61 lines
1.9 KiB
Dart

import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:neomovies_mobile/data/models/movie.dart';
import 'package:neomovies_mobile/presentation/providers/movie_detail_provider.dart';
import 'package:neomovies_mobile/presentation/screens/movie_detail/movie_detail_screen.dart';
import 'package:provider/provider.dart';
class MovieCard extends StatelessWidget {
final Movie movie;
const MovieCard({super.key, required this.movie});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(left: 16.0),
child: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => MovieDetailScreen(movieId: movie.id, mediaType: movie.mediaType),
),
);
},
child: SizedBox(
width: 150,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Card(
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: CachedNetworkImage(
imageUrl: movie.fullPosterUrl,
width: 150,
height: 225,
fit: BoxFit.cover,
placeholder: (context, url) => const Center(child: CircularProgressIndicator()),
errorWidget: (context, url, error) => const Icon(Icons.error),
),
),
const SizedBox(height: 8),
Expanded(
child: Text(
movie.title,
style: Theme.of(context).textTheme.bodyMedium,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
),
],
),
),
),
);
}
}