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.

159 lines
5.2KB

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