diff --git a/lib/providers/collection_providers.dart b/lib/providers/collection_providers.dart index 30801ecb..db6b7cf3 100644 --- a/lib/providers/collection_providers.dart +++ b/lib/providers/collection_providers.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'settings_providers.dart'; import 'ui_providers.dart'; @@ -9,7 +8,6 @@ import '../consts.dart'; import 'package:http/http.dart' as http; final selectedIdStateProvider = StateProvider((ref) => null); -final searchQueryProvider = StateProvider((ref) => ''); final selectedRequestModelProvider = StateProvider((ref) { final selectedId = ref.watch(selectedIdStateProvider); @@ -33,7 +31,7 @@ final StateNotifierProvider?> class CollectionStateNotifier extends StateNotifier?> { CollectionStateNotifier(this.ref, this.hiveHandler) : super(null) { - var status = filterRequests(ref.read(searchQueryProvider.notifier).state); + var status = loadData(); Future.microtask(() { if (status) { ref.read(requestSequenceProvider.notifier).state = [ @@ -250,37 +248,6 @@ class CollectionStateNotifier } } - bool filterRequests(String query) { - if (query.isEmpty) { - - loadData(); - return true; - } else { - // Filter requests based on the query - final filteredRequests = state?.values.where((request) => - request.name.toLowerCase().contains(query.toLowerCase())).toList(); - - - if (filteredRequests != null && filteredRequests.isNotEmpty) { - - Map requestMap = {}; - - for (var request in filteredRequests) { - requestMap[request.id] = request; - } - - state = requestMap; - - } else { - print("No matching requests found"); - } - - - - return false; - } - } - Future saveData() async { ref.read(saveDataStateProvider.notifier).state = true; final saveResponse = ref.read(settingsProvider).saveResponses; diff --git a/lib/providers/ui_providers.dart b/lib/providers/ui_providers.dart index 2fddb2ad..62f83f70 100644 --- a/lib/providers/ui_providers.dart +++ b/lib/providers/ui_providers.dart @@ -23,3 +23,5 @@ final nameTextFieldFocusNodeProvider = }); return focusNode; }); + +final searchQueryProvider = StateProvider((ref) => ''); diff --git a/lib/screens/home_page/collection_pane.dart b/lib/screens/home_page/collection_pane.dart index c44ed56e..abfc1f28 100644 --- a/lib/screens/home_page/collection_pane.dart +++ b/lib/screens/home_page/collection_pane.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:apidash/providers/providers.dart'; @@ -67,33 +66,44 @@ class CollectionPane extends ConsumerWidget { style: kTextStyleButton, ), ), - ], ), ), kVSpacer10, - SizedBox( - height:30, - child:SearchBar( - - onChanged: (value){ - if(value.isNotEmpty){ - ref.read(searchQueryProvider.notifier).state = value; - ref.read(collectionStateNotifierProvider.notifier) - .filterRequests(value); - } - else{ - - } - - }, - hintText: "search", - leading: Icon(Icons.search), - textStyle: MaterialStateTextStyle.resolveWith((states) => TextStyle(fontSize: 15.0)), - elevation: MaterialStateProperty.all(2.0), - )), + Container( + height: 30, + margin: const EdgeInsets.only(right: 8), + decoration: BoxDecoration( + borderRadius: kBorderRadius8, + border: Border.all( + color: Theme.of(context).colorScheme.surfaceVariant, + ), + ), + child: Row( + children: [ + kHSpacer5, + Icon( + Icons.filter_alt, + size: 18, + color: Theme.of(context).colorScheme.secondary, + ), + kHSpacer5, + Expanded( + child: RawTextField( + style: Theme.of(context).textTheme.bodyMedium, + hintText: "Filter by name or URL", + onChanged: (value) { + if (value.trim().isNotEmpty) { + ref.read(searchQueryProvider.notifier).state = value; + print(value); + } + }, + ), + ), + ], + ), + ), kVSpacer10, - const Expanded( child: RequestList(), ), @@ -134,7 +144,7 @@ class _RequestListState extends ConsumerState { final alwaysShowCollectionPaneScrollbar = ref.watch(settingsProvider .select((value) => value.alwaysShowCollectionPaneScrollbar)); - return requestItems.isNotEmpty?Scrollbar( + return Scrollbar( controller: controller, thumbVisibility: alwaysShowCollectionPaneScrollbar ? true : null, radius: const Radius.circular(12), @@ -155,7 +165,6 @@ class _RequestListState extends ConsumerState { }, itemBuilder: (context, index) { var id = requestSequence[index]; - print(requestItems[id]!); return ReorderableDragStartListener( key: ValueKey(id), @@ -170,7 +179,7 @@ class _RequestListState extends ConsumerState { ); }, ), - ):Text("data"); + ); } } diff --git a/lib/widgets/textfields.dart b/lib/widgets/textfields.dart index da68f9e2..35d3437f 100644 --- a/lib/widgets/textfields.dart +++ b/lib/widgets/textfields.dart @@ -94,14 +94,39 @@ class JsonSearchField extends StatelessWidget { @override Widget build(BuildContext context) { - return TextField( + return RawTextField( controller: controller, onChanged: onChanged, style: kCodeStyle, - decoration: const InputDecoration( + hintText: 'Search..', + ); + } +} + +class RawTextField extends StatelessWidget { + const RawTextField({ + super.key, + this.onChanged, + this.controller, + this.hintText, + this.style, + }); + + final void Function(String)? onChanged; + final TextEditingController? controller; + final String? hintText; + final TextStyle? style; + + @override + Widget build(BuildContext context) { + return TextField( + controller: controller, + onChanged: onChanged, + style: style, + decoration: InputDecoration( isDense: true, border: InputBorder.none, - hintText: 'Search..', + hintText: hintText, ), ); }