-
-
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, | |
| ) | |
| ], | |
| ), | |
| ), | |
| ), | |
| ); | |
| } | |
| } |
@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
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
Big thanks! I looked same example for a long time!