Commit 99c75c17 authored by Ilham Maulana's avatar Ilham Maulana 💻

feat: widget actions handle filter category

parent 8032ad3b
...@@ -87,6 +87,9 @@ class _ListScreen extends State<ListScreen> { ...@@ -87,6 +87,9 @@ class _ListScreen extends State<ListScreen> {
return ListTile( return ListTile(
title: Text(category.elementAt(index).name), title: Text(category.elementAt(index).name),
onTap: () { onTap: () {
bookProvider.filterBookByCategory(
category!.elementAt(index).name);
bookProvider.getBooks();
Navigator.pop(context); Navigator.pop(context);
}, },
); );
......
...@@ -95,8 +95,12 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -95,8 +95,12 @@ class _TopAppBar extends State<TopAppBar> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<BookProvider>(builder: (context, bookProvider, child) {
final category = bookProvider.filterByCategory;
final appBarTitle = category != null ? "$category $title" : title;
return SliverAppBar( return SliverAppBar(
title: Text(showWidget ? "" : title), title: Text(showWidget ? "" : appBarTitle),
actions: [ actions: [
Row( Row(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
...@@ -105,6 +109,10 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -105,6 +109,10 @@ class _TopAppBar extends State<TopAppBar> {
onPressed: () { onPressed: () {
setState(() { setState(() {
showWidget = !showWidget; showWidget = !showWidget;
if (!showWidget) {
bookProvider.setSearchKeyword(null);
bookProvider.getBooks();
}
}); });
}, },
icon: Icon(showWidget ? Icons.close : Icons.search), icon: Icon(showWidget ? Icons.close : Icons.search),
...@@ -119,9 +127,14 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -119,9 +127,14 @@ class _TopAppBar extends State<TopAppBar> {
leading: !showWidget leading: !showWidget
? IconButton( ? IconButton(
onPressed: () { onPressed: () {
if (category != null) {
bookProvider.filterBookByCategory(null);
bookProvider.getBooks();
} else {
Scaffold.of(context).openDrawer(); Scaffold.of(context).openDrawer();
}
}, },
icon: const Icon(Icons.menu), icon: Icon(category != null ? Icons.close : Icons.menu),
) )
: null, : null,
elevation: 10.0, elevation: 10.0,
...@@ -130,5 +143,6 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -130,5 +143,6 @@ class _TopAppBar extends State<TopAppBar> {
floating: true, floating: true,
snap: true, snap: true,
); );
});
} }
} }
...@@ -24,9 +24,13 @@ class _SearchForm extends State<SearchForm> { ...@@ -24,9 +24,13 @@ class _SearchForm extends State<SearchForm> {
width: queryData.size.width * 0.8, width: queryData.size.width * 0.8,
padding: const EdgeInsets.symmetric(vertical: 8.0), padding: const EdgeInsets.symmetric(vertical: 8.0),
child: SearchBar( child: SearchBar(
hintText: "Enter keywords...",
elevation: WidgetStateProperty.all(0), elevation: WidgetStateProperty.all(0),
onChanged: (value) => onChanged: (value) {
Provider.of<BookProvider>(context, listen: false).searchBook(value), Provider.of<BookProvider>(context, listen: false)
.setSearchKeyword(value);
Provider.of<BookProvider>(context, listen: false).getBooks();
},
leading: const Icon(Icons.search), leading: const Icon(Icons.search),
), ),
); );
......
...@@ -14,6 +14,7 @@ class LoanItem extends StatelessWidget { ...@@ -14,6 +14,7 @@ class LoanItem extends StatelessWidget {
final loanDate = formater.format(DateTime.parse(_loan.loanDate)); final loanDate = formater.format(DateTime.parse(_loan.loanDate));
final dueDate = formater.format(DateTime.parse(_loan.dueDate)); final dueDate = formater.format(DateTime.parse(_loan.dueDate));
final remainingDays = _loan.remainingDays; final remainingDays = _loan.remainingDays;
final isOverdue = _loan.isOverdue;
final bookTitle = _loan.book.title; final bookTitle = _loan.book.title;
return Container( return Container(
...@@ -30,9 +31,11 @@ class LoanItem extends StatelessWidget { ...@@ -30,9 +31,11 @@ class LoanItem extends StatelessWidget {
margin: const EdgeInsets.only(bottom: 10.0), margin: const EdgeInsets.only(bottom: 10.0),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20.0), borderRadius: BorderRadius.circular(20.0),
color: Theme.of(context).primaryColor), color:
!isOverdue ? Theme.of(context).primaryColor : Colors.red,
),
child: Text( child: Text(
remainingDays, !isOverdue ? remainingDays : "Overdued",
style: const TextStyle(fontSize: 12.0, color: Colors.white), style: const TextStyle(fontSize: 12.0, color: Colors.white),
), ),
), ),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment