'_CastError (Null check operator used on a null value) flutter
_CastError (Null check operator used on a null value)
error code
bool validateAndSave() {
final form = globalFormKey.currentState;
if (form.validate()) {
form.save();
return true;
}
return false;
}
full code
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:thex/components/account_check.dart';
import 'package:thex/components/rounded_button.dart';
import 'package:thex/components/rounded_input_field.dart';
import 'package:thex/components/rounded_password_field.dart';
import 'package:thex/constants.dart';
import 'package:thex/models/login_model.dart';
import 'package:thex/screen/Login/components/background.dart';
// import 'package:thex/screen/home/home_screen.dart';
import 'package:thex/screen/signup/signup_screen.dart';
import 'package:url_launcher/url_launcher.dart';
class Body extends StatelessWidget {
Body({
Key? key,
}) : super(key: key);
final scaffoldKey = GlobalKey<ScaffoldState>();
GlobalKey<FormState> globalFormKey = GlobalKey<FormState>();
LoginRequestModel? requestModel;
void initState() {
requestModel = LoginRequestModel();
}
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin: EdgeInsets.only(bottom: size.height * 0.04),
child: const Text(
"Sign In",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 34, color: kPrimaryColor),
),
),
SvgPicture.asset(
"assets/icons/login.svg",
height: size.height * 0.35
),
RoundedInputField(
validator: (value) => ! value!.contains('@') ? null : 'Invalid Email',
hintText: "Your Email",
onSaved: (value) {
requestModel!.email = value;
},
),
RoundedPasswordField(
validator: (password) => password!.length < 6 ? 'Password too short' : null,
hintText: "Your Password",
onSaved: (password) {
requestModel!.password = password;
},
),
RoundedButton(
text: "LOGIN",
press: () {
if (validateAndSave()) {
print(requestModel!.toJson());
}
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return const HomeScreen();
// },
// ),
// );
},
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AlreadyHaveAnAccountCheck(
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context){
return const SignUpScreen();
},
),
);
},
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text("Don't have an account? ", style: TextStyle(color: kPrimaryColor),),
GestureDetector(
onTap: () { launch("https://www.web.com/forgot-password");},
child: const Text("Reset Password", style: TextStyle(color: kPrimaryColor),),
),
],
)
],
),
);
}
bool validateAndSave() {
final form = globalFormKey.currentState;
if (form.validate()) {
form.save();
return true;
}
return false;
}
}
help!!
Solution 1:[1]
You shouldn't use "!" to force not null. Instead, use
?? defaultValue or check null before use "!".
Also, use debugging mode (f5) to check flow and know where code die.
Solution 2:[2]
Problem is you dont have a form element in your widget. There for its null.
You need to add a Form widget with the key.
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: Form(
key: globalFormKey,
child: Column(
...
)
)
);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Quyen Anh Nguyen |
| Solution 2 | Himmet Yelekin |
