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

fix: sifting to one login form for member or admin

parent cd365f6d
......@@ -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(),
......
......@@ -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();
}
}
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});
......
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(),
));
},
),
),
],
),
],
),
),
)
],
);
});
}
}
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