Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
library-app-flutter
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ilham Maulana
library-app-flutter
Commits
ff094e41
Commit
ff094e41
authored
Aug 01, 2024
by
Ilham Maulana
💻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: main screen for admin only
parent
53a5db26
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
136 additions
and
22 deletions
+136
-22
main.dart
lib/main.dart
+23
-8
auth_provider.dart
lib/src/providers/auth_provider.dart
+15
-5
admin_list_screen.dart
lib/src/screens/admin_list_screen.dart
+77
-0
home.dart
lib/src/widgets/home.dart
+20
-8
loan_list.dart
lib/src/widgets/loans/loan_list.dart
+1
-1
No files found.
lib/main.dart
View file @
ff094e41
import
'package:flutter/material.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:library_app/src/providers/book_provider.dart'
;
import
'package:library_app/src/screens/form_screen.dart'
;
import
'package:provider/provider.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:library_app/src/screens/admin_list_screen.dart'
;
import
'package:provider/provider.dart'
;
import
'package:library_app/src/providers/auth_provider.dart'
;
import
'package:library_app/src/providers/navigations_provider.dart'
;
import
'package:library_app/src/providers/book_provider.dart'
;
import
'package:library_app/src/screens/form_screen.dart'
;
import
'package:library_app/src/screens/list_screen.dart'
;
void
main
(
)
{
runApp
(
const
LibraryApp
());
}
class
LibraryApp
extends
State
less
Widget
{
class
LibraryApp
extends
State
ful
Widget
{
const
LibraryApp
({
super
.
key
});
@override
State
<
LibraryApp
>
createState
()
=>
_LibraryApp
();
}
class
_LibraryApp
extends
State
<
LibraryApp
>
{
@override
Widget
build
(
BuildContext
context
)
{
const
title
=
'Library App'
;
...
...
@@ -36,9 +44,16 @@ class LibraryApp extends StatelessWidget {
),
home:
Consumer
<
AuthProvider
>(
builder:
(
context
,
authProvider
,
child
)
{
return
authProvider
.
isLoggedIn
?
const
ListScreen
()
:
const
LoginScreen
();
final
user
=
authProvider
.
user
;
final
isAuthenticated
=
authProvider
.
isAuthenticated
;
if
(
user
!=
null
&&
user
.
isStaff
)
{
return
isAuthenticated
?
const
AdminListScreen
()
:
const
AdminLoginScreen
();
}
return
isAuthenticated
?
const
ListScreen
()
:
const
LoginScreen
();
},
),
scrollBehavior:
AdaptiveScrollBehavior
(),
...
...
lib/src/providers/auth_provider.dart
View file @
ff094e41
...
...
@@ -12,7 +12,7 @@ class AuthProvider with ChangeNotifier {
String
baseUrl
=
'http://localhost:8000/api/v1'
;
User
?
user
;
bool
is
LoggedIn
=
false
;
bool
is
Authenticated
=
false
;
bool
invalidUsernameOrPassword
=
false
;
List
<
dynamic
>?
memberLoans
;
...
...
@@ -31,6 +31,15 @@ class AuthProvider with ChangeNotifier {
return
await
storage
.
read
(
key:
'access_token'
);
}
Future
<
void
>
validateToken
()
async
{
String
?
token
=
await
getAccessToken
();
bool
isValid
=
token
!=
null
;
if
(
isValid
)
{
isAuthenticated
=
true
;
}
}
Future
<
void
>
signIn
(
String
username
,
String
password
)
async
{
try
{
final
response
=
await
http
.
post
(
...
...
@@ -45,7 +54,7 @@ class AuthProvider with ChangeNotifier {
final
token
=
await
getAccessToken
();
if
(
token
!=
null
)
{
isLoggedIn
=
true
;
validateToken
()
;
}
debugPrint
(
"Login successful
$token
"
);
...
...
@@ -78,7 +87,7 @@ class AuthProvider with ChangeNotifier {
final
token
=
await
getAccessToken
();
if
(
token
!=
null
)
{
isLoggedIn
=
true
;
validateToken
()
;
}
debugPrint
(
"Login successful
$token
"
);
...
...
@@ -111,7 +120,8 @@ class AuthProvider with ChangeNotifier {
if
(
response
.
statusCode
==
200
)
{
await
storage
.
delete
(
key:
'token'
);
isLoggedIn
=
false
;
isAuthenticated
=
false
;
user
=
null
;
}
else
{
debugPrint
(
"Logout failed:
${response.statusCode}
${response.body}
"
);
}
...
...
@@ -141,7 +151,7 @@ class AuthProvider with ChangeNotifier {
final
token
=
await
getAccessToken
();
if
(
token
!=
null
)
{
isLoggedIn
=
true
;
validateToken
()
;
}
debugPrint
(
response
.
body
);
...
...
lib/src/screens/admin_list_screen.dart
0 → 100644
View file @
ff094e41
import
'package:flutter/material.dart'
;
import
'package:provider/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/widgets/home.dart'
;
import
'package:library_app/src/widgets/loans/loan_list.dart'
;
import
'package:library_app/src/widgets/profile.dart'
;
class
AdminListScreen
extends
StatefulWidget
{
const
AdminListScreen
({
super
.
key
});
@override
State
<
AdminListScreen
>
createState
()
=>
_AdminListScreen
();
}
class
_AdminListScreen
extends
State
<
AdminListScreen
>
{
@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
Scaffold
(
bottomNavigationBar:
NavigationBar
(
onDestinationSelected:
(
int
index
)
{
navProvider
.
navigate
(
index
);
},
selectedIndex:
navProvider
.
currentPageIndex
,
destinations:
const
<
Widget
>[
NavigationDestination
(
icon:
Icon
(
Icons
.
home_outlined
),
label:
'Home'
,
tooltip:
'Home Page'
,
),
NavigationDestination
(
icon:
Icon
(
Icons
.
timer_outlined
),
label:
'Upcoming'
,
tooltip:
'Book List'
,
),
NavigationDestination
(
icon:
Icon
(
Icons
.
timer_off_rounded
),
label:
'Overdued'
,
tooltip:
'Loan List'
,
),
NavigationDestination
(
icon:
Icon
(
Icons
.
person_2_sharp
),
label:
'Profile'
,
tooltip:
'Profile'
,
),
],
),
body:
<
Widget
>[
// Home
const
HomePage
(),
// Books
LoanList
(
memberId:
authProvider
.
user
?.
accountId
??
0
,
),
// Loans
LoanList
(
memberId:
authProvider
.
user
?.
accountId
??
0
,
),
// Profile
const
Profile
(),
][
navProvider
.
currentPageIndex
],
);
},
);
}
}
lib/src/widgets/home.dart
View file @
ff094e41
...
...
@@ -27,8 +27,8 @@ class _HomePage extends State<HomePage> {
Widget
build
(
BuildContext
context
)
{
const
title
=
"Home"
;
return
Consumer
<
Navigations
Provider
>(
builder:
(
context
,
navProvider
,
child
)
{
return
Consumer
2
<
NavigationsProvider
,
Auth
Provider
>(
builder:
(
context
,
navProvider
,
authProvider
,
child
)
{
return
NestedScrollView
(
headerSliverBuilder:
(
BuildContext
context
,
bool
innerBoxIsScrolled
)
{
return
[
...
...
@@ -42,17 +42,29 @@ class _HomePage extends State<HomePage> {
child:
Text
(
"Shortcut"
),
),
Shortcut
(
icon:
Icons
.
book_rounded
,
title:
"Books"
,
subtitle:
"Discover many amazing books."
,
icon:
authProvider
.
user
!.
isStaff
?
Icons
.
timer_outlined
:
Icons
.
book_rounded
,
title:
authProvider
.
user
!.
isStaff
?
"Near Outstanding Loans"
:
"Books"
,
subtitle:
authProvider
.
user
!.
isStaff
?
"Discover near outstanding users loans."
:
"Discover many amazing books."
,
onTap:
()
{
navProvider
.
navigate
(
1
);
},
),
Shortcut
(
icon:
Icons
.
date_range_rounded
,
title:
"Book Loans"
,
subtitle:
"Manage your book loan very easy."
,
icon:
authProvider
.
user
!.
isStaff
?
Icons
.
timer_off_rounded
:
Icons
.
date_range_rounded
,
title:
authProvider
.
user
!.
isStaff
?
"Overdued Loans"
:
"Book Loans"
,
subtitle:
authProvider
.
user
!.
isStaff
?
"Discover Overdued users loans."
:
"Manage your book loan very easy."
,
onTap:
()
{
navProvider
.
navigate
(
2
);
},
...
...
lib/src/widgets/loans/loan_list.dart
View file @
ff094e41
...
...
@@ -54,7 +54,7 @@ class _LoanList extends State<LoanList> {
return
[
const
TopAppBar
(
title:
"Book Loans"
)];
},
body:
const
Center
(
child:
CircularProgressIndicator
(
),
child:
Text
(
"the loan is currently empty"
),
),
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment