From 5c7e2dea57ae7c49241cbba26f1eeb99d2fd8417 Mon Sep 17 00:00:00 2001 From: Odweta Date: Mon, 23 Mar 2026 11:36:02 +0100 Subject: [PATCH] working on filtering --- frontend/lib/pages/list.dart | 7 +++---- frontend/lib/provider/quote_provider.dart | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/frontend/lib/pages/list.dart b/frontend/lib/pages/list.dart index bb0c181..f1db0f8 100644 --- a/frontend/lib/pages/list.dart +++ b/frontend/lib/pages/list.dart @@ -48,9 +48,9 @@ class ListPage extends StatelessWidget { Expanded( child: ListView.builder( padding: EdgeInsets.all(Constants.edgeInset), - itemCount: provider.quotes.length, + itemCount: provider.filteredQuotes.length, itemBuilder: (context, index) { - final quote = provider.quotes[index]; + final quote = provider.filteredQuotes[index]; return ListTile( @@ -211,7 +211,6 @@ class ListPage extends StatelessWidget { } Widget filterBar(BuildContext context, QuoteProvider provider) { - int filterBy = 0; // 0 = by author, 1 = by quote return Padding( padding: const EdgeInsets.all(Constants.edgeInset), child: Row( @@ -231,7 +230,7 @@ class ListPage extends StatelessWidget { IconButton( icon: Icon(Icons.search), onPressed: () { - // TODO: filtering + provider.filterQuotes; }, ), IconButton( diff --git a/frontend/lib/provider/quote_provider.dart b/frontend/lib/provider/quote_provider.dart index 02b2e22..1a53134 100644 --- a/frontend/lib/provider/quote_provider.dart +++ b/frontend/lib/provider/quote_provider.dart @@ -7,17 +7,20 @@ import 'package:frontend/repository/quote_repository.dart'; class QuoteProvider extends ChangeNotifier { List _quotes = []; + List _filteredQuotes = []; Set _authors = {}; bool _loading = false; String? _error; List get quotes => _quotes; + List get filteredQuotes => _filteredQuotes; Set get authors => _authors; bool get loading => _loading; String? get error => _error; final QuoteRepository repo = QuoteRepository(); + int filterBy = 0; // 0 = by author, 1 = by quote var filterController = TextEditingController(text: ''); void clearFilterController() { @@ -35,6 +38,25 @@ class QuoteProvider extends ChangeNotifier { } } + void filterQuotes() { + _filteredQuotes = []; + for (var quote in _quotes) { + switch (filterBy) { + case 0: + if (quote.author.toLowerCase() == filterController.text.toLowerCase()) { + _filteredQuotes.add(quote); + } + break; + case 1: + if (quote.body.toLowerCase().contains(filterController.text.toLowerCase())) { + _filteredQuotes.add(quote); + } + break; + } + } + notifyListeners(); + } + Future readQuotes() async { _loading = true; _error = null; @@ -42,6 +64,7 @@ class QuoteProvider extends ChangeNotifier { try { _quotes = await repo.readQuotes(); + _filteredQuotes = _quotes; } catch (e) { _error = e.toString(); }