dart CastError(Null check operator used on a null value)使用REST API的FLUTTER ERROR

rpppsulh  于 2023-05-11  发布在  Flutter
关注(0)|答案(2)|浏览(262)

我正在尝试flutter,我是这方面的新手,当我使用API SERVICE登录时遇到了问题(我使用Rest API https://reqres.in),登录说
_CastError(对空值使用的空检查运算符)
错误来自下面的源代码

Container(
              
              margin: const EdgeInsets.only(
                  left: 30, right: 30, top: 20, bottom: 20),
              padding: const EdgeInsets.symmetric(vertical: 10),
              width: double.infinity,
              child: ElevatedButton(
                onPressed: () {
                 if (Loginvalues.loginFormKey.currentState!.validate()) {
                    Loginvalues.userLogin(Loginvalues.loginEmailController, Loginvalues.loginPasswordController,);
                 }
                },
                style: ElevatedButton.styleFrom(
                    backgroundColor: const Color(0xff84c148),
                    elevation: 5,
                    padding: const EdgeInsets.all(15),
                    shape: RoundedRectangleBorder(
                        borderRadius: BorderRadius.circular(15))),
                child: const SizedBox(
                  height: 15,

                  child: Text('SIGN IN',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 15,
                        fontWeight: FontWeight.bold,
                      )),
                ),
              )),

在线:

onPressed: () {
   if (Loginvalues.loginFormKey.currentState!.validate()) { 
    Loginvalues.userLogin(Loginvalues.loginEmailController,  
    Loginvalues.loginPasswordController,);

这是我的登录控制器dart,其中loginFormkey被调用:

// ignore_for_file: prefer_const_constructors

import 'dart:convert';
import 'package:get/get.dart';
import 'package:crud_sample/screens/home_page.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class LoginController with ChangeNotifier {
  TextEditingController loginEmailController = TextEditingController();
  TextEditingController loginPasswordController = TextEditingController();
  GlobalKey<FormState> loginFormKey = GlobalKey();

  userLogin(
    TextEditingController loginEmailController,
    TextEditingController loginPasswordController,
  ) async {
    try{
         var headers = {"Content-Type": "application/json"};
         var body = {
            'email' : loginEmailController.text.trim(),
            'password' : loginPasswordController.text.trim()
    };
    
       http.Response response = await http.post(
        Uri.parse('https://reqres.in/api/login'),
        headers: headers,
        body: jsonEncode(body),
        );
        
        if(response.statusCode == 200){
          Map json = jsonDecode(response.body.toString());
          print(json['token']);

          if(json['token'] != ''){
            Get.to(() => HomePage());
          }else{
            print("Invalid Details!");
          }
        }   
    }catch(e){
      print("Error $e");
    }
  }
}

我的依赖关系
库比蒂诺_icons:^1.0.2 http:^0.13.6获取:^4.6.5提供程序:6.0.5级
我做错了吗?
Fix _CastError(用于空值的空检查运算符)

nfzehxib

nfzehxib1#

错误消息表明您正在对空值使用空检查运算符(!)。在本例中,当您尝试访问Loginvalues.loginFormKey.currentState时,它似乎为null。
若要解决此问题,您需要确保Loginvalues.loginFormKey.currentState在使用null检查运算符之前不为null。可以按如下方式修改代码:

onPressed: () {
  if (Loginvalues.loginFormKey.currentState != null &&
      Loginvalues.loginFormKey.currentState!.validate()) {
    Loginvalues.userLogin(
      Loginvalues.loginEmailController,
      Loginvalues.loginPasswordController,
    );
  }
},

通过在访问validate()之前添加空检查Loginvalues.loginFormKey.currentState != null,可以防止对空值使用空检查运算符。
请确保在代码中更新此更改,然后尝试再次运行它。
我希望这能帮助你解决这个问题!

mklgxw1f

mklgxw1f2#

if (Loginvalues.loginFormKey.currentState != null &&) {
   if(Loginvalues.loginFormKey.currentState!.validate()){
    Loginvalues.userLogin(
      Loginvalues.loginEmailController,
      Loginvalues.loginPasswordController
    );
  }
  }

用这个改变下面的部分。因为它是错误的。在这里,您将首先检查它是否为null。如果不是,那就满足条件并实现它。希望这能帮上忙。
编辑:

if (Loginvalues.loginFormKey.currentState != null &&) {
   if(Loginvalues.loginFormKey.currentState!.validate()){
      Loginvalues.userLogin(
        Loginvalues.loginEmailController,
        Loginvalues.loginPasswordController,context
      );
    }
  }

在这里发送上下文与它。另一方面:

if(json['token'] != ''){
        Navigator.push(
        context,
       MaterialPageRoute(builder: (context) => HomePage()),
   );
        }else{
         print("Invalid Details!");
       }

接收上下文。

相关问题