You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
5.3KB

  1. import 'package:farm_tpf/custom_model/password.dart';
  2. import 'package:farm_tpf/data/api/app_exception.dart';
  3. import 'package:farm_tpf/data/repository/user_repository.dart';
  4. import 'package:farm_tpf/presentation/custom_widgets/app_bar_widget.dart';
  5. import 'package:farm_tpf/presentation/custom_widgets/button/primary_button_widget.dart';
  6. import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
  7. import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart';
  8. import 'package:farm_tpf/utils/const_color.dart';
  9. import 'package:farm_tpf/utils/validators.dart';
  10. import 'package:flutter/material.dart';
  11. import 'package:keyboard_dismisser/keyboard_dismisser.dart';
  12. import '../../custom_widgets/button_widget.dart';
  13. class ChangePasswordScreen extends StatefulWidget {
  14. @override
  15. _ChangePasswordScreenState createState() => _ChangePasswordScreenState();
  16. }
  17. class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
  18. final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  19. final _repository = UserRepository();
  20. GlobalKey<FormState> _formKey = GlobalKey();
  21. bool _autoValidate = false;
  22. Password _password = Password();
  23. TextEditingController _currentPasswordController = TextEditingController();
  24. TextEditingController _newPasswordController = TextEditingController();
  25. TextEditingController _confirmPasswordController = TextEditingController();
  26. @override
  27. void initState() {
  28. super.initState();
  29. }
  30. _validateInputs() async {
  31. if (_formKey.currentState!.validate()) {
  32. _formKey.currentState!.save();
  33. LoadingDialog.showLoadingDialog(context);
  34. _repository.changePassword(_password).then((value) {
  35. LoadingDialog.hideLoadingDialog(context);
  36. Navigator.pop(context);
  37. Utils.showSnackBarSuccess(message: "Cập nhật thành công");
  38. }).catchError((onError) {
  39. LoadingDialog.hideLoadingDialog(context);
  40. Utils.showSnackBarError(message: AppException.handleError(onError, customMessageError: "Sai mật khẩu hiện tại"));
  41. });
  42. } else {
  43. _autoValidate = true;
  44. }
  45. }
  46. Widget _currentPasswordField() {
  47. return TextFormField(
  48. keyboardType: TextInputType.text,
  49. obscureText: true,
  50. decoration: InputDecoration(labelText: "Mật khẩu hiện tại"),
  51. controller: _currentPasswordController,
  52. validator: (String? value) {
  53. return Validators.validateNotNullOrEmpty(value ?? '', "Mật khẩu hiện tại");
  54. },
  55. onSaved: (newValue) {
  56. _password.currentPassword = newValue;
  57. },
  58. );
  59. }
  60. Widget _newPasswordField() {
  61. return TextFormField(
  62. keyboardType: TextInputType.text,
  63. obscureText: true,
  64. decoration: InputDecoration(labelText: "Mật khẩu mới"),
  65. controller: _newPasswordController,
  66. validator: validators.validateNewPassword,
  67. onSaved: (newValue) {
  68. _password.newPassword = newValue;
  69. },
  70. );
  71. }
  72. Widget _confirmPasswordField() {
  73. return TextFormField(
  74. keyboardType: TextInputType.text,
  75. obscureText: true,
  76. decoration: InputDecoration(labelText: "Nhập lại mật khẩu mới"),
  77. controller: _confirmPasswordController,
  78. validator: (String? value) {
  79. return validators.validateConfirmPassword(_newPasswordController.text, value ?? '');
  80. },
  81. onSaved: (newValue) {},
  82. );
  83. }
  84. Widget _btnSubmit() {
  85. return SizedBox(
  86. width: double.infinity,
  87. height: 55,
  88. child: ButtonWidget(
  89. title: 'Cập nhật',
  90. onPressed: () {
  91. FocusScopeNode currentFocus = FocusScope.of(context);
  92. if (!currentFocus.hasPrimaryFocus) {
  93. currentFocus.unfocus();
  94. }
  95. _validateInputs();
  96. },
  97. ),
  98. );
  99. }
  100. @override
  101. Widget build(BuildContext context) => KeyboardDismisser(
  102. child: Scaffold(
  103. backgroundColor: Colors.white,
  104. key: _scaffoldKey,
  105. appBar: AppBarWidget(
  106. isBack: true,
  107. ),
  108. body: KeyboardDismisser(
  109. child: Form(
  110. key: _formKey,
  111. child: SingleChildScrollView(
  112. padding: EdgeInsets.all(8.0),
  113. child: Column(
  114. crossAxisAlignment: CrossAxisAlignment.start,
  115. children: <Widget>[
  116. Text(
  117. 'Bảo mật',
  118. style: TextStyle(fontWeight: FontWeight.w500, fontSize: 22),
  119. ),
  120. Text('Cập nhật mật khẩu cho tài khoản của bạn. Mật khẩu bao gồm cả chữ và số, độ dài tối thiểu 8 ký tự',
  121. style: TextStyle(fontSize: 15, fontWeight: FontWeight.w200, color: Colors.black54)),
  122. _currentPasswordField(),
  123. SizedBox(
  124. height: 8.0,
  125. ),
  126. _newPasswordField(),
  127. SizedBox(
  128. height: 8.0,
  129. ),
  130. _confirmPasswordField(),
  131. SizedBox(
  132. height: 20.0,
  133. ),
  134. _btnSubmit()
  135. ],
  136. ),
  137. )))));
  138. }