import 'package:flutter/material.dart'; import 'package:stacked/stacked.dart'; import 'package:intl/intl.dart'; import 'home_viewmodel.dart'; class HomeView extends StackedView { const HomeView({Key? key}) : super(key: key); @override Widget builder( BuildContext context, HomeViewModel viewModel, Widget? child, ) { return Scaffold( backgroundColor: Theme.of(context).colorScheme.background, body: ListView.builder( itemCount: viewModel.events.length, itemBuilder: (context, index) { return Container( margin: const EdgeInsets.all(8), decoration: BoxDecoration( color: Theme.of(context).colorScheme.primary, borderRadius: BorderRadius.circular(8), ), child: IntrinsicHeight( child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Flexible( flex: 1, child: AspectRatio( aspectRatio: 1, child: Container( margin: const EdgeInsets.only(right: 16), decoration: BoxDecoration( borderRadius: BorderRadius.only( topLeft: Radius.circular(8), bottomLeft: Radius.circular(8), ), image: DecorationImage( image: AssetImage(viewModel.events[index].picture), fit: BoxFit.cover, ), ), ), ), ), Expanded( flex: 2, child: Container( margin: const EdgeInsets.all(8), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( viewModel.events[index].date != null ? DateFormat.yMMMMd(Localizations.localeOf(context).toString()) .format(viewModel.events[index].date!) : 'No date', style: Theme.of(context).textTheme.titleMedium, ), Text( viewModel.events[index].name, style: Theme.of(context).textTheme.headlineMedium, ), ], ), IconButton( icon: const Icon(Icons.favorite_border), onPressed: () { // Handle more options }, ), ], ), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( viewModel.events[index].organizer, style: Theme.of(context).textTheme.bodyLarge, ), Text( viewModel.events[index].place ?? 'No place', style: Theme.of(context).textTheme.bodyMedium, ), ], ), IconButton( icon: const Icon(Icons.place), onPressed: () { // Handle favorite action }, ), ], ), const SizedBox(height: 8), ], ), ), ), ], ), ), ); }, ), ); } @override HomeViewModel viewModelBuilder( BuildContext context, ) => HomeViewModel(); }