From bbf289180449ba47408e8be3e261fc0d41e9ef80 Mon Sep 17 00:00:00 2001 From: Rafeek-Khoudare Date: Thu, 10 Jul 2025 15:52:38 +0300 Subject: [PATCH] refactor code --- .../widgets/space_step_part_widget.dart | 94 +---------- .../widgets/step_two_details_widget.dart | 148 +----------------- 2 files changed, 9 insertions(+), 233 deletions(-) diff --git a/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/space_step_part_widget.dart b/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/space_step_part_widget.dart index a1296ece..4706d77f 100644 --- a/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/space_step_part_widget.dart +++ b/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/space_step_part_widget.dart @@ -2,11 +2,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/search_unbookable_spaces_widget.dart'; -import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/unbookable_list_widget.dart'; import 'package:syncrow_web/utils/color_manager.dart'; class SpacesStepDetailsWidget extends StatefulWidget { @@ -180,94 +179,3 @@ class _SpacesStepDetailsWidgetState extends State { ); } } - -class UnbookableListWidget extends StatelessWidget { - final PaginatedDataModel nonBookableSpaces; - const UnbookableListWidget({ - super.key, - required this.scrollController, - required this.nonBookableSpaces, - }); - - final ScrollController scrollController; - - @override - Widget build(BuildContext context) { - return Container( - width: 490, - decoration: const BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical( - bottom: Radius.circular(20), - ), - ), - padding: const EdgeInsets.only(top: 10, left: 20, bottom: 5), - child: ListView.separated( - separatorBuilder: (context, index) => const SizedBox( - height: 5, - ), - controller: scrollController, - itemCount: nonBookableSpaces.data.length, - itemBuilder: (context, index) { - if (index < nonBookableSpaces.data.length) { - return CheckBoxSpaceWidget( - nonBookableSpace: nonBookableSpaces.data[index], - ); - } else { - return const Padding( - padding: EdgeInsets.symmetric(vertical: 10), - child: Center(child: CircularProgressIndicator()), - ); - } - }, - ), - ); - } -} - -class CheckBoxSpaceWidget extends StatefulWidget { - final BookableSpacemodel nonBookableSpace; - - const CheckBoxSpaceWidget({ - super.key, - required this.nonBookableSpace, - }); - - @override - State createState() => _CheckBoxSpaceWidgetState(); -} - -class _CheckBoxSpaceWidgetState extends State { - bool isChecked = false; - - @override - Widget build(BuildContext context) { - return Row( - children: [ - Checkbox( - value: isChecked, - onChanged: (value) => setState(() { - isChecked = value ?? false; - if (isChecked) { - context.read().add( - AddToBookableSpaceEvent( - nonBookableSpace: widget.nonBookableSpace, - ), - ); - } else { - context.read().add( - RemoveFromBookableSpaceEvent( - bookableSpace: widget.nonBookableSpace, - ), - ); - } - }), - ), - const SizedBox( - width: 5, - ), - Expanded(child: Text(widget.nonBookableSpace.spaceName)), - ], - ); - } -} diff --git a/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/step_two_details_widget.dart b/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/step_two_details_widget.dart index 4c694b66..365a8b8f 100644 --- a/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/step_two_details_widget.dart +++ b/lib/pages/access_management/manage_bookable_spaces/presentation/widgets/step_two_details_widget.dart @@ -1,12 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/non_bookable_spaces_bloc/non_bookaable_spaces_bloc.dart'; -import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/search_unbookable_spaces_widget.dart'; -import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/time_picker_widget.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/blocs/cubit/toggle_points_switch_cubit.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/booking_period_widget.dart'; +import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/points_part_widget.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/week_checkbox_title_widget.dart'; -import 'package:syncrow_web/utils/color_manager.dart'; -import 'package:syncrow_web/utils/string_utils.dart'; class StepTwoDetailsWidget extends StatelessWidget { final TextEditingController pointsController; @@ -26,145 +23,16 @@ class StepTwoDetailsWidget extends StatelessWidget { const SizedBox( height: 20, ), - Row( - children: [ - TitleAndTimePickerWidget( - title: 'Booking Start Time', - onTimePicked: (timePicked) { - if (timePicked == null) { - return; - } - final nonBookableBloc = context.read(); - - if (nonBookableBloc.endTime != null && - isEndTimeAfterStartTime( - timePicked, nonBookableBloc.endTime!)) { - ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: - Text("You can't choose start Time Before End time"), - duration: Duration(seconds: 2), - backgroundColor: ColorsManager.red, - )); - throw Exception(); - } else { - nonBookableBloc.selectedBookableSpaces.forEach( - (e) => e.spaceConfig!.bookingStartTime = timePicked, - ); - } - }, - ), - const SizedBox( - width: 20, - ), - TitleAndTimePickerWidget( - title: 'Booking End Time', - onTimePicked: (timePicked) { - if (timePicked == null) { - return; - } - final nonBookableBloc = context.read(); - if (nonBookableBloc.startTime != null && - isEndTimeAfterStartTime( - nonBookableBloc.startTime!, timePicked)) { - ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: - Text("You can't choose End Time After Start time"), - duration: Duration(seconds: 2), - backgroundColor: ColorsManager.red, - )); - throw Exception(); - } else { - nonBookableBloc.selectedBookableSpaces.forEach( - (e) => e.spaceConfig!.bookingEndTime = timePicked, - ); - } - }, - ) - ], - ), + const BookingPeriodWidget(), const SizedBox( height: 20, ), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - '* ', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith(color: Colors.red), - ), - const Text('Points/hrs'), - ], - ), - const SizedBox( - height: 5, - ), - SearchUnbookableSpacesWidget( - title: 'Ex: 0', - height: 40, - onChanged: (p0) { - context - .read() - .selectedBookableSpaces - .forEach( - (e) => e.spaceConfig!.cost = int.parse( - pointsController.text.isEmpty - ? '0' - : pointsController.text, - ), - ); - context - .read() - .add(CheckConfigurValidityEvent()); - }, - controller: pointsController, - inputFormatters: [FilteringTextInputFormatter.digitsOnly], - suffix: const SizedBox(), - ), + BlocProvider( + create: (context) => TogglePointsSwitchCubit()..activateSwitch(), + child: PointsPartWidget(pointsController: pointsController), + ) ], ), ); } } - -class TitleAndTimePickerWidget extends StatelessWidget { - final void Function(TimeOfDay? timePicked) onTimePicked; - final String title; - const TitleAndTimePickerWidget({ - super.key, - required this.onTimePicked, - required this.title, - }); - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - '* ', - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith(color: Colors.red), - ), - Text(title), - ], - ), - const SizedBox( - height: 5, - ), - TimePickerWidget( - onTimePicked: onTimePicked, - ), - ], - ); - } -}