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,40 +95,54 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -95,40 +95,54 @@ class _TopAppBar extends State<TopAppBar> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SliverAppBar( return Consumer<BookProvider>(builder: (context, bookProvider, child) {
title: Text(showWidget ? "" : title), final category = bookProvider.filterByCategory;
actions: [ final appBarTitle = category != null ? "$category $title" : title;
Row(
crossAxisAlignment: CrossAxisAlignment.center, return SliverAppBar(
children: [ title: Text(showWidget ? "" : appBarTitle),
IconButton( actions: [
onPressed: () { Row(
setState(() { crossAxisAlignment: CrossAxisAlignment.center,
showWidget = !showWidget; children: [
}); IconButton(
}, onPressed: () {
icon: Icon(showWidget ? Icons.close : Icons.search), setState(() {
), showWidget = !showWidget;
Offstage( if (!showWidget) {
offstage: !showWidget, bookProvider.setSearchKeyword(null);
child: const SearchForm(), bookProvider.getBooks();
), }
], });
), },
], icon: Icon(showWidget ? Icons.close : Icons.search),
leading: !showWidget ),
? IconButton( Offstage(
onPressed: () { offstage: !showWidget,
Scaffold.of(context).openDrawer(); child: const SearchForm(),
}, ),
icon: const Icon(Icons.menu), ],
) ),
: null, ],
elevation: 10.0, leading: !showWidget
automaticallyImplyLeading: false, ? IconButton(
expandedHeight: 50, onPressed: () {
floating: true, if (category != null) {
snap: true, bookProvider.filterBookByCategory(null);
); bookProvider.getBooks();
} else {
Scaffold.of(context).openDrawer();
}
},
icon: Icon(category != null ? Icons.close : Icons.menu),
)
: null,
elevation: 10.0,
automaticallyImplyLeading: false,
expandedHeight: 50,
floating: 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(
...@@ -29,10 +30,12 @@ class LoanItem extends StatelessWidget { ...@@ -29,10 +30,12 @@ class LoanItem extends StatelessWidget {
const EdgeInsets.symmetric(vertical: 2.0, horizontal: 10.0), const EdgeInsets.symmetric(vertical: 2.0, horizontal: 10.0),
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