From 52608b1f355227fc3e23170c20555e2ea6b53c46 Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Sun, 27 Apr 2025 22:42:57 +0400 Subject: [PATCH] fixed search query --- .../all_spaces/widgets/sidebar_widget.dart | 41 ++++++++++++------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart index 374f0a0a..612bf781 100644 --- a/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart +++ b/lib/pages/spaces_management/all_spaces/widgets/sidebar_widget.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/common/widgets/empty_search_result_widget.dart'; @@ -36,6 +38,7 @@ class SidebarWidget extends StatefulWidget { class _SidebarWidgetState extends State { late final ScrollController _scrollController; + Timer? _debounce; String _searchQuery = ''; String? _selectedSpaceUuid; @@ -43,10 +46,10 @@ class _SidebarWidgetState extends State { @override void initState() { + super.initState(); _scrollController = ScrollController(); _scrollController.addListener(_onScroll); _selectedId = widget.selectedSpaceUuid; - super.initState(); } void _onScroll() { @@ -67,11 +70,22 @@ class _SidebarWidgetState extends State { @override void dispose() { _scrollController.removeListener(_onScroll); - _scrollController.dispose(); + _debounce?.cancel(); super.dispose(); } + void _onSearchChanged(String query) { + if (_debounce?.isActive ?? false) _debounce?.cancel(); + + _debounce = Timer(const Duration(milliseconds: 500), () { + setState(() { + _searchQuery = query; + }); + context.read().add(SearchQueryEvent(query)); + }); + } + @override void didUpdateWidget(covariant SidebarWidget oldWidget) { if (widget.selectedSpaceUuid != oldWidget.selectedSpaceUuid) { @@ -91,7 +105,7 @@ class _SidebarWidgetState extends State { @override Widget build(BuildContext context) { final spaceTreeState = context.watch().state; - final filteredCommunities = spaceTreeState.isSearching + final filteredCommunities = spaceTreeState.searchQuery.isNotEmpty ? spaceTreeState.filteredCommunity : spaceTreeState.communityList; @@ -104,13 +118,7 @@ class _SidebarWidgetState extends State { children: [ SidebarHeader(onAddCommunity: _onAddCommunity), CustomSearchBar( - onSearchChanged: (query) { - setState(() { - _searchQuery = query; - }); - - context.read().add(SearchQueryEvent(query)); - }, + onSearchChanged: _onSearchChanged, ), const SizedBox(height: 16), Expanded( @@ -123,10 +131,15 @@ class _SidebarWidgetState extends State { communities: filteredCommunities, itemBuilder: (context, index) { if (index == filteredCommunities.length) { - return const Padding( - padding: EdgeInsets.all(8.0), - child: Center(child: CircularProgressIndicator()), - ); + final spaceTreeState = context.read().state; + if (spaceTreeState.paginationIsLoading) { + return const Padding( + padding: EdgeInsets.all(8.0), + child: Center(child: CircularProgressIndicator()), + ); + } else { + return const SizedBox.shrink(); + } } return _buildCommunityTile(context, filteredCommunities[index]); }),