import 'package:flutter/material.dart'; // import '../../Login/login_screen.dart'; import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:intl/intl.dart'; import 'package:piring/Login/login_form.dart'; import 'package:fluttertoast/fluttertoast.dart'; class SignUpForm extends StatefulWidget { const SignUpForm({ Key? key, }) : super(key: key); @override State createState() => _SignUpFormState(); } class _SignUpFormState extends State { String selectedGender = 'Laki-Laki'; // Default jenis kelamin DateTime selectedDate = DateTime.now(); // Default tanggal lahir String? _validateNotEmpty(String? value) { if (value == null || value.isEmpty) { return 'Harus diisi'; } return null; // Data valid } TextEditingController usernameController = TextEditingController(); TextEditingController passwordController = TextEditingController(); TextEditingController jabatanController = TextEditingController(); TextEditingController namaController = TextEditingController(); TextEditingController tanggalLahirController = TextEditingController(); TextEditingController tinggiBadanController = TextEditingController(); TextEditingController beratBadanController = TextEditingController(); TextEditingController alamatController = TextEditingController(); TextEditingController kecamatanController = TextEditingController(); TextEditingController kabupatenController = TextEditingController(); TextEditingController provinsiController = TextEditingController(); TextEditingController jenisKelaminController = TextEditingController(); TextEditingController noTelpController = TextEditingController(); TextEditingController emailController = TextEditingController(); TextEditingController umurController = TextEditingController(); bool _obscurePassword = true; String clientId = "PKL2023"; String clientSecret = "PKLSERU"; String tokenUrl = "https://isipiringku.esolusindo.com/api/Token/token"; String accessToken = ""; 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'); } } void registerUser() async { final apiUrl = 'https://isipiringku.esolusindo.com/api/Register/Register'; final Map data = { 'username': usernameController.text, 'password': passwordController.text, 'jabatan': jabatanController.text, 'nama': namaController.text, 'tgl_lahir': tanggalLahirController.text, 'tinggi_badan': tinggiBadanController.text, 'berat_badan': beratBadanController.text, 'alamat': alamatController.text, 'kecamatan': kecamatanController.text, 'kabupaten': kabupatenController.text, 'provinsi': provinsiController.text, 'jekel': 'Perempuan', 'no_telp': noTelpController.text, 'email': emailController.text, 'umur': umurController.text, }; try { final response = await http.post( Uri.parse(apiUrl), body: json.encode(data), headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer $accessToken', // Menggunakan token OAuth2 }, ); if (response.statusCode == 200) { // Registrasi berhasil, lakukan sesuatu di sini print('Registrasi berhasil'); Fluttertoast.showToast( msg: 'Pendaftaran Berhasil', backgroundColor: Colors.green, toastLength: Toast.LENGTH_LONG); Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => LoginForm(), )); print(response.body); } else { // Registrasi gagal, tampilkan pesan kesalahan atau lakukan sesuatu yang sesuai print('Registrasi gagal. Status code: ${response.statusCode}'); } } catch (error) { // Terjadi kesalahan dalam proses registrasi print('Terjadi kesalahan: $error'); } } @override void initState() { super.initState(); getToken(); } @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, body: Stack( fit: StackFit.expand, children: [ Container( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage('assets/images/resa.png'), fit: BoxFit.cover, ), ), ), SingleChildScrollView( child: Padding( padding: EdgeInsets.all(20.0), child: Column( children: [ SizedBox(height: 80.0), Text( 'REGISTER', style: TextStyle( fontSize: 24, fontFamily: 'Calibri', fontWeight: FontWeight.bold, color: Colors.black, ), ), SizedBox(height: 30.0), Row( children: [ Expanded( child: TextFormField( controller: namaController, decoration: InputDecoration(hintText: 'Nama'), ), ), Expanded( child: TextFormField( controller: usernameController, decoration: InputDecoration(hintText: 'Username'), ), ) ], ), SizedBox(height: 10), Column( children: [ TextFormField( controller: passwordController, decoration: InputDecoration( hintText: 'Password', suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), obscureText: _obscurePassword, // Ini adalah kunci untuk mengubah tampilan teks ), ], ), SizedBox(height: 10), Row( children: [ Expanded( child: TextFormField( controller: emailController, decoration: InputDecoration(hintText: 'Email'), ), ), SizedBox(width: 10), Expanded( child: TextFormField( keyboardType: TextInputType.number, controller: noTelpController, decoration: InputDecoration(hintText: 'No Telepon'), ), ), ], ), SizedBox( height: 10, ), Row( children: [ Expanded( child: TextFormField( keyboardType: TextInputType.number, controller: tinggiBadanController, decoration: InputDecoration(hintText: 'Tinggi (cm)'), ), ), SizedBox(width: 10), Expanded( child: TextFormField( keyboardType: TextInputType.number, controller: beratBadanController, decoration: InputDecoration(hintText: 'Berat (kg)'), ), ), ], ), SizedBox(height: 10), Row( children: [ Expanded( child: DropdownButtonFormField( decoration: InputDecoration(hintText: 'Jenis Kelamin'), value: selectedGender, onChanged: (value) { // Tambahkan kode untuk menangani perubahan jenis kelamin setState(() { selectedGender = value!; }); }, items: ['Laki-Laki', 'Perempuan'].map((String value) { return DropdownMenuItem( value: value, child: Text(value), ); }).toList(), ), ), SizedBox(width: 10), Expanded( child: TextFormField( controller: tanggalLahirController, onTap: () async { // Tambahkan kode untuk menampilkan date picker final DateTime? pickedDate = await showDatePicker( context: context, initialDate: selectedDate, firstDate: DateTime(1900), lastDate: DateTime.now(), ); if (pickedDate != null && pickedDate != selectedDate) { setState(() { selectedDate = pickedDate; tanggalLahirController.text = DateFormat('yyyy-MM-dd') .format(selectedDate); }); } }, decoration: InputDecoration(hintText: 'Tanggal Lahir'), ), ), ], ), SizedBox(height: 10), Row( children: [ Expanded( child: TextFormField( controller: jabatanController, decoration: InputDecoration(hintText: 'Jabatan'), ), ), SizedBox(width: 10), Expanded( child: TextFormField( controller: umurController, keyboardType: TextInputType.number, decoration: InputDecoration(hintText: 'Umur'), ), ), ], ), SizedBox(height: 10), Row( children: [ Expanded( child: TextFormField( controller: alamatController, decoration: InputDecoration(hintText: 'Alamat'), ), ), SizedBox(width: 10), Expanded( child: TextFormField( controller: kecamatanController, decoration: InputDecoration(hintText: 'Kecamatan'), ), ), ], ), SizedBox(height: 10), Row( children: [ Expanded( child: TextFormField( controller: kabupatenController, decoration: InputDecoration(hintText: 'Kabupaten'), ), ), SizedBox(width: 10), Expanded( child: TextFormField( controller: provinsiController, decoration: InputDecoration(hintText: 'Provinsi'), ), ), ], ), SizedBox( height: 5, ), Center( child: Container( child: ElevatedButton( onPressed: () { registerUser(); }, child: Text('Simpan'), ), )), SizedBox(height: 10.0), Padding( padding: const EdgeInsets.only(bottom: 5.0), child: TextButton( onPressed: () { Navigator.of(context).pushReplacement( PageRouteBuilder( pageBuilder: (context, animation, secondaryAnimation) => LoginForm(), transitionsBuilder: (context, animation, secondaryAnimation, child) { const begin = Offset(1.0, 0.0); const end = Offset.zero; const curve = Curves.easeInOut; var tween = Tween(begin: begin, end: end) .chain(CurveTween(curve: curve)); var offsetAnimation = animation.drive(tween); return SlideTransition( position: offsetAnimation, child: child); }, ), ); }, child: Text( 'Sudah punya akun? Login di sini', style: TextStyle( decoration: TextDecoration.underline, color: Colors.black, ), ), ), ), ], ), ), ), ], ), ); } }