Refactor SpaceManagementSidebarHeader to integrate CustomSearchBar and improve layout

This commit is contained in:
Faris Armoush
2025-07-24 15:04:10 +03:00
parent 7d77809750
commit 9d0a1f4883
3 changed files with 47 additions and 26 deletions

View File

@ -7,7 +7,7 @@ class CustomSearchBar extends StatefulWidget {
final TextEditingController? controller; final TextEditingController? controller;
final String hintText; final String hintText;
final String? searchQuery; final String? searchQuery;
final Function(String)? onSearchChanged; // Callback for search input changes final void Function(String)? onSearchChanged;
const CustomSearchBar({ const CustomSearchBar({
super.key, super.key,
@ -37,7 +37,7 @@ class _CustomSearchBarState extends State<CustomSearchBar> {
color: ColorsManager.white, color: ColorsManager.white,
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: Colors.black.withOpacity(0.2), color: ColorsManager.shadowBlackColor.withValues(alpha: 0.1),
spreadRadius: 0, spreadRadius: 0,
blurRadius: 8, blurRadius: 8,
offset: const Offset(0, 4), offset: const Offset(0, 4),
@ -57,7 +57,7 @@ class _CustomSearchBarState extends State<CustomSearchBar> {
style: const TextStyle( style: const TextStyle(
color: Colors.black, color: Colors.black,
), ),
onChanged: widget.onSearchChanged, // Call the callback on text change onChanged: widget.onSearchChanged,
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
fillColor: ColorsManager.textFieldGreyColor, fillColor: ColorsManager.textFieldGreyColor,

View File

@ -1,7 +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:syncrow_web/common/widgets/app_loading_indicator.dart'; import 'package:syncrow_web/common/widgets/app_loading_indicator.dart';
import 'package:syncrow_web/common/widgets/search_bar.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/domain/params/load_communities_param.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/bloc/communities_bloc.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/widgets/communities_tree_failure_widget.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/widgets/communities_tree_failure_widget.dart';
@ -55,12 +54,9 @@ class _SpaceManagementCommunitiesTreeState
], ],
), ),
child: Column( child: Column(
spacing: 16,
children: [ children: [
const SpaceManagementSidebarHeader(), SpaceManagementSidebarHeader(onSearchChanged: _onSearchChanged),
CustomSearchBar(
onSearchChanged: _onSearchChanged,
),
const SizedBox(height: 16),
switch (state.status) { switch (state.status) {
CommunitiesStatus.initial => const AppLoadingIndicator(), CommunitiesStatus.initial => const AppLoadingIndicator(),
CommunitiesStatus.loading => state.communities.isEmpty CommunitiesStatus.loading => state.communities.isEmpty

View File

@ -1,20 +1,43 @@
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:syncrow_web/common/widgets/search_bar.dart';
import 'package:syncrow_web/pages/space_management_v2/main_module/shared/helpers/space_management_community_dialog_helper.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/shared/helpers/space_management_community_dialog_helper.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_bloc.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/communities_tree_selection_bloc/communities_tree_selection_bloc.dart';
import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/widgets/space_management_sidebar_add_community_button.dart'; import 'package:syncrow_web/pages/space_management_v2/modules/communities/presentation/widgets/space_management_sidebar_add_community_button.dart';
import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/color_manager.dart';
import 'package:syncrow_web/utils/extension/build_context_x.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart';
import 'package:syncrow_web/utils/style.dart';
class SpaceManagementSidebarHeader extends StatelessWidget { class SpaceManagementSidebarHeader extends StatelessWidget {
const SpaceManagementSidebarHeader({super.key}); const SpaceManagementSidebarHeader({
required this.onSearchChanged,
super.key,
});
final void Function(String) onSearchChanged;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Stack(
decoration: subSectionContainerDecoration, clipBehavior: Clip.none,
children: [
Padding(
padding: const EdgeInsets.only(top: 56),
child: CustomSearchBar(
onSearchChanged: onSearchChanged,
),
),
Container(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: ColorsManager.white,
boxShadow: [
BoxShadow(
color: ColorsManager.shadowBlackColor.withValues(alpha: 0.1),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@ -29,6 +52,8 @@ class SpaceManagementSidebarHeader extends StatelessWidget {
), ),
], ],
), ),
),
],
); );
} }