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;
class BookProvider with ChangeNotifier {
String baseUrl = 'http://localhost:8000/api/v1';
List<dynamic>? books;
List<dynamic>? categories;
Category? category;
BookProvider({this.books});
......@@ -60,10 +62,9 @@ class BookProvider with ChangeNotifier {
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
books = data["results"];
categories = data["results"];
} else {
final code = response.statusCode;
debugPrint("Error: Fetch books failed, $code");
debugPrint("Error: Fetch books failed, ${response.statusCode}");
}
notifyListeners();
......@@ -81,8 +82,7 @@ class BookProvider with ChangeNotifier {
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
var category = data["results"];
return category;
category = data;
} else {
final code = response.statusCode;
debugPrint("Error: Fetch books failed, $code");
......
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/book_provider.dart';
import 'package:library_app/src/providers/navigations_provider.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';
import 'package:library_app/src/widgets/profile.dart';
import 'package:provider/provider.dart';
class ListScreen extends StatelessWidget {
class ListScreen extends StatefulWidget {
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
Widget build(BuildContext context) {
return Consumer2<NavigationsProvider, AuthProvider>(
builder: (context, navProvider, authProvider, child) {
return Consumer3<NavigationsProvider, AuthProvider, BookProvider>(
builder: (context, navProvider, authProvider, bookProvider, child) {
Iterable<Category>? category;
if (bookProvider.categories != null) {
category = bookProvider.categories!.map(
(data) {
return Category(data["name"]);
},
);
}
return Scaffold(
bottomNavigationBar: NavigationBar(
onDestinationSelected: (int index) {
......@@ -56,6 +77,25 @@ class ListScreen extends StatelessWidget {
// Profile
const Profile(),
][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> {
],
),
],
leading: !showWidget
? IconButton(
onPressed: () {
Scaffold.of(context).openDrawer();
},
icon: const Icon(Icons.menu),
)
: null,
elevation: 10.0,
automaticallyImplyLeading: false,
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