import 'package:flutter/material.dart'; import '../../home_page.dart'; // CaseStudyPlan 모델을 import 합니다. class UpcomingClassCard extends StatelessWidget { final CaseStudyPlan plan; final VoidCallback onTap; const UpcomingClassCard({ super.key, required this.plan, required this.onTap, }); @override Widget build(BuildContext context) { return SizedBox( width: 300, // 각 항목의 너비를 지정합니다. child: InkWell( onTap: onTap, child: Card( margin: const EdgeInsets.only(right: 12.0), // 항목 간의 간격 조정 elevation: 2.0, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)), child: Padding( padding: const EdgeInsets.all(12.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Text( plan.planTitle, style: Theme.of(context).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.bold), overflow: TextOverflow.ellipsis, maxLines: 2, ), ), const SizedBox(width: 8.0), Text( // plan.planTeacher, "", style: Theme.of(context).textTheme.bodySmall?.copyWith(color: Colors.grey[600]), ), ], ), const SizedBox(height: 8.0), if (plan.thumbnail.isNotEmpty) Expanded( child: ClipRRect( borderRadius: BorderRadius.circular(8.0), child: Image.network( plan.thumbnail, width: double.infinity, fit: BoxFit.cover, loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent? loadingProgress) { if (loadingProgress == null) return child; return Center( child: CircularProgressIndicator( value: loadingProgress.expectedTotalBytes != null ? loadingProgress.cumulativeBytesLoaded / loadingProgress.expectedTotalBytes! : null, ), ); }, errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) { return const Center(child: Icon(Icons.broken_image, color: Colors.grey, size: 50)); }, ), ), ) else Expanded( child: Container( color: Colors.grey[200], child: const Center(child: Text('No Image', style: TextStyle(color: Colors.grey))) ), ), ], ), ), ), ), ); } }