import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:piring_baru/Signup/signup_screen.dart'; import 'package:piring_baru/components/already_have_an_account_acheck.dart'; import 'package:piring_baru/components/constants.dart'; import 'package:piring_baru/dashboard/dashboard.dart'; import 'package:piring_baru/lupaPassword/lupaPassword.dart'; import 'package:piring_baru/model/user.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; class LupaAutentikasi extends StatefulWidget { const LupaAutentikasi({ Key? key, }) : super(key: key); @override State createState() => _LupaAutentikasiState(); } class _LupaAutentikasiState extends State { final TextEditingController _usernameController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); String clientId = "PKL2023"; String clientSecret = "PKLSERU"; String tokenUrl = "https://isipiringku.esolusindo.com/api/Token/token"; String accessToken = ""; late UserData userData; Future getToken() async { try { var response = await http.post( Uri.parse(tokenUrl), headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: { 'grant_type': 'client_credentials', 'client_id': clientId, 'client_secret': clientSecret, }, ); if (response.statusCode == 200) { Map tokenData = jsonDecode(response.body); accessToken = tokenData['access_token']; print('Token Akses: $accessToken'); } else { print('Gagal mendapatkan token: ${response.statusCode}'); } } catch (e) { print('Gagal mendapatkan token: $e'); } } Future _login() async { final String username = _usernameController.text; final String password = _passwordController.text; await getToken(); // Memanggil fungsi getToken untuk mendapatkan token OAuth2 // Membuat request body final Map data = { "username": username, "password": password, }; // Mengirim permintaan HTTP POST ke API dengan menyertakan token final response = await http.post( Uri.parse('https://isipiringku.esolusindo.com/api/Login/Login'), headers: { 'Authorization': 'Bearer $accessToken', // Menyertakan token dalam header }, body: data, ); if (response.statusCode == 200) { final responseData = json.decode(response.body); // Simpan data pengguna ke SharedPreferences print(responseData); userData = UserData.fromJson(responseData['response']); final prefs = await SharedPreferences.getInstance(); prefs.setString('access_token', accessToken); // Simpan data pengguna lainnya jika diperlukan prefs.setString('user_data', json.encode(userData.toJson())); Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => Dashboard(), )); } else { final responseData = json.decode(response.body); if (responseData['response'] != null) { final errorMessage = 'username atau password salah'; Fluttertoast.showToast( msg: errorMessage, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, backgroundColor: Colors.red, textColor: Colors.white, ); } else { print('Gagal masuk: ${response.statusCode}'); print('Pesan kesalahan: ${response.body}'); } } } @override void initState() { super.initState(); // Ambil token saat halaman login dimuat getToken(); // Periksa apakah token akses sudah ada checkUserSession(); } Future checkUserSession() async { final prefs = await SharedPreferences.getInstance(); final savedAccessToken = prefs.getString('access_token'); if (savedAccessToken != null) { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => Dashboard()), ); // Token akses sudah ada, mungkin pengguna sudah masuk // Anda dapat memeriksa validitas token di sini // Misalnya, jika token kedaluwarsa, Anda dapat mengarahkan pengguna untuk logout // atau memperbarui token. } } @override Widget build(BuildContext context) { return Form( child: Column( children: [ TextFormField( controller: _usernameController, keyboardType: TextInputType.emailAddress, textInputAction: TextInputAction.next, cursorColor: kPrimaryColor, decoration: InputDecoration( hintText: "Username", prefixIcon: Padding( padding: const EdgeInsets.all(defaultPadding), child: Icon(Icons.person), ), ), ), Padding( padding: const EdgeInsets.symmetric(vertical: defaultPadding), child: TextFormField( controller: _passwordController, textInputAction: TextInputAction.done, obscureText: true, cursorColor: kPrimaryColor, decoration: InputDecoration( hintText: "Password", prefixIcon: Padding( padding: const EdgeInsets.all(defaultPadding), child: Icon(Icons.lock), ), ), ), ), const SizedBox(height: defaultPadding), ElevatedButton( onPressed: () { // Navigator.pushReplacement( // context, // MaterialPageRoute( // builder: (context) => (), // )); }, child: Text('Lupa Password')), const SizedBox(height: defaultPadding), Hero( tag: "login_btn", child: ElevatedButton( onPressed: _login, child: Text( "Login".toUpperCase(), ), ), ), const SizedBox(height: defaultPadding), AlreadyHaveAnAccountCheck( press: () { Navigator.push( context, MaterialPageRoute( builder: (context) { return SignUpScreen(); }, ), ); }, ), ], ), ); } }