1import 'package:easy_localization/easy_localization.dart';
2import 'package:fluentui_system_icons/fluentui_system_icons.dart';
3import 'package:flutter_bloc/flutter_bloc.dart';
4import 'package:go_router/go_router.dart';
5import 'package:flutter/material.dart';
7import '../../../../../core/common/enums/collection_status.dart';
9import '../../../../../core/ui/widgets/empty_content.dart';
10import '../../../../../core/ui/widgets/error_widget.dart';
11import '../../../../../core/ui/widgets/loading.dart';
13import '../../../../auth/presentation/bloc/authentication_bloc/authentication_bloc.dart';
14import '../../../../../core/ui/widgets/custom_scaffold.dart';
15import '../../../../../core/ui/widgets/tab_selector.dart';
16import '../../../../../core/ui/theme/color_palette.dart';
17import '../../../../../core/ui/widgets/collection_item/collection_item.dart';
18import 'widgets/stats_section/stats_section.dart';
19import 'views/collections_map_view.dart';
20import '../../../../../core/router/routes.dart';
21import '../../bloc/collections_bloc/collections_bloc.dart';
27 State<TodayScheduleScreen>
createState() => _TodayScheduleScreenState();
30class _TodayScheduleScreenState
extends State<TodayScheduleScreen> {
46 duration: Duration(milliseconds: 500),
47 curve: Curves.easeInOut,
54 final authState = context.read<AuthenticationBloc>().state;
56 if (authState is AuthenticatedState) {
57 context.read<CollectionsBloc>().add(
59 userId: authState.session.uid ?? 0,
74 Widget
build(BuildContext context) {
75 return BlocBuilder<CollectionsBloc, CollectionsState>(
76 buildWhen: (
_, current) => current is
CollectionsLoaded || current is CollectionsError || current is CollectionsLoading,
77 builder: (context, state) {
78 return CustomScaffold(
80 title:
'today_schedule.title'.tr(),
93 icon: Icon(
isMapView ? FluentIcons.list_16_regular : FluentIcons.map_16_regular),
98 body: CustomScrollView(
101 ? NeverScrollableScrollPhysics()
102 : AlwaysScrollableScrollPhysics(),
107 firstTabName:
'today_schedule.todo'.tr(),
108 secondTabName:
'today_schedule.completed'.tr(),
114 if (state is CollectionsLoading)
const SliverFillRemaining(
child: Loading())
116 state.collections.isEmpty ?
const SliverFillRemaining(
117 child: EmptyContent(text:
'No collections for today'),
123 delegate: SliverChildBuilderDelegate(
129 Routes.collectionDetailsScreen.route,
133 child: CollectionItem(
137 number: (index + 1).toString(),
141 childCount: state.collections.length,
144 else if (state is CollectionsError)
146 child: CustomErrorWidget(
override void initState()
class App extends StatefulWidget build(BuildContext context)
sealed class CheckInOutEvent extends Equatable userId
static const antiFlashWhite
const LoadCollectionsEvent({ required this.userId, required this.notForToday, required this.type, })
const CollectionsLoaded({required this.collections})
sealed class CollectionsState extends Equatable collections
void _toggleTab(bool value)
class TodayScheduleScreen extends StatefulWidget scrollController
class SearchWeeklyCollectionsEvent extends WeeklyCollectionsEvent collection