build main screens with its widgets for bookableScreen

This commit is contained in:
Rafeek-Khoudare
2025-07-07 15:36:35 +03:00
parent 50f8158830
commit e2d4e48875
9 changed files with 369 additions and 2 deletions

View File

@ -0,0 +1,140 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/data/dummy_non_nookable_spaces.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/blocs/steps_cubit/cubit/steps_cubit.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/buttons_divider_bottom_dialog_widget.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/space_step_part_widget.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/step_two_details_widget.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/presentation/widgets/stepper_part_widget.dart';
import 'package:syncrow_web/utils/color_manager.dart';
class SetupBookableSpacesDialog extends StatelessWidget {
final TextEditingController pointsController = TextEditingController();
SetupBookableSpacesDialog({super.key});
@override
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
BlocProvider<StepsCubit>(
create: (context) => StepsCubit()..initDialogValue(),
),
BlocProvider<NonBookableSpacesBloc>(
create: (context) => NonBookableSpacesBloc(
DummyNonNookableSpaces(),
)..add(
LoadUnBookableSpacesEvent(
nonBookableSpacesParams:
NonBookableSpacesParams(currentPage: 1),
),
),
),
],
child: AlertDialog(
contentPadding: EdgeInsets.zero,
title: Text(
'Set Up a Bookable Spaces',
style: TextStyle(
fontWeight: FontWeight.w700,
color: ColorsManager.dialogBlueTitle,
fontSize: 15,
),
),
content: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Divider(),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Expanded(
flex: 3,
child: StepperPartWidget(),
),
const SizedBox(
height: 588,
child: VerticalDivider(
thickness: 0.5,
width: 1,
),
),
Expanded(
flex: 7,
child: DetailsStepsWidget(
pointsController: pointsController,
),
)
],
),
Builder(builder: (context) {
return ButtonsDividerBottomDialogWidget(
onNextPressed: () {
final stepsState = context.read<StepsCubit>().state;
final selectedSpaces = context
.read<NonBookableSpacesBloc>()
.selectedBookableSpaces;
if (stepsState is StepOneState) {
if (selectedSpaces.isNotEmpty) {
context.read<StepsCubit>().goToNextStep();
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Please select at least one space.'),
),
);
}
} else if (stepsState is StepTwoState) {
selectedSpaces.forEach(
(e) =>
e.spaceConfig.cost = int.parse(pointsController.text),
);
if (selectedSpaces.any(
(element) => !element.isValid,
)) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Please fill the required fields.'),
),
);
} else {}
}
},
onCancelPressed: () => context.pop(),
);
}),
],
),
),
);
}
}
class DetailsStepsWidget extends StatelessWidget {
final TextEditingController pointsController;
const DetailsStepsWidget({
super.key,
required this.pointsController,
});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 20),
child: BlocBuilder<StepsCubit, StepsState>(
builder: (context, state) {
if (state is StepOneState) {
return SpacesStepDetailsWidget();
} else if (state is StepTwoState) {
return StepTwoDetailsWidget(
pointsController: pointsController,
);
} else {
return const SizedBox();
}
},
),
);
}
}