Files
flutter-todos/lib/logic/reset_password_page_logic.dart
2020-01-06 17:04:35 +08:00

225 lines
7.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:todo_list/config/api_service.dart';
import 'package:todo_list/i10n/localization_intl.dart';
import 'package:todo_list/model/all_model.dart';
import 'package:todo_list/utils/my_encrypt_util.dart';
import 'package:todo_list/utils/shared_util.dart';
import 'package:todo_list/widgets/net_loading_widget.dart';
class ResetPasswordPageLogic {
final ResetPasswordPageModel _model;
ResetPasswordPageLogic(this._model);
String validatorVerifyCode(String verifyCode) {
final context = _model.context;
_model.isVerifyCodeOk = false;
if (verifyCode.isEmpty) {
return DemoLocalizations.of(context).verifyCodeCantBeEmpty;
} else if (verifyCode.contains(" ")) {
return DemoLocalizations.of(context).verifyCodeContainEmpty;
} else {
_model.verifyCode = verifyCode;
_model.isVerifyCodeOk = true;
_model.refresh();
return null;
}
}
String validatorEmail(String email) {
final context = _model.context;
_model.isEmailOk = false;
Pattern pattern =
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regex = new RegExp(pattern);
if (email.isEmpty)
return DemoLocalizations.of(context).emailCantBeEmpty;
else if (!regex.hasMatch(email))
return DemoLocalizations.of(context).emailIncorrectFormat;
else {
_model.isEmailOk = true;
_model.emailAccount = email;
_model.refresh();
return null;
}
}
String validateRePassword(String rePassword) {
_model.isRePasswordOk = false;
final context = _model.context;
if (rePassword.isEmpty) {
return DemoLocalizations.of(context).confirmPasswordCantBeEmpty;
} else if (_model.newPassword != rePassword) {
return DemoLocalizations.of(context).twoPasswordsNotSame;
} else if (rePassword.contains(" ")) {
return DemoLocalizations.of(context).confirmPasswordContainEmpty;
} else {
_model.rePassword = rePassword;
_model.isRePasswordOk = true;
_model.refresh();
return null;
}
}
String validateNewPassword(String password) {
_model.isNewPasswordOk = false;
final context = _model.context;
if (password.isEmpty) {
return DemoLocalizations.of(context).newPasswordCantBeEmpty;
} else if (password.length < 8) {
return DemoLocalizations.of(context).passwordTooShort;
} else if (password.length > 20) {
return DemoLocalizations.of(context).passwordTooLong;
} else {
_model.newPassword = password;
_model.isNewPasswordOk = true;
_model.refresh();
return null;
}
}
String validateOldPassword(String password) {
_model.isOldPasswordOk = false;
final context = _model.context;
if (password.isEmpty) {
return DemoLocalizations.of(context).oldPasswordCantBeEmpty;
} else if (password.length < 8) {
return DemoLocalizations.of(context).passwordTooShort;
} else if (password.length > 20) {
return DemoLocalizations.of(context).passwordTooLong;
} else {
_model.oldPassword = password;
_model.isOldPasswordOk = true;
_model.refresh();
return null;
}
}
void onSubmit() {
final model = _model;
final context = _model.context;
///如果是重新设置密码
if (model.isReset) {
if (!model.isOldPasswordOk ||
!model.isNewPasswordOk ||
!model.isRePasswordOk) {
_showTextDialog(DemoLocalizations.of(context).wrongParams, context);
return;
}
showDialog(context: context, builder: (ctx){
return NetLoadingWidget(
onRequest: (){
_onResetPasswordRequest();
},
successText: DemoLocalizations.of(context).resetPasswordSuccess,
errorText: DemoLocalizations.of(context).resetPasswordFailed,
loadingController: _model.loadingController,
onSuccess: (){
Navigator.of(_model.context).popUntil((route) => route.isFirst);
},
);
});
}
///如果是忘记密码
else {
if (!model.isEmailOk ||
!model.isVerifyCodeOk ||
!model.isNewPasswordOk ||
!model.isRePasswordOk) {
_showTextDialog(DemoLocalizations.of(context).wrongParams, context);
return;
}
showDialog(context: context, builder: (ctx){
return NetLoadingWidget(
onRequest: (){
_onForgetPasswordRequest();
},
successText: DemoLocalizations.of(context).resetPasswordSuccess,
errorText: DemoLocalizations.of(context).resetPasswordFailed,
loadingController: _model.loadingController,
onSuccess: (){
Navigator.of(_model.context).pop();
Navigator.of(_model.context).pop();
},
);
});
}
}
void _showTextDialog(String text, BuildContext context) {
showDialog(
context: context,
builder: (ctx) {
return AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(20),
),
),
content: Text(text),
);
});
}
_onResetPasswordRequest() async {
final account = await SharedUtil.instance.getString(Keys.account);
final token = await SharedUtil.instance.getString(Keys.token);
final oldPassword = _model.oldPassword;
final newPassword = _model.newPassword;
final confirmPassword = _model.rePassword;
final encryptOldPW = EncryptUtil.instance.encrypt(oldPassword);
final encryptNewPW = EncryptUtil.instance.encrypt(newPassword);
final encryptConfirmPW = EncryptUtil.instance.encrypt(confirmPassword);
ApiService.instance.postResetPassword(
params: {
"account": account,
"token": token,
"oldPassword": encryptOldPW,
"newPassword": encryptNewPW,
"confirmPassword": encryptConfirmPW,
},
success: (CommonBean bean) {
SharedUtil.instance.saveString(Keys.password, encryptNewPW);
_model.loadingController.setFlag(LoadingFlag.success);
},
failed: (CommonBean bean) {
_model.loadingController.setFlag(LoadingFlag.error);
},
error: (msg) {
_model.loadingController.setFlag(LoadingFlag.error);
},
token: _model.cancelToken,
);
}
_onForgetPasswordRequest() {
final account = _model.emailAccount;
final identifyCode = _model.verifyCode;
final newPassword = _model.newPassword;
final confirmPassword = _model.rePassword;
final encryptNewPW = EncryptUtil.instance.encrypt(newPassword);
final encryptConfirmPW = EncryptUtil.instance.encrypt(confirmPassword);
ApiService.instance.postForgetPassword(
params: {
"account": account,
"accountType": "0",
"newPassword": encryptNewPW,
"confirmPassword": encryptConfirmPW,
"identifyCode": identifyCode,
},
success: (CommonBean bean) {
_model.loadingController.setFlag(LoadingFlag.success);
},
failed: (CommonBean bean) {
_model.loadingController.setFlag(LoadingFlag.error);
},
error: (msg) {
_model.loadingController.setFlag(LoadingFlag.error);
},
token: _model.cancelToken,
);
}
}