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
1e34e480
Commit
1e34e480
authored
Aug 13, 2024
by
Ilham Maulana
💻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: session management with splash screen
parent
7ed39de1
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
119 additions
and
68 deletions
+119
-68
kotlin-compiler-16411864663037035601.salive
...tlin/sessions/kotlin-compiler-16411864663037035601.salive
+0
-0
main.dart
lib/main.dart
+12
-20
auth_provider.dart
lib/src/providers/auth_provider.dart
+3
-2
form_screen.dart
lib/src/screens/form_screen.dart
+2
-2
list_screen.dart
lib/src/screens/list/list_screen.dart
+5
-3
login_form.dart
lib/src/widgets/forms/login_form.dart
+0
-7
sign_up_form.dart
lib/src/widgets/forms/sign_up_form.dart
+0
-8
home.dart
lib/src/widgets/home.dart
+5
-3
admin_loan_list.dart
lib/src/widgets/loans/admin_loan_list.dart
+5
-3
loan_list.dart
lib/src/widgets/loans/loan_list.dart
+5
-3
profile.dart
lib/src/widgets/profile.dart
+7
-5
splash_screen.dart
lib/src/widgets/splash_screen.dart
+63
-0
pubspec.lock
pubspec.lock
+12
-12
No files found.
android/.kotlin/sessions/kotlin-compiler-16411864663037035601.salive
deleted
100644 → 0
View file @
7ed39de1
lib/main.dart
View file @
1e34e480
import
'package:flutter/material.dart'
;
import
'package:flutter/gestures.dart'
;
import
'package:go_router/go_router.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:library_app/src/screens/list/list_screen.dart'
;
import
'package:library_app/src/screens/profile_edit_screen.dart'
;
import
'package:library_app/src/widgets/splash_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/list_screen.dart'
;
void
main
(
)
async
{
SharedPreferences
prefs
=
await
SharedPreferences
.
getInstance
();
final
isAuthenticated
=
prefs
.
getString
(
'access_token'
)
!=
null
;
runApp
(
isAuthenticated
?
const
LibraryApp
()
:
const
LoginScreen
());
void
main
(
)
{
runApp
(
const
LibraryApp
());
}
class
LibraryApp
extends
State
ful
Widget
{
class
LibraryApp
extends
State
less
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,19 +28,19 @@ class _LibraryApp extends State<LibraryApp> {
routes:
[
GoRoute
(
path:
'/'
,
builder:
(
context
,
state
)
=>
const
List
Screen
(),
builder:
(
context
,
state
)
=>
const
Splash
Screen
(),
),
GoRoute
(
path:
'/
sign-up
'
,
builder:
(
context
,
state
)
=>
const
SignUp
Screen
(),
path:
'/
home
'
,
builder:
(
context
,
state
)
=>
const
List
Screen
(),
),
GoRoute
(
path:
'/
reset-password
'
,
builder:
(
context
,
state
)
=>
const
ResetPassword
Screen
(),
path:
'/
login
'
,
builder:
(
context
,
state
)
=>
const
Login
Screen
(),
),
GoRoute
(
path:
'/
confirm-reset-password
'
,
builder:
(
context
,
state
)
=>
const
ConfirmResetPassword
Screen
(),
path:
'/
sign-up
'
,
builder:
(
context
,
state
)
=>
const
SignUp
Screen
(),
),
GoRoute
(
path:
"/change-password"
,
...
...
lib/src/providers/auth_provider.dart
View file @
1e34e480
...
...
@@ -99,7 +99,7 @@ class AuthProvider with ChangeNotifier {
await
storeAccessToken
(
token
);
setInvalidUsernameOrPassword
(
false
);
if
(
context
.
mounted
)
context
.
go
(
"/"
);
debugPrint
(
"Login successful
$token
"
);
}
else
if
(
response
.
statusCode
==
400
)
{
setInvalidUsernameOrPassword
(
true
);
...
...
@@ -116,7 +116,7 @@ class AuthProvider with ChangeNotifier {
}
}
Future
<
void
>
signOut
()
async
{
Future
<
void
>
signOut
(
BuildContext
context
)
async
{
final
token
=
await
getAccessToken
();
try
{
...
...
@@ -133,6 +133,7 @@ class AuthProvider with ChangeNotifier {
SharedPreferences
prefs
=
await
SharedPreferences
.
getInstance
();
prefs
.
remove
(
'access_token'
);
resetAllState
();
if
(
context
.
mounted
)
context
.
go
(
"/"
);
}
else
{
debugPrint
(
"Logout failed:
${response.statusCode}
${response.body}
"
);
}
...
...
lib/src/screens/form_screen.dart
View file @
1e34e480
...
...
@@ -86,7 +86,7 @@ class SignUpScreen extends StatelessWidget {
return
FormScreen
(
title:
title
,
backRoute:
"/"
,
backRoute:
"/
login
"
,
body:
const
SignUpForm
(),
);
}
...
...
@@ -116,7 +116,7 @@ class ResetPasswordScreen extends StatelessWidget {
return
FormScreen
(
title:
title
,
backRoute:
"/"
,
backRoute:
"/
login
"
,
body:
const
ResetPasswordForm
(),
);
}
...
...
lib/src/screens/list/list_screen.dart
View file @
1e34e480
...
...
@@ -15,9 +15,11 @@ class ListScreen extends StatefulWidget {
class
_ListScreen
extends
State
<
ListScreen
>
{
@override
void
initState
()
{
Future
.
delayed
(
Duration
.
zero
,
()
{
if
(
context
.
mounted
)
{
Provider
.
of
<
NavigationsProvider
>(
context
,
listen:
false
).
navigate
(
0
);
}
});
super
.
initState
();
}
...
...
lib/src/widgets/forms/login_form.dart
View file @
1e34e480
...
...
@@ -140,13 +140,6 @@ class _LoginForm extends State<LoginForm> {
onPressed:
()
=>
context
.
go
(
"/sign-up"
),
),
),
SizedBox
(
width:
double
.
infinity
,
child:
TextButton
(
child:
const
Text
(
"Forgot Password"
),
onPressed:
()
=>
context
.
go
(
"/reset-password"
),
),
),
],
),
],
...
...
lib/src/widgets/forms/sign_up_form.dart
View file @
1e34e480
import
'package:flutter/material.dart'
;
import
'package:flutter_svg/flutter_svg.dart'
;
import
'package:go_router/go_router.dart'
;
import
'package:library_app/src/widgets/ui/button_custom.dart'
;
import
'package:provider/provider.dart'
;
...
...
@@ -147,13 +146,6 @@ class _SignUpForm extends State<SignUpForm> {
child:
const
Text
(
"Submit"
),
),
),
SizedBox
(
width:
double
.
infinity
,
child:
TextButton
(
child:
const
Text
(
"Login"
),
onPressed:
()
=>
context
.
go
(
"/"
),
),
),
],
),
],
...
...
lib/src/widgets/home.dart
View file @
1e34e480
...
...
@@ -17,9 +17,11 @@ class _HomePage extends State<HomePage> {
@override
void
initState
()
{
super
.
initState
();
Future
.
delayed
(
Duration
.
zero
,
()
{
if
(
context
.
mounted
)
{
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
).
getUserDetail
();
}
});
}
@override
...
...
lib/src/widgets/loans/admin_loan_list.dart
View file @
1e34e480
...
...
@@ -27,9 +27,11 @@ class _AdminLoanList extends State<AdminLoanList> {
@override
void
initState
()
{
Future
.
delayed
(
Duration
.
zero
,
()
{
if
(
context
.
mounted
)
{
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
).
getLoans
(
type
);
}
});
super
.
initState
();
}
...
...
lib/src/widgets/loans/loan_list.dart
View file @
1e34e480
...
...
@@ -17,9 +17,11 @@ class LoanList extends StatefulWidget {
class
_LoanList
extends
State
<
LoanList
>
{
@override
void
initState
()
{
Future
.
delayed
(
Duration
.
zero
,
()
{
if
(
context
.
mounted
)
{
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
).
getMemberLoan
();
}
});
super
.
initState
();
}
...
...
lib/src/widgets/profile.dart
View file @
1e34e480
...
...
@@ -16,11 +16,13 @@ class _Profile extends State<Profile> {
@override
void
initState
()
{
super
.
initState
();
Future
.
delayed
(
Duration
.
zero
,
()
{
if
(
context
.
mounted
)
{
if
(
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
).
user
==
null
)
{
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
).
getUserDetail
();
}
}
});
}
@override
...
...
@@ -97,7 +99,7 @@ class _Profile extends State<Profile> {
OutlinedButton
(
child:
const
Text
(
"Log Out"
),
onPressed:
()
{
authProvider
.
signOut
();
authProvider
.
signOut
(
context
);
},
),
],
...
...
lib/src/widgets/splash_screen.dart
0 → 100644
View file @
1e34e480
import
"package:flutter/material.dart"
;
import
"package:go_router/go_router.dart"
;
import
"package:provider/provider.dart"
;
import
'package:flutter_svg/flutter_svg.dart'
;
import
"package:library_app/src/providers/auth_provider.dart"
;
class
SplashScreen
extends
StatefulWidget
{
const
SplashScreen
({
super
.
key
});
@override
State
<
SplashScreen
>
createState
()
=>
_SplashScreen
();
}
class
_SplashScreen
extends
State
<
SplashScreen
>
{
@override
void
initState
()
{
super
.
initState
();
isAutheticated
();
}
void
isAutheticated
()
async
{
final
token
=
await
Provider
.
of
<
AuthProvider
>(
context
,
listen:
false
)
.
getAccessToken
();
if
(
token
!=
null
)
{
Future
.
delayed
(
const
Duration
(
milliseconds:
1500
),
()
{
if
(
context
.
mounted
)
context
.
go
(
"/home"
);
});
}
else
{
Future
.
delayed
(
const
Duration
(
milliseconds:
1500
),
()
{
if
(
context
.
mounted
)
context
.
go
(
"/login"
);
});
}
}
@override
Widget
build
(
BuildContext
context
)
{
final
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
body:
Center
(
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
[
SvgPicture
.
asset
(
"assets/images/splash_image.svg"
,
semanticsLabel:
"Splash Screen"
,
height:
screenSize
.
height
*
0.3
,
),
const
SizedBox
(
height:
40.0
,
),
const
SizedBox
(
width:
30.0
,
height:
30.0
,
child:
CircularProgressIndicator
(),
),
],
)),
);
}
}
pubspec.lock
View file @
1e34e480
...
...
@@ -164,18 +164,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "
3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05
"
sha256: "
7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a
"
url: "https://pub.dev"
source: hosted
version: "10.0.
5
"
version: "10.0.
4
"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "
932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806
"
sha256: "
06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8
"
url: "https://pub.dev"
source: hosted
version: "3.0.
5
"
version: "3.0.
3
"
leak_tracker_testing:
dependency: transitive
description:
...
...
@@ -212,18 +212,18 @@ packages:
dependency: transitive
description:
name: material_color_utilities
sha256:
f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
sha256:
"0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
url: "https://pub.dev"
source: hosted
version: "0.
11.1
"
version: "0.
8.0
"
meta:
dependency: transitive
description:
name: meta
sha256:
bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
sha256:
"7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
version: "1.1
5
.0"
version: "1.1
2
.0"
nested:
dependency: transitive
description:
...
...
@@ -433,10 +433,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "
5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb
"
sha256: "
9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f
"
url: "https://pub.dev"
source: hosted
version: "0.7.
2
"
version: "0.7.
0
"
typed_data:
dependency: transitive
description:
...
...
@@ -481,10 +481,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256:
f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
sha256:
"3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
url: "https://pub.dev"
source: hosted
version: "14.2.
4
"
version: "14.2.
1
"
web:
dependency: transitive
description:
...
...
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