es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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”.

Tags:  , ,

Answer

  1. Avatar for 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í:

    if(key.currentState != null && key.currentState!.validate()){
      // Su código aquí
    }
    

    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:

    if(key.currentState.validate()){
      // Su código aquí
    }
    

    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.

Comments are closed.