import 'package:comwell_key_app/overview/components/current_booking_list_item_view.dart';
import 'package:comwell_key_app/overview/components/find_booking_button.dart';
import 'package:comwell_key_app/overview/components/room_selection_widget.dart';
import 'package:comwell_key_app/overview/cubit/overview_cubit.dart';
import 'package:comwell_key_app/overview/cubit/overview_state.dart';
import 'package:comwell_key_app/overview/models/booking.dart';
import 'package:comwell_key_app/themes/light_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:comwell_key_app/common/components/shimmer_loader/overview_shimmer_loader.dart';
class CurrentBookingsTabView extends StatelessWidget {
final Iterable<Booking> bookings;
final String bookingsTitle;
final String bookingsSubtitle;
final String bookingsImage;
const CurrentBookingsTabView({
required this.bookings,
required this.bookingsTitle,
required this.bookingsSubtitle,
required this.bookingsImage,
super.key,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final cubit = context.read<OverviewCubit>();
return BlocBuilder<OverviewCubit, OverviewState>(
builder: (context, state) {
if (state.isLoading) {
return ListView(
children: const [
SizedBox(height: 20),
OverviewShimmerLoader(),
SizedBox(height: 20),
OverviewShimmerLoader(),
SizedBox(height: 20),
OverviewShimmerLoader(),
],
);
}
return RefreshIndicator(
backgroundColor: sandColor[80],
color: sandColor[10],
onRefresh: () async {
await cubit.fetchBookings();
},
child: Builder(
builder: (context) {
if (bookings.isEmpty) {
return ListView(
children: [
const SizedBox(
height: 20,
),
Container(
height: 276,
decoration: BoxDecoration(
image: const DecorationImage(
image: AssetImage(
"assets/images/no_current_bookings_background.jpeg"),
fit: BoxFit.cover,
),
borderRadius: BorderRadius.circular(10),
border: Border.all(color: Colors.transparent)),
margin: const EdgeInsets.symmetric(horizontal: 8),
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
bookingsTitle,
textAlign: TextAlign.start,
style: theme.textTheme.headlineMedium?.copyWith(
color: Colors.white,
),
),
const SizedBox(height: 6),
Text(
textAlign: TextAlign.start,
bookingsSubtitle,
style: theme.textTheme.bodySmall?.copyWith(
color: Colors.grey.shade500,
),
),
],
),
),
),
],
);
} else {
return ListView.builder(
shrinkWrap: true,
itemCount: bookings.length,
itemBuilder: (context, index) {
final booking = bookings.elementAt(index);
final isLastItem = index == bookings.length - 1;
return Column(
children: [
CurrentBookingListItem(booking: booking),
RoomSelectionWidget(booking: booking),
...(isLastItem ? [
const FindBookingButton(),
] : []),
],
);
},
);
}
},
),
);
},
);
}
}