added bloc to widget

This commit is contained in:
hannathkadher
2025-01-05 13:08:53 +04:00
parent 819670867d
commit 691beb2e86
2 changed files with 98 additions and 89 deletions

View File

@ -38,10 +38,7 @@ class SpaceModelPage extends StatelessWidget {
showDialog(
context: context,
builder: (BuildContext context) {
return BlocProvider<CreateSpaceModelBloc>(
create: (_) => CreateSpaceModelBloc(),
child: CreateSpaceModelDialog(products: products),
);
return CreateSpaceModelDialog(products: products);
},
);
},

View File

@ -6,6 +6,7 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/model/product_mod
import 'package:syncrow_web/pages/spaces_management/all_spaces/widgets/add_device_type_widget.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_bloc.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_event.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/bloc/create_space_model_state.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/button_content_widget.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/create_subspace_model_dialog.dart';
@ -25,94 +26,103 @@ class CreateSpaceModelDialog extends StatelessWidget {
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
backgroundColor: ColorsManager.whiteColors,
content: SizedBox(
width: screenWidth * 0.3,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Create New Space Model',
style: Theme.of(context)
.textTheme
.headlineLarge
?.copyWith(color: ColorsManager.blackColor),
),
const SizedBox(height: 16),
SizedBox(
width: screenWidth * 0.25,
child: TextField(
style: const TextStyle(color: ColorsManager.blackColor),
decoration: InputDecoration(
filled: true,
fillColor: ColorsManager.textFieldGreyColor,
hintText: 'Please enter the name',
hintStyle:
const TextStyle(color: ColorsManager.lightGrayColor),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide.none,
),
contentPadding: const EdgeInsets.symmetric(
vertical: 12.0,
horizontal: 16.0,
),
),
),
),
const SizedBox(height: 16),
_buildSubspacesSection(context, subspaces),
const SizedBox(height: 10),
TextButton(
onPressed: () async {
final result = await showDialog<bool>(
barrierDismissible: false,
context: context,
builder: (context) => AddDeviceWidget(
products: products,
),
);
if (result == true) {
// Handle the result if necessary
print('Devices added successfully');
}
},
style: TextButton.styleFrom(
padding: EdgeInsets.zero,
),
child: const ButtonContentWidget(
icon: Icons.add,
label: 'Add Devices',
),
),
const SizedBox(height: 20),
SizedBox(
width: screenWidth * 0.25,
child: Row(
children: [
Expanded(
child: CancelButton(
label: 'Cancel',
onPressed: () => Navigator.of(context).pop(),
width: screenWidth * 0.3,
child: BlocProvider(
create: (_) {
final bloc = CreateSpaceModelBloc();
return bloc;
},
child: BlocBuilder<CreateSpaceModelBloc, CreateSpaceModelState>(
builder: (context, state) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Create New Space Model',
style: Theme.of(context)
.textTheme
.headlineLarge
?.copyWith(color: ColorsManager.blackColor),
),
),
const SizedBox(width: 10),
Expanded(
child: DefaultButton(
onPressed: () {
// Return data when OK is pressed
Navigator.of(context).pop(subspaces);
const SizedBox(height: 16),
SizedBox(
width: screenWidth * 0.25,
child: TextField(
style: const TextStyle(color: ColorsManager.blackColor),
decoration: InputDecoration(
filled: true,
fillColor: ColorsManager.textFieldGreyColor,
hintText: 'Please enter the name',
hintStyle: const TextStyle(
color: ColorsManager.lightGrayColor),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide.none,
),
contentPadding: const EdgeInsets.symmetric(
vertical: 12.0,
horizontal: 16.0,
),
),
),
),
const SizedBox(height: 16),
_buildSubspacesSection(context, subspaces),
const SizedBox(height: 10),
TextButton(
onPressed: () async {
final result = await showDialog<bool>(
barrierDismissible: false,
context: context,
builder: (context) => AddDeviceWidget(
products: products,
),
);
if (result == true) {
// Handle the result if necessary
print('Devices added successfully');
}
},
backgroundColor: ColorsManager.secondaryColor,
borderRadius: 10,
foregroundColor: ColorsManager.whiteColors,
child: const Text('OK'),
style: TextButton.styleFrom(
padding: EdgeInsets.zero,
),
child: const ButtonContentWidget(
icon: Icons.add,
label: 'Add Devices',
),
),
),
],
),
const SizedBox(height: 20),
SizedBox(
width: screenWidth * 0.25,
child: Row(
children: [
Expanded(
child: CancelButton(
label: 'Cancel',
onPressed: () => Navigator.of(context).pop(),
),
),
const SizedBox(width: 10),
Expanded(
child: DefaultButton(
onPressed: () {
// Return data when OK is pressed
Navigator.of(context).pop(subspaces);
},
backgroundColor: ColorsManager.secondaryColor,
borderRadius: 10,
foregroundColor: ColorsManager.whiteColors,
child: const Text('OK'),
),
),
],
),
),
],
);
},
),
],
),
),
)),
);
}
@ -131,7 +141,9 @@ class CreateSpaceModelDialog extends StatelessWidget {
builder: (BuildContext context) {
return CreateSubSpaceModelDialog(
isEdit: true,
dialogTitle: subspaces.isEmpty? 'Create Sub-space': 'Edit Sub-space',
dialogTitle: subspaces.isEmpty
? 'Create Sub-space'
: 'Edit Sub-space',
existingSubSpaces: subspaces,
);
},