134 lines
3.4 KiB
Dart
134 lines
3.4 KiB
Dart
import 'package:flutter/material.dart';
|
|
import '../widgets/custom_button.dart';
|
|
import '../widgets/custom_textfield.dart';
|
|
import '../services/tts_service.dart';
|
|
import '../services/auth_service.dart';
|
|
import '../utils/colors.dart';
|
|
import 'home_screen.dart';
|
|
import 'signup_screen.dart';
|
|
import 'forgot_password_screen.dart';
|
|
|
|
class LoginScreen extends StatelessWidget {
|
|
final TextEditingController emailController = TextEditingController();
|
|
final TextEditingController passwordController = TextEditingController();
|
|
|
|
final TTSService tts = TTSService();
|
|
final AuthService auth = AuthService();
|
|
|
|
LoginScreen({super.key});
|
|
|
|
// 🔐 LOGIN
|
|
void handleLogin(BuildContext context) {
|
|
bool success = auth.login(
|
|
emailController.text,
|
|
passwordController.text,
|
|
);
|
|
|
|
if (success) {
|
|
tts.speak("Login berhasil");
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => HomeScreen()),
|
|
);
|
|
} else {
|
|
tts.speak("Login gagal, periksa email dan password");
|
|
}
|
|
}
|
|
|
|
// 🔑 FORGOT PASSWORD
|
|
void handleForgotPassword(BuildContext context) {
|
|
tts.speak("Menu lupa password");
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => ForgotPasswordScreen()),
|
|
);
|
|
}
|
|
|
|
// 🆕 SIGN UP
|
|
void handleSignUp(BuildContext context) {
|
|
tts.speak("Menu pendaftaran akun");
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => SignUpScreen()),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
tts.speak("Silakan login");
|
|
|
|
return Scaffold(
|
|
backgroundColor: AppColors.background,
|
|
body: Padding(
|
|
padding: const EdgeInsets.all(20),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
// 🔷 TITLE
|
|
Text(
|
|
"Object Detector Assist",
|
|
style: TextStyle(
|
|
color: AppColors.text,
|
|
fontSize: 24,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
|
|
SizedBox(height: 40),
|
|
|
|
// 📧 EMAIL
|
|
CustomTextField(
|
|
label: "Email",
|
|
controller: emailController,
|
|
),
|
|
|
|
SizedBox(height: 20),
|
|
|
|
// 🔒 PASSWORD
|
|
CustomTextField(
|
|
label: "Password",
|
|
controller: passwordController,
|
|
obscure: true,
|
|
),
|
|
|
|
SizedBox(height: 30),
|
|
|
|
// 🔘 LOGIN BUTTON
|
|
CustomButton(
|
|
text: "Login",
|
|
onPressed: () => handleLogin(context),
|
|
),
|
|
|
|
SizedBox(height: 15),
|
|
|
|
// 🔹 FORGOT PASSWORD
|
|
Semantics(
|
|
button: true,
|
|
label: "Lupa password",
|
|
child: TextButton(
|
|
onPressed: () => handleForgotPassword(context),
|
|
child: Text(
|
|
"Forgot Password?",
|
|
style: TextStyle(color: Colors.blue),
|
|
),
|
|
),
|
|
),
|
|
|
|
// 🔹 SIGN UP
|
|
Semantics(
|
|
button: true,
|
|
label: "Daftar akun baru",
|
|
child: TextButton(
|
|
onPressed: () => handleSignUp(context),
|
|
child: Text(
|
|
"Sign Up",
|
|
style: TextStyle(color: Colors.yellow),
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
} |