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.

164 lines
5.4KB

  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/widget_loading.dart';
  5. import 'package:farm_tpf/presentation/custom_widgets/widget_toast.dart';
  6. import 'package:farm_tpf/utils/const_color.dart';
  7. import 'package:farm_tpf/utils/validators.dart';
  8. import 'package:flutter/material.dart';
  9. import 'package:fluttertoast/fluttertoast.dart';
  10. import 'package:keyboard_dismisser/keyboard_dismisser.dart';
  11. class ChangePasswordScreen extends StatefulWidget {
  12. @override
  13. _ChangePasswordScreenState createState() => _ChangePasswordScreenState();
  14. }
  15. class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
  16. final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  17. final _repository = UserRepository();
  18. GlobalKey<FormState> _formKey = GlobalKey();
  19. bool _autoValidate = false;
  20. FlutterToast flutterToast;
  21. Password _password = Password();
  22. TextEditingController _currentPasswordController = TextEditingController();
  23. TextEditingController _newPasswordController = TextEditingController();
  24. TextEditingController _confirmPasswordController = TextEditingController();
  25. @override
  26. void initState() {
  27. super.initState();
  28. flutterToast = FlutterToast(context);
  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. flutterToast.showToast(
  37. child: WidgetToast(message: "Cập nhật thành công"));
  38. Navigator.pop(context);
  39. }).catchError((onError) {
  40. var errorMessage = AppException.handleError(onError,
  41. customMessageError: "Sai mật khẩu hiện tại");
  42. _scaffoldKey.currentState.showSnackBar(SnackBar(
  43. content: Row(
  44. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  45. children: <Widget>[
  46. Flexible(
  47. child: Text(errorMessage),
  48. ),
  49. Icon(Icons.error),
  50. ],
  51. ),
  52. backgroundColor: Colors.red,
  53. duration: Duration(seconds: 3),
  54. ));
  55. LoadingDialog.hideLoadingDialog(context);
  56. });
  57. } else {
  58. _autoValidate = true;
  59. }
  60. }
  61. Widget _currentPasswordField() {
  62. return TextFormField(
  63. keyboardType: TextInputType.text,
  64. obscureText: true,
  65. decoration: InputDecoration(labelText: "Mật khẩu hiện tại"),
  66. controller: _currentPasswordController,
  67. validator: (String value) {
  68. return Validators.validateNotNullOrEmpty(value, "Mật khẩu hiện tại");
  69. },
  70. onSaved: (newValue) {
  71. _password.currentPassword = newValue;
  72. },
  73. );
  74. }
  75. Widget _newPasswordField() {
  76. return TextFormField(
  77. keyboardType: TextInputType.text,
  78. obscureText: true,
  79. decoration: InputDecoration(labelText: "Mật khẩu mới"),
  80. controller: _newPasswordController,
  81. validator: validators.validateNewPassword,
  82. onSaved: (newValue) {
  83. _password.newPassword = newValue;
  84. },
  85. );
  86. }
  87. Widget _confirmPasswordField() {
  88. return TextFormField(
  89. keyboardType: TextInputType.text,
  90. obscureText: true,
  91. decoration: InputDecoration(labelText: "Nhập lại mật khẩu mới"),
  92. controller: _confirmPasswordController,
  93. validator: (String value) {
  94. return validators.validateConfirmPassword(
  95. _newPasswordController.text, value);
  96. },
  97. onSaved: (newValue) {},
  98. );
  99. }
  100. Widget _btnSubmit() {
  101. return SizedBox(
  102. width: double.infinity,
  103. height: 55,
  104. child: FlatButton(
  105. onPressed: () {
  106. FocusScopeNode currentFocus = FocusScope.of(context);
  107. if (!currentFocus.hasPrimaryFocus) {
  108. currentFocus.unfocus();
  109. }
  110. _validateInputs();
  111. },
  112. color: COLOR_CONST.DEFAULT,
  113. shape: RoundedRectangleBorder(
  114. borderRadius: new BorderRadius.circular(7.0),
  115. ),
  116. child: Text(
  117. 'Cập nhật'.toUpperCase(),
  118. style:
  119. TextStyle(fontWeight: FontWeight.bold, color: COLOR_CONST.WHITE),
  120. ),
  121. ),
  122. );
  123. }
  124. @override
  125. Widget build(BuildContext context) => KeyboardDismisser(
  126. child: Scaffold(
  127. key: _scaffoldKey,
  128. appBar: AppBar(centerTitle: true, title: Text("Cập nhật mật khẩu")),
  129. body: KeyboardDismisser(
  130. child: Form(
  131. key: _formKey,
  132. autovalidate: _autoValidate,
  133. child: SingleChildScrollView(
  134. padding: EdgeInsets.all(8.0),
  135. child: Column(
  136. children: <Widget>[
  137. _currentPasswordField(),
  138. SizedBox(
  139. height: 8.0,
  140. ),
  141. _newPasswordField(),
  142. SizedBox(
  143. height: 8.0,
  144. ),
  145. _confirmPasswordField(),
  146. SizedBox(
  147. height: 8.0,
  148. ),
  149. _btnSubmit()
  150. ],
  151. ),
  152. )))));
  153. }