Feat: done features change password and change number
This commit is contained in:
parent
d9e479d162
commit
9e29e29a6b
|
@ -0,0 +1,105 @@
|
|||
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
|
||||
import 'package:e_porter/_core/component/button/button_fill.dart';
|
||||
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
|
||||
import 'package:e_porter/_core/component/text/custom_text.dart';
|
||||
import 'package:e_porter/_core/constants/colors.dart';
|
||||
import 'package:e_porter/_core/validators/validators.dart';
|
||||
import 'package:e_porter/presentation/controllers/profil_controller.dart';
|
||||
import 'package:e_porter/presentation/screens/auth/component/Input_form.dart';
|
||||
import 'package:e_porter/presentation/screens/auth/component/Input_password.dart';
|
||||
import 'package:e_porter/presentation/screens/profile/component/header_information.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class ChangeNumberScreen extends StatefulWidget {
|
||||
const ChangeNumberScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ChangeNumberScreen> createState() => _ChangeNumberScreenState();
|
||||
}
|
||||
|
||||
class _ChangeNumberScreenState extends State<ChangeNumberScreen> {
|
||||
final _authController = Get.find<ProfilController>();
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
final _oldPassword = TextEditingController();
|
||||
final _phoneNumber = TextEditingController();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: GrayColors.gray50,
|
||||
appBar: DefaultAppbarComponent(
|
||||
title: 'Ganti Nomor Telepon',
|
||||
textColor: Colors.white,
|
||||
backgroundColors: PrimaryColors.primary800,
|
||||
onTab: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
|
||||
child: SingleChildScrollView(
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
HeaderInformation(
|
||||
title:
|
||||
'Apakah anda yakin ingin mengganti nomor telepon akun?. Silahkan masukkan password lama anda sebagai verifikasi dan nomor telepon baru anda',
|
||||
),
|
||||
SizedBox(height: 32.h),
|
||||
CustomText.textPadding8('Password Lama'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _oldPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
CustomText.textPadding8('Nomor Telepon'),
|
||||
SizedBox(height: 16.h),
|
||||
InputForm(
|
||||
controller: _phoneNumber,
|
||||
hintText: '0821xx',
|
||||
svgIconPath: 'assets/icons/ic_phone.svg',
|
||||
validator: Validators.validatorPhone,
|
||||
textInputType: TextInputType.number,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: Obx(
|
||||
() {
|
||||
return CustomeShadowCotainner(
|
||||
child: _authController.isChangingPhone.value
|
||||
? Center(
|
||||
child: CircularProgressIndicator(color: PrimaryColors.primary800),
|
||||
)
|
||||
: ButtonFill(
|
||||
text: 'Simpan',
|
||||
textColor: Colors.white,
|
||||
onTap: () async {
|
||||
if (!_formKey.currentState!.validate()) return;
|
||||
final result = await _authController.changePhone(
|
||||
oldPassword: _oldPassword.text.trim(),
|
||||
newPhone: _phoneNumber.text.trim(),
|
||||
);
|
||||
if (result) {
|
||||
_oldPassword.clear();
|
||||
_phoneNumber.clear();
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,9 +1,11 @@
|
|||
import 'package:e_porter/_core/component/appbar/appbar_component.dart';
|
||||
import 'package:e_porter/_core/component/button/button_fill.dart';
|
||||
import 'package:e_porter/_core/component/card/custome_shadow_cotainner.dart';
|
||||
import 'package:e_porter/_core/component/text/custom_text.dart';
|
||||
import 'package:e_porter/_core/constants/colors.dart';
|
||||
import 'package:e_porter/_core/constants/typography.dart';
|
||||
import 'package:e_porter/_core/utils/snackbar/snackbar_helper.dart';
|
||||
import 'package:e_porter/_core/validators/validators.dart';
|
||||
import 'package:e_porter/presentation/controllers/profil_controller.dart';
|
||||
import 'package:e_porter/presentation/screens/auth/component/Input_password.dart';
|
||||
import 'package:e_porter/presentation/screens/profile/component/header_information.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
@ -18,6 +20,7 @@ class ChangePasswordScreen extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
|
||||
final _authController = Get.find<ProfilController>();
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
final _oldPassword = TextEditingController();
|
||||
final _newPassword = TextEditingController();
|
||||
|
@ -26,81 +29,94 @@ class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: GrayColors.gray50,
|
||||
appBar: DefaultAppbarComponent(
|
||||
title: 'Ganti Kata Sandi',
|
||||
textColor: Colors.white,
|
||||
backgroundColors: PrimaryColors.primary800,
|
||||
onTab: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
|
||||
child: SingleChildScrollView(
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
HeaderInformation(
|
||||
title:
|
||||
'Apakah anda yakin ingin mengganti kata sandi? Silahkan masukkan kata sandi lama anda dan kata sandi baru anda',
|
||||
),
|
||||
SizedBox(height: 32.h),
|
||||
textTitle(title: 'Password Lama'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _oldPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
textTitle(title: 'Password Baru'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _newPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
textTitle(title: 'Konfirmasi Password'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _confirmPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
],
|
||||
backgroundColor: GrayColors.gray50,
|
||||
appBar: DefaultAppbarComponent(
|
||||
title: 'Ganti Kata Sandi',
|
||||
textColor: Colors.white,
|
||||
backgroundColors: PrimaryColors.primary800,
|
||||
onTab: () {
|
||||
Get.back();
|
||||
},
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 20.h),
|
||||
child: SingleChildScrollView(
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
HeaderInformation(
|
||||
title:
|
||||
'Apakah anda yakin ingin mengganti kata sandi? Silahkan masukkan kata sandi lama anda dan kata sandi baru anda',
|
||||
),
|
||||
SizedBox(height: 32.h),
|
||||
CustomText.textPadding8('Password Lama'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _oldPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
CustomText.textPadding8('Password Baru'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _newPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
SizedBox(height: 20.h),
|
||||
CustomText.textPadding8('Konfirmasi Password'),
|
||||
SizedBox(height: 16.h),
|
||||
InputPassword(
|
||||
controller: _confirmPassword,
|
||||
hintText: '••••••••••',
|
||||
svgIconPath: 'assets/icons/ic_padlock.svg',
|
||||
validator: Validators.validatorPassword,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
bottomNavigationBar: CustomeShadowCotainner(
|
||||
child: ButtonFill(
|
||||
text: 'Simpan',
|
||||
textColor: Colors.white,
|
||||
onTap: () {
|
||||
if (_formKey.currentState!.validate()) {}
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
bottomNavigationBar: Obx(
|
||||
() {
|
||||
return CustomeShadowCotainner(
|
||||
child: _authController.isChangingPassword.value
|
||||
? Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16.h),
|
||||
child: Center(child: CircularProgressIndicator()),
|
||||
)
|
||||
: ButtonFill(
|
||||
text: 'Simpan',
|
||||
textColor: Colors.white,
|
||||
onTap: () async {
|
||||
if (!_formKey.currentState!.validate()) return;
|
||||
if (_newPassword.text != _confirmPassword.text) {
|
||||
SnackbarHelper.showError("Error", "Password baru dan konfirmasi tidak sama.");
|
||||
return;
|
||||
}
|
||||
|
||||
Widget textTitle({required String title}) {
|
||||
return Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 8.w),
|
||||
child: TypographyStyles.body(
|
||||
title,
|
||||
color: GrayColors.gray800,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
);
|
||||
final success = await _authController.changePassword(
|
||||
oldPassword: _oldPassword.text,
|
||||
newPassword: _newPassword.text,
|
||||
);
|
||||
|
||||
if (success) {
|
||||
_oldPassword.clear();
|
||||
_newPassword.clear();
|
||||
_confirmPassword.clear();
|
||||
FocusScope.of(context).unfocus();
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue