Commit a7aeb206 authored by Ilham Maulana's avatar Ilham Maulana 💻

fix: shifting near outstanding and overdue loans (admin access) to one reusable widget

parent 68feb6a9
import 'package:flutter/material.dart';
import 'package:library_app/src/widgets/loans/admin_loan_list.dart';
import 'package:provider/provider.dart';
import 'package:library_app/src/providers/auth_provider.dart';
......@@ -7,8 +8,6 @@ import 'package:library_app/src/providers/navigations_provider.dart';
import 'package:library_app/src/widgets/home.dart';
import 'package:library_app/src/widgets/profile.dart';
import 'package:library_app/src/widgets/loans/overdued_loan_list.dart';
import 'package:library_app/src/widgets/loans/upcoming_loan_list.dart';
class AdminListScreen extends StatefulWidget {
const AdminListScreen({super.key});
......@@ -61,9 +60,10 @@ class _AdminListScreen extends State<AdminListScreen> {
// Home
const HomePage(),
// Near Outstanding Loans
const UpcomingLoanList(),
const AdminLoanList(
title: "Near Outstanding Loans", type: "upcoming"),
// Overdued Loans
const OverduedLoanList(),
const AdminLoanList(title: "Overdued Loans", type: "overdue"),
// Profile
const Profile(),
][navProvider.currentPageIndex],
......
......@@ -6,25 +6,38 @@ import 'package:provider/provider.dart';
import 'package:library_app/src/models/loan.dart';
import 'package:library_app/src/widgets/loans/loan_item.dart';
class OverduedLoanList extends StatefulWidget {
const OverduedLoanList({super.key});
class AdminLoanList extends StatefulWidget {
final String title;
final String type;
const AdminLoanList({
super.key,
required this.title,
required this.type,
});
@override
State<OverduedLoanList> createState() => _OverduedLoanList();
State<AdminLoanList> createState() => _AdminLoanList();
}
class _OverduedLoanList extends State<OverduedLoanList> {
class _AdminLoanList extends State<AdminLoanList> {
String get title => widget.title;
String get type => widget.type;
@override
void initState() {
super.initState();
Provider.of<AuthProvider>(context, listen: false).getLoans("overdue");
Provider.of<AuthProvider>(context, listen: false).getLoans(type);
}
@override
Widget build(BuildContext context) {
return Consumer<AuthProvider>(builder: (context, loanProvider, child) {
if (loanProvider.overduedLoans != null) {
var loans = loanProvider.overduedLoans!.map(
final getLoans = type == "upcoming"
? loanProvider.nearOutstandingLoans
: loanProvider.overduedLoans;
if (getLoans != null) {
var loans = getLoans.map(
(loan) {
var book = Book.fromJson(loan["book_detail"]);
return Loan(
......@@ -39,7 +52,7 @@ class _OverduedLoanList extends State<OverduedLoanList> {
return NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [const TopAppBar(title: "Overdued Loans")];
return [TopAppBar(title: title)];
},
body: ListView(
children: List.generate(loans.length, (index) {
......@@ -50,7 +63,7 @@ class _OverduedLoanList extends State<OverduedLoanList> {
} else {
return NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [const TopAppBar(title: "Book Loans")];
return [TopAppBar(title: title)];
},
body: const Center(
child: Text("the loan is currently empty"),
......
import 'package:flutter/material.dart';
import 'package:library_app/src/models/book.dart';
import 'package:library_app/src/providers/auth_provider.dart';
import 'package:provider/provider.dart';
import 'package:library_app/src/models/loan.dart';
import 'package:library_app/src/widgets/loans/loan_item.dart';
class UpcomingLoanList extends StatefulWidget {
const UpcomingLoanList({super.key});
@override
State<UpcomingLoanList> createState() => _UpcomingLoanList();
}
class _UpcomingLoanList extends State<UpcomingLoanList> {
@override
void initState() {
super.initState();
Provider.of<AuthProvider>(context, listen: false).getLoans("upcoming");
}
@override
Widget build(BuildContext context) {
return Consumer<AuthProvider>(builder: (context, loanProvider, child) {
if (loanProvider.nearOutstandingLoans != null) {
var loans = loanProvider.nearOutstandingLoans!.map(
(loan) {
var book = Book.fromJson(loan["book_detail"]);
return Loan(
book,
loan["loan_date"],
loan["due_date"],
loan["remaining_loan_time"],
loan["is_overdue"],
);
},
);
return NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [const TopAppBar(title: "Near Outstanding Loans")];
},
body: ListView(
children: List.generate(loans.length, (index) {
return LoanItem(loans.elementAt(index));
}),
),
);
} else {
return NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return [const TopAppBar(title: "Book Loans")];
},
body: const Center(
child: Text("the loan is currently empty"),
),
);
}
});
}
}
class TopAppBar extends StatefulWidget {
final String title;
const TopAppBar({super.key, required this.title});
@override
_TopAppBar createState() => _TopAppBar();
}
class _TopAppBar extends State<TopAppBar> {
String get title => widget.title;
bool showWidget = false;
@override
Widget build(BuildContext context) {
return SliverAppBar(
title: Text(title),
elevation: 10.0,
automaticallyImplyLeading: false,
expandedHeight: 50,
floating: true,
snap: true,
);
}
}
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