import 'package:farm_tpf/custom_model/password.dart'; import 'package:farm_tpf/data/api/app_exception.dart'; import 'package:farm_tpf/data/repository/user_repository.dart'; import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart'; import 'package:farm_tpf/presentation/custom_widgets/widget_toast.dart'; import 'package:farm_tpf/utils/const_color.dart'; import 'package:farm_tpf/utils/validators.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:keyboard_dismisser/keyboard_dismisser.dart'; class ChangePasswordScreen extends StatefulWidget { @override _ChangePasswordScreenState createState() => _ChangePasswordScreenState(); } class _ChangePasswordScreenState extends State { final GlobalKey _scaffoldKey = new GlobalKey(); final _repository = UserRepository(); GlobalKey _formKey = GlobalKey(); bool _autoValidate = false; FlutterToast flutterToast; Password _password = Password(); TextEditingController _currentPasswordController = TextEditingController(); TextEditingController _newPasswordController = TextEditingController(); TextEditingController _confirmPasswordController = TextEditingController(); @override void initState() { super.initState(); flutterToast = FlutterToast(context); } _validateInputs() async { if (_formKey.currentState.validate()) { _formKey.currentState.save(); LoadingDialog.showLoadingDialog(context); _repository.changePassword(_password).then((value) { LoadingDialog.hideLoadingDialog(context); flutterToast.showToast( child: WidgetToast(message: "Cập nhật thành công")); Navigator.pop(context); }).catchError((onError) { var errorMessage = AppException.handleError(onError, customMessageError: "Sai mật khẩu hiện tại"); _scaffoldKey.currentState.showSnackBar(SnackBar( content: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Flexible( child: Text(errorMessage), ), Icon(Icons.error), ], ), backgroundColor: Colors.red, duration: Duration(seconds: 3), )); LoadingDialog.hideLoadingDialog(context); }); } else { _autoValidate = true; } } Widget _currentPasswordField() { return TextFormField( keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration(labelText: "Mật khẩu hiện tại"), controller: _currentPasswordController, validator: (String value) { return Validators.validateNotNullOrEmpty(value, "Mật khẩu hiện tại"); }, onSaved: (newValue) { _password.currentPassword = newValue; }, ); } Widget _newPasswordField() { return TextFormField( keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration(labelText: "Mật khẩu mới"), controller: _newPasswordController, validator: validators.validateNewPassword, onSaved: (newValue) { _password.newPassword = newValue; }, ); } Widget _confirmPasswordField() { return TextFormField( keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration(labelText: "Nhập lại mật khẩu mới"), controller: _confirmPasswordController, validator: (String value) { return validators.validateConfirmPassword( _newPasswordController.text, value); }, onSaved: (newValue) {}, ); } Widget _btnSubmit() { return SizedBox( width: double.infinity, height: 55, child: FlatButton( onPressed: () { FocusScopeNode currentFocus = FocusScope.of(context); if (!currentFocus.hasPrimaryFocus) { currentFocus.unfocus(); } _validateInputs(); }, color: COLOR_CONST.DEFAULT, shape: RoundedRectangleBorder( borderRadius: new BorderRadius.circular(7.0), ), child: Text( 'Cập nhật'.toUpperCase(), style: TextStyle(fontWeight: FontWeight.bold, color: COLOR_CONST.WHITE), ), ), ); } @override Widget build(BuildContext context) => KeyboardDismisser( child: Scaffold( key: _scaffoldKey, appBar: AppBar(centerTitle: true, title: Text("Cập nhật mật khẩu")), body: KeyboardDismisser( child: Form( key: _formKey, autovalidate: _autoValidate, child: SingleChildScrollView( padding: EdgeInsets.all(8.0), child: Column( children: [ _currentPasswordField(), SizedBox( height: 8.0, ), _newPasswordField(), SizedBox( height: 8.0, ), _confirmPasswordField(), SizedBox( height: 8.0, ), _btnSubmit() ], ), ))))); }