MIF_E31222381/AdmindukPuger_mobile-master/lib/screen/setting.dart

238 lines
7.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:adminduk_puger/cubit/Auth/Auth_cubit.dart';
import 'package:adminduk_puger/theme.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:dio/dio.dart';
import 'package:adminduk_puger/widget/bottom_nav.dart';
class SettingsPage extends StatefulWidget {
@override
_SettingsPageState createState() => _SettingsPageState();
}
class _SettingsPageState extends State<SettingsPage> {
final int _currentIndex = 2;
final List<String> _routes = ['/home', '/submission', '/setting'];
String? name;
String? email;
String? phone;
String? address;
@override
void initState() {
super.initState();
_loadUserData();
}
void _onTap(BuildContext context, int index) {
Navigator.pushReplacementNamed(context, _routes[index]);
}
Future<void> _loadUserData() async {
// Ambil token menggunakan authcubit
final token = await context.read<AuthCubit>().getToken();
if (token != null) {
try {
// Fetch user data using the token
Dio dio = Dio();
Response response = await dio.get(
"https://admindukpuger.punyapadias.my.id/api/user",
options: Options(headers: {"Authorization": "Bearer $token"}),
);
if (response.statusCode == 200) {
setState(() {
name = response.data['name'];
email = response.data['email'];
phone = response.data['phone'] ?? 'Not Available';
});
} else {
print('Failed to fetch user data');
}
} catch (e) {
print("Error fetching user data: $e");
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
Container(
height: 150,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomCenter,
colors: [putih, biru],
),
borderRadius: const BorderRadius.only(
bottomLeft: Radius.circular(34),
bottomRight: Radius.circular(34),
),
),
child: Column(
children: [
const SizedBox(height: 30, width: double.infinity),
const Text(
"Pengaturan",
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
),
const SizedBox(height: 15),
],
),
),
// Positioned Card
Positioned(
top: 100, // Adjust top position as needed
left: 16,
right: 16,
child: Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
elevation: 2,
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 16,
horizontal: 100,
),
child: Column(
children: [
CircleAvatar(
radius: 40,
backgroundColor: dongker,
child: const Icon(
Icons.person,
size: 40,
color: Colors.white,
),
),
const SizedBox(height: 8),
Text(
name ?? 'Loading...',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
),
),
],
),
),
),
),
// Main content below the Card
SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(height: 250),
Card(
color: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
elevation: 2,
child: Padding(
padding: const EdgeInsets.symmetric(
vertical: 12,
horizontal: 16,
),
child: Column(
children: [
Row(
children: [
Icon(Icons.phone, color: dongker, size: 30),
SizedBox(width: 12),
Text(
phone ?? 'Kosong',
style: TextStyle(fontSize: 20),
),
],
),
const SizedBox(height: 10),
Row(
children: [
Icon(Icons.email, color: dongker, size: 30),
SizedBox(width: 12),
Text(
email ?? 'Silahkan Logout & Login Ulang',
style: TextStyle(fontSize: 20),
),
],
),
],
),
),
),
const SizedBox(height: 20),
Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
elevation: 2,
child: Column(
children: [
ListTile(
contentPadding: EdgeInsets.symmetric(
vertical: 12,
horizontal: 16,
),
title: Text(
"Pengaturan Akun",
style: GoogleFonts.poppins(fontSize: 17),
),
trailing: const Icon(Icons.arrow_forward_ios),
onTap: () {
Navigator.pushNamed(context, '/profile');
},
),
],
),
),
const SizedBox(height: 24),
ElevatedButton(
onPressed: () async {
Navigator.of(context).pushReplacementNamed('/splash');
},
style: ElevatedButton.styleFrom(
backgroundColor: dongker,
padding: const EdgeInsets.symmetric(
horizontal: 32,
vertical: 12,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: TextButton(
onPressed: () async {
context.read<AuthCubit>().logout();
Navigator.of(context).pushReplacementNamed('/splash');
},
child: const Text(
"LOG OUT",
style: TextStyle(color: Colors.white, fontSize: 16),
),
),
),
],
),
),
),
],
),
bottomNavigationBar: BottomNav(
currentIndex: _currentIndex,
onTap: (index) => _onTap(context, index),
),
);
}
}