Files
Bahla-Front/lib/ui/views/home/home_view.dart
2025-06-27 09:04:37 +02:00

133 lines
5.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:intl/intl.dart';
import 'home_viewmodel.dart';
class HomeView extends StackedView<HomeViewModel> {
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();
}