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
cda1cc72
Commit
cda1cc72
authored
Aug 01, 2024
by
Ilham Maulana
💻
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: sifting to one login form for member or admin
parent
cd365f6d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
6 additions
and
232 deletions
+6
-232
main.dart
lib/main.dart
+5
-7
auth_provider.dart
lib/src/providers/auth_provider.dart
+1
-46
form_screen.dart
lib/src/screens/form_screen.dart
+0
-24
admin_login_form.dart
lib/src/widgets/forms/admin_login_form.dart
+0
-155
No files found.
lib/main.dart
View file @
cda1cc72
...
...
@@ -47,13 +47,11 @@ class _LibraryApp extends State<LibraryApp> {
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
();
return
isAuthenticated
?
user
!=
null
&&
user
.
isStaff
?
const
AdminListScreen
()
:
const
ListScreen
()
:
const
LoginScreen
();
},
),
scrollBehavior:
AdaptiveScrollBehavior
(),
...
...
lib/src/providers/auth_provider.dart
View file @
cda1cc72
...
...
@@ -47,41 +47,7 @@ class AuthProvider with ChangeNotifier {
Future
<
void
>
signIn
(
String
username
,
String
password
)
async
{
try
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$baseUrl
/members/auth/login'
),
body:
jsonEncode
({
'username'
:
username
,
'password'
:
password
}),
headers:
{
'Content-Type'
:
'application/json'
},
);
if
(
response
.
statusCode
==
200
)
{
final
data
=
jsonDecode
(
response
.
body
);
await
storeAccessToken
(
Token
.
fromJson
(
data
)!.
key
);
final
token
=
await
getAccessToken
();
if
(
token
!=
null
)
{
validateToken
();
}
invalidUsernameOrPassword
=
false
;
debugPrint
(
"Login successful
$token
"
);
}
else
if
(
response
.
statusCode
==
401
)
{
invalidUsernameOrPassword
=
true
;
debugPrint
(
"Login failed:
${response.statusCode}
${response.body}
"
);
}
else
{
final
code
=
response
.
statusCode
;
debugPrint
(
"Login failed
$code
"
);
}
notifyListeners
();
}
catch
(
error
)
{
debugPrint
(
"Login failed
$error
"
);
}
}
Future
<
void
>
signInAsAdmin
(
String
username
,
String
password
)
async
{
try
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$baseUrl
/librarians/auth/login'
),
Uri
.
parse
(
'
$baseUrl
/auth/login'
),
body:
jsonEncode
({
'username'
:
username
,
'password'
:
password
}),
headers:
{
'Content-Type'
:
'application/json'
},
);
...
...
@@ -415,15 +381,4 @@ class AuthProvider with ChangeNotifier {
}
}
}
bool
onAdminLogin
=
false
;
void
setAdminLoginOn
()
{
onAdminLogin
=
true
;
notifyListeners
();
}
void
setAdminLoginOff
()
{
onAdminLogin
=
false
;
notifyListeners
();
}
}
lib/src/screens/form_screen.dart
View file @
cda1cc72
import
'package:flutter/material.dart'
;
import
'package:library_app/src/providers/auth_provider.dart'
;
import
'package:library_app/src/widgets/forms/admin_login_form.dart'
;
import
'package:library_app/src/widgets/forms/login_form.dart'
;
import
'package:library_app/src/widgets/forms/profile_edit_form.dart'
;
...
...
@@ -55,34 +54,11 @@ class LoginScreen extends StatelessWidget {
return
FormScreen
(
withBackButton:
false
,
title:
title
,
action:
[
IconButton
(
onPressed:
()
{
Navigator
.
of
(
context
).
push
(
MaterialPageRoute
(
builder:
(
context
)
=>
const
AdminLoginScreen
(),
));
},
icon:
const
Icon
(
Icons
.
admin_panel_settings_rounded
))
],
body:
const
LoginForm
(),
);
}
}
class
AdminLoginScreen
extends
StatelessWidget
{
const
AdminLoginScreen
({
super
.
key
});
@override
Widget
build
(
BuildContext
context
)
{
String
title
=
"Admin Login"
;
return
FormScreen
(
title:
title
,
body:
const
AdminLoginForm
(),
);
}
}
class
SignUpScreen
extends
StatelessWidget
{
const
SignUpScreen
({
super
.
key
});
...
...
lib/src/widgets/forms/admin_login_form.dart
deleted
100644 → 0
View file @
cd365f6d
import
'package:flutter/material.dart'
;
import
'package:library_app/src/providers/auth_provider.dart'
;
import
'package:library_app/src/screens/form_screen.dart'
;
import
'package:provider/provider.dart'
;
class
AdminLoginForm
extends
StatefulWidget
{
const
AdminLoginForm
({
super
.
key
});
@override
State
<
AdminLoginForm
>
createState
()
=>
_AdminLoginForm
();
}
class
_AdminLoginForm
extends
State
<
AdminLoginForm
>
{
final
GlobalKey
<
FormState
>
_formKey
=
GlobalKey
<
FormState
>();
final
usernameController
=
TextEditingController
();
final
passwordController
=
TextEditingController
();
bool
passwordVisible
=
false
;
@override
void
initState
()
{
super
.
initState
();
passwordVisible
=
true
;
}
@override
void
dispose
()
{
usernameController
.
dispose
();
passwordController
.
dispose
();
super
.
dispose
();
}
@override
Widget
build
(
BuildContext
context
)
{
const
String
formText
=
"Login As Admin"
;
return
Consumer
<
AuthProvider
>(
builder:
(
context
,
authProvider
,
child
)
{
final
isInvalid
=
authProvider
.
invalidUsernameOrPassword
;
return
Column
(
children:
[
const
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
20.0
,
vertical:
10.0
),
child:
Icon
(
Icons
.
admin_panel_settings_rounded
,
size:
160.0
,
),
),
const
Text
(
formText
,
style:
TextStyle
(
fontSize:
18
,
fontWeight:
FontWeight
.
bold
),
),
Container
(
padding:
const
EdgeInsets
.
symmetric
(
vertical:
20
,
horizontal:
20.0
),
child:
Form
(
key:
_formKey
,
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
center
,
children:
<
Widget
>[
TextFormField
(
controller:
usernameController
,
decoration:
const
InputDecoration
(
hintText:
"Enter your Username"
,
labelText:
"Username"
,
suffixIcon:
Icon
(
Icons
.
supervised_user_circle
),
),
validator:
(
String
?
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
"Please enter your username"
;
}
else
{
return
null
;
}
},
),
TextFormField
(
controller:
passwordController
,
obscureText:
passwordVisible
,
decoration:
InputDecoration
(
hintText:
"Enter your Password"
,
labelText:
"Password"
,
suffixIcon:
IconButton
(
icon:
Icon
(
passwordVisible
?
Icons
.
visibility
:
Icons
.
visibility_off
),
onPressed:
()
{
setState
(
()
{
passwordVisible
=
!
passwordVisible
;
},
);
},
),
),
validator:
(
String
?
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
"Please enter your password"
;
}
else
{
return
null
;
}
},
keyboardType:
TextInputType
.
visiblePassword
,
),
Visibility
(
visible:
isInvalid
,
child:
Container
(
decoration:
BoxDecoration
(
borderRadius:
BorderRadius
.
circular
(
10
),
color:
Theme
.
of
(
context
).
highlightColor
,
),
margin:
const
EdgeInsets
.
symmetric
(
vertical:
20.0
),
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
10.0
,
vertical:
8.0
),
child:
const
Text
(
"Invalid username or password"
),
),
),
const
SizedBox
(
height:
20.0
,
),
Column
(
children:
[
SizedBox
(
width:
double
.
infinity
,
child:
FilledButton
(
onPressed:
()
{
if
(
_formKey
.
currentState
!.
validate
())
{}
authProvider
.
signInAsAdmin
(
usernameController
.
text
,
passwordController
.
text
,
);
},
child:
const
Text
(
"Submit"
),
),
),
SizedBox
(
width:
double
.
infinity
,
child:
TextButton
(
child:
const
Text
(
"Forgot Password"
),
onPressed:
()
{
Navigator
.
of
(
context
).
push
(
MaterialPageRoute
(
builder:
(
context
)
=>
const
ResetPasswordScreen
(),
));
},
),
),
],
),
],
),
),
)
],
);
});
}
}
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