fix: Search in spaces view

pull/1292/head
krille-chan 1 year ago
parent c842e3454b
commit 6073b46cfc
No known key found for this signature in database

@ -266,7 +266,7 @@ class ChatListController extends State<ChatList>
}); });
} }
void onSearchEnter(String text) { void onSearchEnter(String text, {bool globalSearch = true}) {
if (text.isEmpty) { if (text.isEmpty) {
cancelSearch(unfocus: false); cancelSearch(unfocus: false);
return; return;
@ -276,8 +276,10 @@ class ChatListController extends State<ChatList>
isSearchMode = true; isSearchMode = true;
}); });
_coolDown?.cancel(); _coolDown?.cancel();
if (globalSearch) {
_coolDown = Timer(const Duration(milliseconds: 500), _search); _coolDown = Timer(const Duration(milliseconds: 500), _search);
} }
}
void startSearch() { void startSearch() {
setState(() { setState(() {

@ -9,8 +9,13 @@ import '../../widgets/matrix.dart';
class ChatListHeader extends StatelessWidget implements PreferredSizeWidget { class ChatListHeader extends StatelessWidget implements PreferredSizeWidget {
final ChatListController controller; final ChatListController controller;
final bool globalSearch;
const ChatListHeader({super.key, required this.controller}); const ChatListHeader({
super.key,
required this.controller,
this.globalSearch = true,
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -47,7 +52,10 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget {
controller: controller.searchController, controller: controller.searchController,
focusNode: controller.searchFocusNode, focusNode: controller.searchFocusNode,
textInputAction: TextInputAction.search, textInputAction: TextInputAction.search,
onChanged: controller.onSearchEnter, onChanged: (text) => controller.onSearchEnter(
text,
globalSearch: globalSearch,
),
decoration: InputDecoration( decoration: InputDecoration(
fillColor: Theme.of(context).colorScheme.secondaryContainer, fillColor: Theme.of(context).colorScheme.secondaryContainer,
border: OutlineInputBorder( border: OutlineInputBorder(
@ -79,7 +87,7 @@ class ChatListHeader extends StatelessWidget implements PreferredSizeWidget {
.onPrimaryContainer, .onPrimaryContainer,
), ),
), ),
suffixIcon: controller.isSearchMode suffixIcon: controller.isSearchMode && globalSearch
? controller.isSearching ? controller.isSearching
? const Padding( ? const Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(

@ -279,9 +279,16 @@ class _SpaceViewState extends State<SpaceView> {
if (activeSpaceId == null) { if (activeSpaceId == null) {
final rootSpaces = allSpaces final rootSpaces = allSpaces
.where( .where(
(space) => !allSpaces.any( (space) =>
!allSpaces.any(
(parentSpace) => parentSpace.spaceChildren (parentSpace) => parentSpace.spaceChildren
.any((child) => child.roomId == space.id), .any((child) => child.roomId == space.id),
) &&
space
.getLocalizedDisplayname(MatrixLocals(L10n.of(context)!))
.toLowerCase()
.contains(
widget.controller.searchController.text.toLowerCase(),
), ),
) )
.toList(); .toList();
@ -347,7 +354,7 @@ class _SpaceViewState extends State<SpaceView> {
child: CustomScrollView( child: CustomScrollView(
controller: widget.scrollController, controller: widget.scrollController,
slivers: [ slivers: [
ChatListHeader(controller: widget.controller), ChatListHeader(controller: widget.controller, globalSearch: false),
SliverAppBar( SliverAppBar(
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
primary: false, primary: false,
@ -490,7 +497,8 @@ class _SpaceViewState extends State<SpaceView> {
L10n.of(context)!.chat; L10n.of(context)!.chat;
if (widget.controller.isSearchMode && if (widget.controller.isSearchMode &&
!name.toLowerCase().contains( !name.toLowerCase().contains(
widget.controller.searchController.text, widget.controller.searchController.text
.toLowerCase(),
)) { )) {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }

Loading…
Cancel
Save