overwrite dialog and progress indicator and success dialog

This commit is contained in:
mohammad
2025-02-18 12:37:00 +03:00
parent 00a9cb1188
commit 009ede7d08
12 changed files with 337 additions and 203 deletions

View File

@ -0,0 +1,3 @@
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43.2614 20.4808C44.1769 21.3963 44.1769 22.8804 43.2614 23.7955L27.5381 39.5192C26.6226 40.4343 25.139 40.4343 24.2235 39.5192L16.7386 32.0338C15.8231 31.1188 15.8231 29.6347 16.7386 28.7196C17.6537 27.8041 19.1377 27.8041 20.0528 28.7196L25.8806 34.5474L39.9467 20.4808C40.8623 19.5657 42.3463 19.5657 43.2614 20.4808ZM60 30C60 46.5825 46.5802 60 30 60C13.4175 60 0 46.5802 0 30C0 13.4175 13.4198 0 30 0C46.5825 0 60 13.4198 60 30ZM55.3125 30C55.3125 16.0085 43.9897 4.6875 30 4.6875C16.0085 4.6875 4.6875 16.0103 4.6875 30C4.6875 43.9915 16.0103 55.3125 30 55.3125C43.9915 55.3125 55.3125 43.9897 55.3125 30Z" fill="#023DFE" fill-opacity="0.7"/>
</svg>

After

Width:  |  Height:  |  Size: 761 B

View File

@ -24,7 +24,8 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
final isLarge = isLargeScreenSize(context); final isLarge = isLargeScreenSize(context);
final isMedium = isMediumScreenSize(context); final isMedium = isMediumScreenSize(context);
return BlocProvider( return BlocProvider(
create: (context) => AcBloc(deviceId: device.uuid!)..add(AcFetchDeviceStatusEvent(device.uuid!)), create: (context) => AcBloc(deviceId: device.uuid!)
..add(AcFetchDeviceStatusEvent(device.uuid!)),
child: BlocBuilder<AcBloc, AcsState>( child: BlocBuilder<AcBloc, AcsState>(
builder: (context, state) { builder: (context, state) {
if (state is ACStatusLoaded) { if (state is ACStatusLoaded) {
@ -98,7 +99,8 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
), ),
Text( Text(
'h', 'h',
style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor), style: context.textTheme.bodySmall!
.copyWith(color: ColorsManager.blackColor),
), ),
Text( Text(
'30', '30',
@ -107,7 +109,9 @@ class AcDeviceControlsView extends StatelessWidget with HelperResponsiveLayout {
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
), ),
Text('m', style: context.textTheme.bodySmall!.copyWith(color: ColorsManager.blackColor)), Text('m',
style: context.textTheme.bodySmall!
.copyWith(color: ColorsManager.blackColor)),
IconButton( IconButton(
padding: const EdgeInsets.all(0), padding: const EdgeInsets.all(0),
onPressed: () {}, onPressed: () {},

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_svg/svg.dart';
import 'package:syncrow_web/common/widgets/search_bar.dart'; import 'package:syncrow_web/common/widgets/search_bar.dart';
import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart'; import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart';
import 'package:syncrow_web/pages/space_tree/bloc/space_tree_event.dart'; import 'package:syncrow_web/pages/space_tree/bloc/space_tree_event.dart';
@ -8,11 +9,14 @@ import 'package:syncrow_web/pages/space_tree/view/custom_expansion.dart';
import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart';
import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/style.dart'; import 'package:syncrow_web/utils/style.dart';
class SpaceTreeView extends StatefulWidget { class SpaceTreeView extends StatefulWidget {
final bool? isSide;
final Function onSelect; final Function onSelect;
const SpaceTreeView({required this.onSelect, super.key}); const SpaceTreeView({required this.onSelect, this.isSide, super.key});
@override @override
State<SpaceTreeView> createState() => _SpaceTreeViewState(); State<SpaceTreeView> createState() => _SpaceTreeViewState();
@ -29,18 +33,75 @@ class _SpaceTreeViewState extends State<SpaceTreeView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocBuilder<SpaceTreeBloc, SpaceTreeState>(builder: (context, state) { return BlocBuilder<SpaceTreeBloc, SpaceTreeState>(
List<CommunityModel> list = state.isSearching ? state.filteredCommunity : state.communityList; builder: (context, state) {
List<CommunityModel> list =
state.isSearching ? state.filteredCommunity : state.communityList;
return Container( return Container(
height: MediaQuery.sizeOf(context).height, height: MediaQuery.sizeOf(context).height,
decoration: subSectionContainerDecoration, decoration:
widget.isSide == true ? subSectionContainerDecoration : null,
child: state is SpaceTreeLoadingState child: state is SpaceTreeLoadingState
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: Column( : Column(
children: [ children: [
CustomSearchBar( widget.isSide == true
? Container(
decoration: const BoxDecoration(
color: ColorsManager.circleRolesBackground,
borderRadius: BorderRadius.only(
topRight: Radius.circular(20),
topLeft: Radius.circular(20)),
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(
Radius.circular(20)),
border: Border.all(
color: ColorsManager.grayBorder)),
child: TextFormField(
style:
const TextStyle(color: Colors.black),
onChanged: (value) {
context
.read<SpaceTreeBloc>()
.add(SearchQueryEvent(value));
},
decoration: textBoxDecoration(radios: 20)!
.copyWith(
fillColor: Colors.white,
suffixIcon: Padding(
padding:
const EdgeInsets.only(right: 16),
child: SvgPicture.asset(
Assets.textFieldSearch,
width: 24,
height: 24,
),
),
hintStyle: context.textTheme.bodyMedium
?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 12,
color: ColorsManager.textGray),
),
),
),
),
],
),
),
)
: CustomSearchBar(
onSearchChanged: (query) { onSearchChanged: (query) {
context.read<SpaceTreeBloc>().add(SearchQueryEvent(query)); context
.read<SpaceTreeBloc>()
.add(SearchQueryEvent(query));
}, },
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
@ -56,14 +117,18 @@ class _SpaceTreeViewState extends State<SpaceTreeView> {
? Center( ? Center(
child: Text( child: Text(
'No results found', 'No results found',
style: Theme.of(context).textTheme.bodySmall!.copyWith( style: Theme.of(context)
.textTheme
.bodySmall!
.copyWith(
color: ColorsManager.lightGrayColor, color: ColorsManager.lightGrayColor,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
), ),
), ),
) )
: Scrollbar( : Scrollbar(
scrollbarOrientation: ScrollbarOrientation.left, scrollbarOrientation:
ScrollbarOrientation.left,
thumbVisibility: true, thumbVisibility: true,
controller: _scrollController, controller: _scrollController,
child: Padding( child: Padding(
@ -73,47 +138,68 @@ class _SpaceTreeViewState extends State<SpaceTreeView> {
shrinkWrap: true, shrinkWrap: true,
children: list children: list
.map( .map(
(community) => CustomExpansionTileSpaceTree( (community) =>
CustomExpansionTileSpaceTree(
title: community.name, title: community.name,
isSelected: state.selectedCommunities isSelected: state
.selectedCommunities
.contains(community.uuid), .contains(community.uuid),
isSoldCheck: state.selectedCommunities isSoldCheck: state
.selectedCommunities
.contains(community.uuid), .contains(community.uuid),
onExpansionChanged: () { onExpansionChanged: () {
context context
.read<SpaceTreeBloc>() .read<SpaceTreeBloc>()
.add(OnCommunityExpanded(community.uuid)); .add(OnCommunityExpanded(
community.uuid));
}, },
isExpanded: state.expandedCommunities isExpanded: state
.expandedCommunities
.contains(community.uuid), .contains(community.uuid),
onItemSelected: () { onItemSelected: () {
context.read<SpaceTreeBloc>().add( context
OnCommunitySelected( .read<SpaceTreeBloc>()
community.uuid, community.spaces)); .add(OnCommunitySelected(
community.uuid,
community.spaces));
widget.onSelect(); widget.onSelect();
}, },
children: community.spaces.map((space) { children:
community.spaces.map((space) {
return CustomExpansionTileSpaceTree( return CustomExpansionTileSpaceTree(
title: space.name, title: space.name,
isExpanded: isExpanded: state
state.expandedSpaces.contains(space.uuid), .expandedSpaces
.contains(space.uuid),
onItemSelected: () { onItemSelected: () {
context.read<SpaceTreeBloc>().add( context
OnSpaceSelected(community.uuid, .read<SpaceTreeBloc>()
space.uuid ?? '', space.children)); .add(OnSpaceSelected(
community.uuid,
space.uuid ?? '',
space.children));
widget.onSelect(); widget.onSelect();
}, },
onExpansionChanged: () { onExpansionChanged: () {
context.read<SpaceTreeBloc>().add( context
OnSpaceExpanded( .read<SpaceTreeBloc>()
community.uuid, space.uuid ?? '')); .add(OnSpaceExpanded(
community.uuid,
space.uuid ?? ''));
}, },
isSelected: isSelected: state
state.selectedSpaces.contains(space.uuid) || .selectedSpaces
state.soldCheck.contains(space.uuid), .contains(
isSoldCheck: state.soldCheck.contains(space.uuid), space.uuid) ||
state.soldCheck
.contains(space.uuid),
isSoldCheck: state.soldCheck
.contains(space.uuid),
children: _buildNestedSpaces( children: _buildNestedSpaces(
context, state, space, community.uuid), context,
state,
space,
community.uuid),
); );
}).toList(), }).toList(),
), ),
@ -195,23 +281,24 @@ class _SpaceTreeViewState extends State<SpaceTreeView> {
}); });
} }
List<Widget> _buildNestedSpaces( List<Widget> _buildNestedSpaces(BuildContext context, SpaceTreeState state,
BuildContext context, SpaceTreeState state, SpaceModel space, String communityId) { SpaceModel space, String communityId) {
return space.children.map((child) { return space.children.map((child) {
return CustomExpansionTileSpaceTree( return CustomExpansionTileSpaceTree(
isSelected: isSelected: state.selectedSpaces.contains(child.uuid) ||
state.selectedSpaces.contains(child.uuid) || state.soldCheck.contains(child.uuid), state.soldCheck.contains(child.uuid),
isSoldCheck: state.soldCheck.contains(child.uuid), isSoldCheck: state.soldCheck.contains(child.uuid),
title: child.name, title: child.name,
isExpanded: state.expandedSpaces.contains(child.uuid), isExpanded: state.expandedSpaces.contains(child.uuid),
onItemSelected: () { onItemSelected: () {
context context.read<SpaceTreeBloc>().add(
.read<SpaceTreeBloc>() OnSpaceSelected(communityId, child.uuid ?? '', child.children));
.add(OnSpaceSelected(communityId, child.uuid ?? '', child.children));
widget.onSelect(); widget.onSelect();
}, },
onExpansionChanged: () { onExpansionChanged: () {
context.read<SpaceTreeBloc>().add(OnSpaceExpanded(communityId, child.uuid ?? '')); context
.read<SpaceTreeBloc>()
.add(OnSpaceExpanded(communityId, child.uuid ?? ''));
}, },
children: _buildNestedSpaces(context, state, child, communityId), children: _buildNestedSpaces(context, state, child, communityId),
); );

View File

@ -11,7 +11,7 @@ class SpaceTemplateModel extends Equatable {
List<SubspaceTemplateModel>? subspaceModels; List<SubspaceTemplateModel>? subspaceModels;
final List<TagModel>? tags; final List<TagModel>? tags;
String internalId; String internalId;
DateTime? createdAt; String? createdAt;
@override @override
List<Object?> get props => [modelName, subspaceModels, tags]; List<Object?> get props => [modelName, subspaceModels, tags];

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/linking_successful.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
class ConfirmOverwriteDialog extends StatelessWidget { class ConfirmOverwriteDialog extends StatelessWidget {
@ -56,7 +57,16 @@ class ConfirmOverwriteDialog extends StatelessWidget {
const SizedBox(width: 10), const SizedBox(width: 10),
Expanded( Expanded(
child: ElevatedButton( child: ElevatedButton(
onPressed: () {}, onPressed: () {
Navigator.pop(context);
showDialog(
context: context,
builder: (BuildContext dialogContext) {
return const LinkingSuccessful();
},
);
},
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 14), padding: const EdgeInsets.symmetric(vertical: 14),
backgroundColor: ColorsManager.secondaryColor, backgroundColor: ColorsManager.secondaryColor,

View File

@ -1,42 +1,7 @@
import 'dart:math'; import 'dart:math';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/linking_successful.dart';
void showCustomLoadingDialog(BuildContext context) {
showDialog(
context: context,
barrierDismissible: false, // Prevent closing by tapping outside
builder: (BuildContext context) {
Future.delayed(Duration(seconds: 3), () {
Navigator.of(context).pop(); // Auto-close after 3 seconds
});
return Dialog(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
elevation: 10,
backgroundColor: Colors.white,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 30, horizontal: 50),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
// Custom loader
CustomLoadingIndicator(),
SizedBox(height: 20),
Text(
"Linking in progress",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Colors.black87,
),
),
],
),
),
);
},
);
}
class CustomLoadingIndicator extends StatefulWidget { class CustomLoadingIndicator extends StatefulWidget {
@override @override
@ -52,8 +17,8 @@ class _CustomLoadingIndicatorState extends State<CustomLoadingIndicator>
super.initState(); super.initState();
_controller = AnimationController( _controller = AnimationController(
vsync: this, vsync: this,
duration: Duration(seconds: 1), // Rotation speed duration: const Duration(seconds: 1),
)..repeat(); // Infinite animation )..repeat();
} }
@override @override
@ -71,7 +36,7 @@ class _CustomLoadingIndicatorState extends State<CustomLoadingIndicator>
animation: _controller, animation: _controller,
builder: (context, child) { builder: (context, child) {
return Transform.rotate( return Transform.rotate(
angle: _controller.value * 2 * pi, // Full rotation angle: _controller.value * 2 * pi,
child: CustomPaint( child: CustomPaint(
painter: LoadingPainter(), painter: LoadingPainter(),
), ),

View File

@ -1,11 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:syncrow_web/pages/space_tree/view/space_tree_view.dart';
import 'package:syncrow_web/pages/roles_and_permission/users_page/add_user_dialog/view/build_tree_view.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.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/dialog/confirm_overwrite_dialog.dart';
import 'package:syncrow_web/pages/spaces_management/space_model/widgets/dialog/custom_loading_dialog.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/style.dart';
class LinkSpaceModelSpacesDialog extends StatelessWidget { class LinkSpaceModelSpacesDialog extends StatelessWidget {
final SpaceTemplateModel spaceModel; final SpaceTemplateModel spaceModel;
@ -16,16 +14,22 @@ class LinkSpaceModelSpacesDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AlertDialog( return AlertDialog(
contentPadding: EdgeInsets.zero,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
backgroundColor: Colors.white, backgroundColor: Colors.white,
contentPadding: const EdgeInsets.all(20),
content: SizedBox( content: SizedBox(
width: MediaQuery.of(context).size.width * 0.4, width: MediaQuery.of(context).size.width * 0.4,
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
// Title Expanded(
child: Padding(
padding: const EdgeInsets.all(15.0),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Center( const Center(
child: Text( child: Text(
"Link Space Model to Spaces", "Link Space Model to Spaces",
@ -38,14 +42,12 @@ class LinkSpaceModelSpacesDialog extends StatelessWidget {
), ),
const Divider(), const Divider(),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildDetailRow("Space model name:",
// Details Section spaceModel.modelName),
_buildDetailRow("Space model name:", spaceModel.modelName), _buildDetailRow("Creation date and time:",
_buildDetailRow("Creation date and time:", spaceModel.modelName), spaceModel.createdAt.toString()),
_buildDetailRow("Created by:", "Admin"), _buildDetailRow("Created by:", "Admin"),
const SizedBox(height: 12), const SizedBox(height: 12),
// Link to Section
const Text( const Text(
"Link to:", "Link to:",
style: TextStyle(fontWeight: FontWeight.bold), style: TextStyle(fontWeight: FontWeight.bold),
@ -54,76 +56,27 @@ class LinkSpaceModelSpacesDialog extends StatelessWidget {
"Please select all the spaces where you would like to link the Routine.", "Please select all the spaces where you would like to link the Routine.",
style: TextStyle(fontSize: 12, color: Colors.grey), style: TextStyle(fontSize: 12, color: Colors.grey),
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
// Spaces List
Expanded( Expanded(
child: SizedBox( child: SizedBox(
child: Column( child: Column(
children: [ children: [
Expanded( Expanded(
flex: 2, flex: 7,
child: Container( child: Container(
decoration: const BoxDecoration( color: ColorsManager.whiteColors,
color: ColorsManager.circleRolesBackground, child: SpaceTreeView(
borderRadius: BorderRadius.only( isSide: true, onSelect: () {
topRight: Radius.circular(20),
topLeft: Radius.circular(20)), }))
), )
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: Container(
decoration: BoxDecoration(
borderRadius: const BorderRadius.all(
Radius.circular(20)),
border: Border.all(
color: ColorsManager.grayBorder)),
child: TextFormField(
style: const TextStyle(color: Colors.black),
// controller: _blocRole.firstNameController,
onChanged: (value) {
// _blocRole.add(SearchAnode(
// nodes: _blocRole.updatedCommunities,
// searchTerm: value));
},
decoration:
textBoxDecoration(radios: 20)!.copyWith(
fillColor: Colors.white,
suffixIcon: Padding(
padding:
const EdgeInsets.only(right: 16),
child: SvgPicture.asset(
Assets.textFieldSearch,
width: 24,
height: 24,
),
),
hintStyle: context.textTheme.bodyMedium
?.copyWith(
fontWeight: FontWeight.w400,
fontSize: 12,
color: ColorsManager.textGray),
),
),
),
),
], ],
), ),
), ),
), ),
const SizedBox(
height: 20,
), ),
Expanded(
flex: 7,
child: Container(
color: ColorsManager.circleRolesBackground,
padding: const EdgeInsets.all(8.0),
child: Container(
color: ColorsManager.whiteColors,
child: TreeView(userId: ''))))
], ],
), ),
), ),
@ -131,14 +84,98 @@ class LinkSpaceModelSpacesDialog extends StatelessWidget {
// Buttons // Buttons
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
_buildButton("Cancel", Colors.grey, () { Expanded(
child: Container(
height: 50,
decoration: const BoxDecoration(
border: Border(
right: BorderSide(
color: ColorsManager.grayColor,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.grayColor,
width: 1,
),
),
),
child: _buildButton("Cancel", Colors.grey, () {
Navigator.of(context).pop(); Navigator.of(context).pop();
}), }),
_buildButton("Confirm", Colors.blueAccent, () { ),
),
Expanded(
child: Container(
height: 50,
decoration: const BoxDecoration(
border: Border(
left: BorderSide(
color: ColorsManager.grayColor,
width: 0.5,
),
top: BorderSide(
color: ColorsManager.grayColor,
width: 1.0,
),
),
),
child: _buildButton(
"Confirm", ColorsManager.onSecondaryColor, () {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20)),
elevation: 10,
backgroundColor: Colors.white,
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 30, horizontal: 50),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
CustomLoadingIndicator(),
const SizedBox(height: 20),
const Text(
"Linking in progress",
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Colors.black87,
),
),
],
),
),
);
},
).then(
(value) {},
);
Future.delayed(const Duration(seconds: 3), () {
Navigator.of(context).pop(); Navigator.of(context).pop();
Navigator.of(context).pop();
// showDialog(
// context: context,
// builder: (BuildContext dialogContext) {
// return const LinkingSuccessful();
// },
// );
showDialog(
context: context,
builder: (BuildContext dialogContext) {
return const ConfirmOverwriteDialog();
},
);
});
}), }),
),
),
], ],
), ),
], ],
@ -176,14 +213,10 @@ class LinkSpaceModelSpacesDialog extends StatelessWidget {
Widget _buildButton(String text, Color color, VoidCallback onPressed) { Widget _buildButton(String text, Color color, VoidCallback onPressed) {
return TextButton( return TextButton(
onPressed: onPressed, onPressed: onPressed,
style: TextButton.styleFrom(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 12),
backgroundColor: color.withOpacity(0.2),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
),
child: Text( child: Text(
text, text,
style: TextStyle(color: color, fontWeight: FontWeight.bold), style:
TextStyle(color: color, fontWeight: FontWeight.w400, fontSize: 14),
), ),
); );
} }

View File

@ -67,7 +67,6 @@ class LinkingAttentionDialog extends StatelessWidget {
.textTheme .textTheme
.bodyMedium .bodyMedium
?.copyWith(fontWeight: FontWeight.w400, fontSize: 16), ?.copyWith(fontWeight: FontWeight.w400, fontSize: 16),
), ),
), ),
), ),

View File

@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/constants/assets.dart';
class LinkingSuccessful extends StatelessWidget {
const LinkingSuccessful({super.key});
@override
Widget build(BuildContext context) {
return AlertDialog(
backgroundColor: ColorsManager.whiteColors,
title: Center(
child: SvgPicture.asset(
Assets.successIcon,
)),
content: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Linking successful',
style: Theme.of(context)
.textTheme
.bodyMedium
?.copyWith(fontWeight: FontWeight.w400, fontSize: 18),
),
const SizedBox(height: 25),
],
),
);
}
}

View File

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
void showOverwriteDialog(BuildContext context) { void showOverwriteDialog(BuildContext context) {
showDialog( showDialog(
context: context, context: context,
barrierDismissible: false, // Prevent closing by tapping outside barrierDismissible: false,
builder: (BuildContext context) { builder: (BuildContext context) {
return Container( return Container(
child: Dialog( child: Dialog(
@ -19,7 +19,7 @@ void showOverwriteDialog(BuildContext context) {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
// Title // Title
Text( const Text(
"Overwrite", "Overwrite",
style: TextStyle( style: TextStyle(
fontSize: 22, fontSize: 22,
@ -30,7 +30,7 @@ void showOverwriteDialog(BuildContext context) {
SizedBox(height: 15), SizedBox(height: 15),
// Description // Description
Text( const Text(
"Are you sure you want to overwrite?", "Are you sure you want to overwrite?",
style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w500),
textAlign: TextAlign.center, textAlign: TextAlign.center,

View File

@ -281,7 +281,6 @@ class CommunitySpaceManagementApi {
.replaceAll('{communityId}', communityId) .replaceAll('{communityId}', communityId)
.replaceAll('{projectId}', TempConst.projectId), .replaceAll('{projectId}', TempConst.projectId),
expectedResponseModel: (json) { expectedResponseModel: (json) {
print('json space=$json');
final spaceModels = (json['data'] as List) final spaceModels = (json['data'] as List)
.map((spaceJson) => SpaceModel.fromJson(spaceJson)) .map((spaceJson) => SpaceModel.fromJson(spaceJson))
.toList(); .toList();

View File

@ -405,5 +405,6 @@ class Assets {
static const String deleteSpaceLinkIcon = static const String deleteSpaceLinkIcon =
'assets/icons/delete_space_link_icon.svg'; 'assets/icons/delete_space_link_icon.svg';
static const String spaceLinkIcon = 'assets/icons/space_link_icon.svg'; static const String spaceLinkIcon = 'assets/icons/space_link_icon.svg';
static const String successIcon = 'assets/icons/success_icon.svg';
} }
//space_link_icon.svg