Skip to content

Instantly share code, notes, and snippets.

@VB10
Created June 27, 2019 18:15
Show Gist options
  • Save VB10/1b1c159d3ef151407254e7499e4a4039 to your computer and use it in GitHub Desktop.
Save VB10/1b1c159d3ef151407254e7499e4a4039 to your computer and use it in GitHub Desktop.
class LoginModel extends BaseModel {
Api _api = locator<Api>();
TextEditingController userEmail;
TextEditingController userPassword;
BuildContext _context;
LoginModel() {
userEmail = new TextEditingController();
userPassword = new TextEditingController();
}
final formKey = GlobalKey<FormState>();
void login() {
if (formKey.currentState.validate()) {
setState(ViewState.Busy);
var _user = LoginRequest(
email: userEmail.text.trim(),
password: userPassword.text.trim(),
returnSecureToken: true.toString());
_api.signin_user(_user).then(onSuccess).catchError(onError);
} else
return;
}
Future onSuccess(dynamic response) async {
var model = response as LoginResponse;
Scaffold.of(_context)
.showSnackBar(SnackBar(content: Text("Welcome ${model.email}")));
saveUserState(model);
Navigator.of(_context)
.pushNamed(EnumConverter.stringFromEnum(RouteState.HOME));
print(model);
setState(ViewState.Idle);
}
void onError(dynamic response) {
var model = response as LoginResponse;
Navigator.of(_context)
.pushNamed(EnumConverter.stringFromEnum(RouteState.REGISTER));
setState(ViewState.Idle);
}
@override
void dispose() {
this.removeListener(() => this);
}
saveUserState(LoginResponse model) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.reload();
prefs.setString(UserLocalState.TOKEN_ID.toString(), model.id_token);
prefs.setString(
UserLocalState.TOKEN_REFRESH.toString(), model.refreshToken);
}
@override
void setContext(BuildContext context) {
// TODO: implement setContext
_context = context;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment