Commit 6c33449f authored by Ilham Maulana's avatar Ilham Maulana 💻

feat: drawer categories

parent f3277584
...@@ -6,6 +6,8 @@ import 'package:http/http.dart' as http; ...@@ -6,6 +6,8 @@ import 'package:http/http.dart' as http;
class BookProvider with ChangeNotifier { class BookProvider with ChangeNotifier {
String baseUrl = 'http://localhost:8000/api/v1'; String baseUrl = 'http://localhost:8000/api/v1';
List<dynamic>? books; List<dynamic>? books;
List<dynamic>? categories;
Category? category;
BookProvider({this.books}); BookProvider({this.books});
...@@ -60,10 +62,9 @@ class BookProvider with ChangeNotifier { ...@@ -60,10 +62,9 @@ class BookProvider with ChangeNotifier {
if (response.statusCode == 200) { if (response.statusCode == 200) {
final data = jsonDecode(response.body); final data = jsonDecode(response.body);
books = data["results"]; categories = data["results"];
} else { } else {
final code = response.statusCode; debugPrint("Error: Fetch books failed, ${response.statusCode}");
debugPrint("Error: Fetch books failed, $code");
} }
notifyListeners(); notifyListeners();
...@@ -81,8 +82,7 @@ class BookProvider with ChangeNotifier { ...@@ -81,8 +82,7 @@ class BookProvider with ChangeNotifier {
if (response.statusCode == 200) { if (response.statusCode == 200) {
final data = jsonDecode(response.body); final data = jsonDecode(response.body);
var category = data["results"]; category = data;
return category;
} else { } else {
final code = response.statusCode; final code = response.statusCode;
debugPrint("Error: Fetch books failed, $code"); debugPrint("Error: Fetch books failed, $code");
......
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:library_app/src/models/category.dart';
import 'package:library_app/src/providers/auth_provider.dart'; import 'package:library_app/src/providers/auth_provider.dart';
import 'package:library_app/src/providers/book_provider.dart';
import 'package:library_app/src/providers/navigations_provider.dart'; import 'package:library_app/src/providers/navigations_provider.dart';
import 'package:library_app/src/widgets/books/book_list.dart'; import 'package:library_app/src/widgets/books/book_list.dart';
...@@ -8,13 +10,32 @@ import 'package:library_app/src/widgets/loans/loan_list.dart'; ...@@ -8,13 +10,32 @@ import 'package:library_app/src/widgets/loans/loan_list.dart';
import 'package:library_app/src/widgets/profile.dart'; import 'package:library_app/src/widgets/profile.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class ListScreen extends StatelessWidget { class ListScreen extends StatefulWidget {
const ListScreen({super.key}); const ListScreen({super.key});
@override
State<ListScreen> createState() => _ListScreen();
}
class _ListScreen extends State<ListScreen> {
@override
void initState() {
super.initState();
Provider.of<BookProvider>(context, listen: false).getCategories();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer2<NavigationsProvider, AuthProvider>( return Consumer3<NavigationsProvider, AuthProvider, BookProvider>(
builder: (context, navProvider, authProvider, child) { builder: (context, navProvider, authProvider, bookProvider, child) {
Iterable<Category>? category;
if (bookProvider.categories != null) {
category = bookProvider.categories!.map(
(data) {
return Category(data["name"]);
},
);
}
return Scaffold( return Scaffold(
bottomNavigationBar: NavigationBar( bottomNavigationBar: NavigationBar(
onDestinationSelected: (int index) { onDestinationSelected: (int index) {
...@@ -56,6 +77,25 @@ class ListScreen extends StatelessWidget { ...@@ -56,6 +77,25 @@ class ListScreen extends StatelessWidget {
// Profile // Profile
const Profile(), const Profile(),
][navProvider.currentPageIndex], ][navProvider.currentPageIndex],
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: List.generate(
category != null ? category.length : 0,
(index) {
if (category != null) {
return ListTile(
title: Text(category.elementAt(index).name),
onTap: () {
Navigator.pop(context);
},
);
}
return Container();
},
),
),
),
); );
}, },
); );
......
...@@ -116,6 +116,14 @@ class _TopAppBar extends State<TopAppBar> { ...@@ -116,6 +116,14 @@ class _TopAppBar extends State<TopAppBar> {
], ],
), ),
], ],
leading: !showWidget
? IconButton(
onPressed: () {
Scaffold.of(context).openDrawer();
},
icon: const Icon(Icons.menu),
)
: null,
elevation: 10.0, elevation: 10.0,
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
expandedHeight: 50, expandedHeight: 50,
......
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