Operador de verificación de nulo utilizado en un valor nulo en TexformField.
Aquí está mi código para TextFormField y estoy recibiendo el error de que “Se usó el operador de comprobación de nulidad en un valor nulo” y si elimino el operador de comprobación de nulidad de currentstate entonces arroja otra excepción.
Importaciones:
import 'package:firebase/sign_up.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
Clase First_Page con estado:
class First_Page extends StatefulWidget {
const First_Page({ Key? key }) : super(key: key);
@override
_First_PageState createState() => _First_PageState();
}
class _First_PageState extends State<first_page> {
final key= GlobalKey<formstate>();
final _auth= FirebaseAuth.instance;
final User_email_id=TextEditingController();
final user_Password=TextEditingController();
@override
Widget build(BuildContext context) {
final email_id = TextFormField(
controller: User_email_id,
key: key,
validator: (value){
if(value!.isEmpty){
return "Please enter a value";
}
},
decoration: InputDecoration(
contentPadding: EdgeInsets.fromLTRB(20, 15, 20, 15),
prefixIcon: Icon(
Icons.mail,
),
hintText: "Email-id",
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10)
),
),
);
Código del botón y onPressed:
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
gradient: LinearGradient(
colors: <color>[
Colors.yellow,
Colors.greenAccent,
]
)
),
child: ButtonTheme(
padding: EdgeInsets.fromLTRB(20, 15, 20, 15),
minWidth: 350.0,
child: FlatButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10)
),
onPressed: (){
if(key.currentState?.validate() == true){
print('Successful');
}
},
child: Text(
'Sign-in',
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
),
),
),
),
),
Y aquí están los errores que estoy recibiendo:
======== Exception caught by gesture ===============================================================
The following _CastError was thrown while handling a gesture:
Null check operator used on a null value
When the exception was thrown, this was the stack:
#0 _First_PageState.build.<anonymous closure=""> (package:firebase/Sign_In.dart:119:39)
#1 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:989:21)
#2 GestureRecognizer.invokeCallback
(package:flutter/src/gestures/recognizer.dart:193:24)
#3 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:608:11)
#4 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
#5 BaseTapGestureRecognizer.acceptGesture
(package:flutter/src/gestures/tap.dart:267:7)
#6 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
#7 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:444:20)
#8 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:420:22)
#9 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
#10 GestureBinding._handlePointerEventImmediately
(package:flutter/src/gestures/binding.dart:374:7)
#11 GestureBinding.handlePointerEvent
(package:flutter/src/gestures/binding.dart:338:5)
#12 GestureBinding._flushPointerEventQueue
(package:flutter/src/gestures/binding.dart:296:7)
#13 GestureBinding._handlePointerDataPacket
(package:flutter/src/gestures/binding.dart:279:7)
#17 _invoke1 (dart:ui/hooks.dart:185:10)
#18 PlatformDispatcher._dispatchPointerDataPacket
(dart:ui/platform_dispatcher.dart:293:7)
#19 _dispatchPointerDataPacket (dart:ui/hooks.dart:98:31)
(elided 3 frames from dart:async)
Handler: "onTap"
Recognizer: TapGestureRecognizer#b49fb
debugOwner: GestureDetector
state: ready
won arena
finalPosition: Offset(172.0, 531.6)
finalLocalPosition: Offset(150.6, 23.6)
button: 1
sent tap down
Si elimino el operador de comprobación de nulidad de Currentstate, muestra el error “El método ‘validate’ no se puede invocar incondicionalmente porque el receptor puede ser nulo”.
davy.ai
El error “Operador de comprobación nula utilizado en un valor nulo” significa que está intentando acceder a una propiedad o método de un valor nulo sin comprobar primero si es nulo. En su código, el error ocurre en la función onPressed de su botón donde está accediendo a la propiedad currentState sin comprobar primero si es nula. Este error también puede ocurrir si la clave que está utilizando para acceder a currentState es nula.
Para corregir este error, puede agregar una comprobación nula antes de acceder a la propiedad currentState, así:
Esto primero comprobará si el currentState es nulo antes de intentar acceder a su método validate(). Si es nulo, el código dentro del if no se ejecutará.
Si elimina el operador de comprobación nula de currentState como este:
Entonces recibirá el error ‘No se puede invocar “validate” de forma incondicional porque el receptor puede ser “nulo”.’. Esto se debe a que currentState puede ser nulo y, por lo tanto, debe comprobar si es nulo antes de invocar sus métodos.