// ignore_for_file: use_build_context_synchronously import 'package:flutter/material.dart'; import '../../../product/shared/shared_snack_bar.dart'; import '../../../product/constant/icon/icon_constants.dart'; import '../../../product/services/api_services.dart'; import '../../../bloc/settings_bloc.dart'; import '../../../product/shared/shared_input_decoration.dart'; import '../../../product/extention/context_extention.dart'; import '../../../product/services/language_services.dart'; import 'profile_model.dart'; changeUserInfomation( BuildContext context, User user, SettingsBloc settingsBloc) { final formKey = GlobalKey(); String username = user.name ?? ""; String email = user.email ?? ""; String tel = user.phone ?? ""; String address = user.address ?? ""; bool isChange = false; APIServices apiServices = APIServices(); showModalBottomSheet( isScrollControlled: true, useSafeArea: true, context: context, builder: (modalBottomSheetContext) { return StreamBuilder( stream: settingsBloc.streamIsChangeProfileInfomation, initialData: isChange, builder: (context, isChangeSnapshot) { return Scaffold( appBar: AppBar( title: Text(appLocalization(context).change_profile_title), centerTitle: true, actions: [ isChangeSnapshot.data ?? isChange ? IconButton( onPressed: () async { if (formKey.currentState!.validate()) { formKey.currentState!.save(); String latitude = user.latitude ?? ""; String longitude = user.longitude ?? ""; Map body = { "name": username, "email": email, "phone": tel, "address": address, "latitude": latitude, "longitude": longitude }; int statusCode = await apiServices.updateUserProfile(body); if (statusCode == 200) { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_profile_success, Colors.green, Colors.white); } else { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_profile_failed, Colors.redAccent, Colors.white); } Navigator.pop(modalBottomSheetContext); } }, icon: IconConstants.instance.getMaterialIcon(Icons.check), ) : const SizedBox.shrink() ], ), body: SingleChildScrollView( child: Form( key: formKey, child: Padding( padding: context.paddingLow, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( appLocalization(context).change_profile_username, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: username, textInputAction: TextInputAction.next, validator: (usernameValue) { if (usernameValue == "null" || usernameValue!.isEmpty) { return appLocalization(modalBottomSheetContext) .login_account_not_empty; } return null; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, onSaved: (newUsername) { username = newUsername!; }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_username_hint), ), ), Text( appLocalization(context).change_profile_email, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: email, textInputAction: TextInputAction.next, validator: (emailValue) { if (emailValue == "null" || emailValue!.isEmpty) { return appLocalization(modalBottomSheetContext) .change_profile_email_not_empty; } return null; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, onSaved: (newEmail) { email = newEmail!; }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_email_hint), ), ), Text( appLocalization(context).change_profile_tel, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: tel, textInputAction: TextInputAction.next, keyboardType: TextInputType.phone, validator: (telValue) { if (telValue == "null" || telValue!.isEmpty) { return appLocalization(modalBottomSheetContext) .change_profile_tel_not_empty; } return null; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, onSaved: (newTel) { tel = newTel!; }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_tel_hint), ), ), Text( appLocalization(context).change_profile_address, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: address, textInputAction: TextInputAction.done, onSaved: (newAddress) { address = newAddress!; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_address_hint), ), ), SizedBox(height: context.mediumValue), isChangeSnapshot.data ?? isChange ? Center( child: TextButton( onPressed: () async { if (formKey.currentState!.validate()) { formKey.currentState!.save(); String latitude = user.latitude ?? ""; String longitude = user.longitude ?? ""; Map body = { "name": username, "email": email, "phone": tel, "address": address, "latitude": latitude, "longitude": longitude }; int statusCode = await apiServices .updateUserProfile(body); if (statusCode == 200) { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_profile_success, Colors.green, Colors.white); } else { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_profile_failed, Colors.redAccent, Colors.white); } Navigator.pop(modalBottomSheetContext); } }, style: const ButtonStyle( backgroundColor: WidgetStatePropertyAll(Colors.blue), foregroundColor: WidgetStatePropertyAll(Colors.white), ), child: Text(appLocalization(context) .update_button_content), ), ) : const SizedBox.shrink(), ], ), ), ), ), ); }, ); }, ); } changeUserPassword(BuildContext context, SettingsBloc settingsBloc) { final formKey = GlobalKey(); String oldPass = ""; String newPass = ""; APIServices apiServices = APIServices(); bool isChange = false; showModalBottomSheet( isScrollControlled: true, useSafeArea: true, context: context, builder: (modalBottomSheetContext) { return StreamBuilder( stream: settingsBloc.streamIsChangeProfileInfomation, initialData: isChange, builder: (context, isChangeSnapshot) { return Scaffold( appBar: AppBar( title: Text(appLocalization(context).change_profile_title), centerTitle: true, actions: [ isChangeSnapshot.data ?? isChange ? IconButton( onPressed: () async { if (formKey.currentState!.validate()) { formKey.currentState!.save(); Map body = { "password_old": oldPass, "password_new": newPass, }; int statusCode = await apiServices.updateUserPassword(body); if (statusCode == 200) { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_password_success, Colors.green, Colors.white); } else { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_password_failed, Colors.redAccent, Colors.white); } Navigator.pop(modalBottomSheetContext); } }, icon: IconConstants.instance.getMaterialIcon(Icons.check), ) : const SizedBox.shrink() ], ), body: SingleChildScrollView( child: Form( key: formKey, child: Padding( padding: context.paddingLow, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( appLocalization(context).change_profile_old_pass, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: oldPass, textInputAction: TextInputAction.next, validator: (oldPassValue) { if (oldPassValue == "null" || oldPassValue!.isEmpty) { return appLocalization(modalBottomSheetContext) .change_profile_old_pass_not_empty; } return null; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, onSaved: (newOldPass) { oldPass = newOldPass!; }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_old_pass_hint), ), ), Text( appLocalization(context).change_profile_new_pass, style: context.titleMediumTextStyle, ), Padding( padding: context.paddingLowVertical, child: TextFormField( initialValue: newPass, textInputAction: TextInputAction.done, validator: (newPassValue) { if (newPassValue == "null" || newPassValue!.isEmpty) { return appLocalization(modalBottomSheetContext) .change_profile_new_pass_not_empty; } return null; }, onChanged: (value) { isChange = true; settingsBloc.sinkIsChangeProfileInfomation .add(isChange); }, onSaved: (newnewPass) { newPass = newnewPass!; }, decoration: borderRadiusTopLeftAndBottomRight( modalBottomSheetContext, appLocalization(modalBottomSheetContext) .change_profile_new_pass_hint), ), ), SizedBox(height: context.mediumValue), isChangeSnapshot.data ?? isChange ? Center( child: TextButton( onPressed: () async { if (formKey.currentState!.validate()) { formKey.currentState!.save(); Map body = { "password_old": oldPass, "password_new": newPass, }; int statusCode = await apiServices .updateUserPassword(body); if (statusCode == 200) { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_password_success, Colors.green, Colors.white); } else { showNoIconTopSnackBar( modalBottomSheetContext, appLocalization(context) .notification_update_password_failed, Colors.redAccent, Colors.white); } Navigator.pop(modalBottomSheetContext); } }, style: const ButtonStyle( backgroundColor: WidgetStatePropertyAll(Colors.blue), foregroundColor: WidgetStatePropertyAll(Colors.white), ), child: Text(appLocalization(context) .update_button_content), ), ) : const SizedBox.shrink() ], ), ), ), ), ); }, ); }, ); }