-
-
Save eduardoflorence/e49780ab232fa8ad7767bbdbf8389f1e to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart'; | |
import 'package:get/get.dart'; | |
void main() { | |
runApp(GetMaterialApp( | |
initialRoute: '/login', | |
getPages: [ | |
GetPage( | |
name: '/login', | |
page: () => LoginPage(), | |
binding: LoginBinding(), | |
), | |
], | |
)); | |
} | |
class LoginBinding implements Bindings { | |
@override | |
void dependencies() { | |
Get.lazyPut(() => LoginController()); | |
} | |
} | |
class LoginController extends GetxController { | |
final loginFormKey = GlobalKey<FormState>(); | |
final emailController = TextEditingController(); | |
final passwordController = TextEditingController(); | |
@override | |
void onInit() { | |
// Simulating obtaining the user name from some local storage | |
emailController.text = '[email protected]'; | |
super.onInit(); | |
} | |
@override | |
void onClose() { | |
emailController.dispose(); | |
passwordController.dispose(); | |
super.onClose(); | |
} | |
String validator(String value) { | |
if (value.isEmpty) { | |
return 'Please this field must be filled'; | |
} | |
return null; | |
} | |
void login() { | |
if (loginFormKey.currentState.validate()) { | |
checkUser(emailController.text, passwordController.text).then((auth) { | |
if (auth) { | |
Get.snackbar('Login', 'Login successfully'); | |
} else { | |
Get.snackbar('Login', 'Invalid email or password'); | |
} | |
passwordController.clear(); | |
}); | |
} | |
} | |
// Api Simulation | |
Future<bool> checkUser(String user, String password) { | |
if (user == '[email protected]' && password == '123') { | |
return Future.value(true); | |
} | |
return Future.value(false); | |
} | |
} | |
class LoginPage extends GetView<LoginController> { | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar(title: Text('LOGIN')), | |
body: Container( | |
padding: const EdgeInsets.all(16.0), | |
child: Form( | |
key: controller.loginFormKey, | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.center, | |
children: [ | |
TextFormField( | |
controller: controller.emailController, | |
decoration: const InputDecoration(labelText: 'E-mail'), | |
validator: controller.validator, | |
), | |
TextFormField( | |
controller: controller.passwordController, | |
decoration: const InputDecoration(labelText: 'Password'), | |
validator: controller.validator, | |
obscureText: true, | |
), | |
RaisedButton( | |
child: Text('Login'), | |
onPressed: controller.login, | |
) | |
], | |
), | |
), | |
), | |
); | |
} | |
} |
thank you
Thank you!
Thank you
@eduardoflorence, Thanks for the example, I'm just learning, I know the problem below is due to different flutter version and the null safety feature, but I try everything and still controller.validator is not accepted.
validator: controller.validator,
it is given me this error
Error: The argument type 'String Function(String)' can't be assigned to the parameter type 'String? Function(String?)?' because 'String?' is nullable and 'String' isn't.
@eduardoflorence, Thanks for the example, I'm just learning, I know the problem below is due to different flutter version and the null safety feature, but I try everything and still controller.validator is not accepted.
validator: controller.validator,
it is given me this error
Error: The argument type 'String Function(String)' can't be assigned to the parameter type 'String? Function(String?)?' because 'String?' is nullable and 'String' isn't.
@clust3rsekt0r
you can simply change the validator to =>
String? validator(String? value) {
if (value == null || value.isEmpty) {
return 'Please this field must be filled';
}
return null;
}
and it will work.
you need to check if the value is null before using value.isEmpty
Big thanks
big big big thanks...
thank you
@eduardoflorence, could you help me with follow code: https://stackoverflow.com/questions/68934499/cant-get-onchanged-properly-work-with-getx
I can't figure out how to work with
onChange