import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import '../../product/constant/app/app_constants.dart'; import '../../product/shared/shared_loading_animation.dart'; import '../../product/shared/shared_snack_bar.dart'; import 'profile/profile_screen.dart'; import '../../product/constant/icon/icon_constants.dart'; import '../../product/extension/context_extension.dart'; import '../../product/services/api_services.dart'; import 'profile/profile_model.dart'; import '../../bloc/settings_bloc.dart'; import '../../product/base/bloc/base_bloc.dart'; import '../../product/services/language_services.dart'; class SettingsScreen extends StatefulWidget { const SettingsScreen({super.key}); @override State createState() => _SettingsScreenState(); } class _SettingsScreenState extends State { late SettingsBloc settingsBloc; User user = User(); APIServices apiServices = APIServices(); @override void initState() { super.initState(); settingsBloc = BlocProvider.of(context); // getUserProfile(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(appLocalization(context).profile_page_title), centerTitle: true, ), body: StreamBuilder( stream: settingsBloc.streamUserProfile, // initialData: user, builder: (context, userSnapshot) { if (userSnapshot.data == null) { settingsBloc.getUserProfile(context); return const SharedLoadingAnimation(); } else { return Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ CircleAvatar( backgroundColor: Theme.of(context).focusColor, radius: 70, child: CircleAvatar( backgroundColor: Theme.of(context).highlightColor, radius: 60, child: CircleAvatar( radius: 50, child: Text( getAvatarContent(userSnapshot.data?.username ?? ""), style: context.dynamicResponsiveSize(36), ), ), ), ), SizedBox(height: context.lowValue), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( userSnapshot.data?.name ?? "User Name", style: context.h2, ) ], ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [Text(userSnapshot.data?.email ?? "Email")], ), SizedBox(height: context.mediumValue), cardContent( Icons.account_circle_rounded, appLocalization(context).profile_change_info, userSnapshot.data ?? user), SizedBox(height: context.lowValue), cardContent( Icons.lock_outline, appLocalization(context).profile_change_pass, userSnapshot.data ?? user), SizedBox(height: context.lowValue), cardContent( Icons.settings_outlined, appLocalization(context).profile_setting, userSnapshot.data ?? user), SizedBox(height: context.lowValue), cardContent( Icons.logout_outlined, appLocalization(context).log_out, userSnapshot.data ?? user), ], ); } }, ), ); } cardContent(IconData icon, String content, User user) { return GestureDetector( onTap: () async { if (icon == Icons.account_circle_rounded) { changeUserInfomation(context, user, settingsBloc); } else if (icon == Icons.lock_outline) { changeUserPassword(context, settingsBloc); } else if (icon == Icons.settings_outlined) { context.push(ApplicationConstants.DEVICE_NOTIFICATIONS_SETTINGS); } else { await apiServices.logOut(context); } }, child: Card( color: Theme.of(context).colorScheme.onInverseSurface, margin: const EdgeInsets.only(left: 35, right: 35, bottom: 10), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)), child: ListTile( leading: IconConstants.instance.getMaterialIcon(icon), title: Text( content, style: context.responsiveBodyMediumWithBold, ), trailing: const Icon( Icons.arrow_forward_ios_outlined, ), ), ), ); } // void getUserProfile() async { // try { // user = await apiServices.getUserDetail(); // settingsBloc.sinkUserProfile.add(user); // } catch (e) { // if (!mounted) return; // showErrorTopSnackBarCustom( // context, e.toString()); // } // } String getAvatarContent(String username) { String name = ""; if (username.isNotEmpty) { name = username[0].toUpperCase(); } return name; } }