首页 > 解决方案 > Flutter Rest API试图获取非obj的属性“密码”

问题描述

我试图在颤振中使用 Rest API 创建登录表单,但是我不断收到错误。对于登录,API 需要 3 个变量;电子邮件、密码和设备

这是我的登录功能

String email;
  String password;
  
  String device="mobile";
  

  TextEditingController passwordcontroller=TextEditingController();
  TextEditingController emailcontroller=TextEditingController();

loginfunction(String email, String password, String device)async{

    // Map data={"email":email,
    // "password":password,"device":device};

    var jsonData;
    SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
    var response= await http.post('https://f.nz/api/auth/Login',headers:{
      "key": "Client-Version",
      "value": "{{client_version}}-1",
      "type": "text"
    },

    body: {
      "email": email,
      "password": password,
      "device": device,
    });
   // return response.data;

    if (response.statusCode==200){
      jsonData= json.decode(response.body);
      setState(() {
        sharedPreferences.setString("token", jsonData["token"]);
        Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) =>
                    OtpPage()));
      });
    }
    else{
      print(response.body);
      print(response.statusCode);

      print(email);
      print(device);
    }

  }

这是填写电子邮件和密码字段后调用函数的地方

GestureDetector(
              onTap: () async {
                try{
                  

                  await loginfunction(email, password,device);


                }
                catch(e){
                  setState(() {
                    error=e.message;
                  });

                }

              },
              child: Container(
                padding: EdgeInsets.fromLTRB(.0, 0.0, 0.0, 0.0),
                height: 35.0,
                width: 150.0,
                child: Material(
                  borderRadius: BorderRadius.circular(40.0),
                  color: Color(0xffa6ce38),
                  elevation: 7.0,
                  child: Center(
                    child: Text(
                      "Sign in",
                      style: TextStyle(
                          fontWeight: FontWeight.bold, fontSize: 16.0, color: Colors.white),
                    ),
                  ),
                ),
              ),
            ),

每次我运行代码并尝试登录时,这是终端中的错误

D/libc-netbsd(7365):[getaddrinfo]:mtk 主机名=fhm.soop.co.nz;服务名称=(空);网络ID=0;标记=0 D/libc-netbsd(7365):getaddrinfo(app_uid:10366 D/libc-netbsd(7365):getaddrinfo()uid prop:D/libc-netbsd(7365):getaddrinfo()getuid():10366 D /libc-netbsd(7365):[getaddrinfo]:mtk ai_addrlen=0;ai_canonname=(null);ai_flags=1024;ai_family=0 D/libc-netbsd(7365):getaddrinfo:fhm.soop.co.nz 得到结果从代理 gai_error = 0 I/flutter (7365): I/flutter (7365): I/flutter (7365): I/flutter (7365): 遇到 PHP 错误 I/flutter (7365): I/flutter (7365) ):

严重性:通知

我/颤振(7365):

消息:试图获取非对象的属性“电子邮件”

我/颤振(7365):

文件名:auth/Login.php

我/颤振(7365):

行号:43

I/颤动(7365):I/颤动(7365):I/颤动(7365):

回溯:

I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365): I /flutter (7365): 文件: C:\xampp\htdocs\api\application\controllers\auth\Login.php
I/flutter (7365): Line: 43
I/flutter (7365): Function: _error_handler

I/flutter (7365): I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365): I/flutter (7365): 文件: C:\xampp\htdocs \api\application\libraries\REST_Controller.php
I/flutter (7365): Line: 708
I/flutter (7365): Function: index_post

I/flutter (7365): I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365):
I/flutter (7365): I /flutter (7365): 文件: C:\xampp\htdocs\api\index.php
I/flutter (7365): Line: 308
I/flutter (7365): Function: require_once

I/flutter (7365): I/flutter (7365):
I/flutter (7365):
I/flutter (7365): I/flutter (7365): I/flutter (7365): I/flutter (7365): I /flutter (7365): 遇到 PHP 错误 I/flutter (7365): I/flutter (7365):

严重性:通知

我/颤振(7365):

消息:尝试获取非 obj I/flutter(7365)的属性“密码”:400 I/flutter(7365):email@email.com I/flutter(7365):mobile

标签: apiflutterrest

解决方案


如果您使用的电子邮件在您的数据库中不存在,则这是来自您的 php 服务器的结果。我看到你的错误说email@email.com。您的服务器正在寻找用户,但没有找到,并返回 null。或者您可能在服务器端错误地解析数据。我会先在那里检查。

你的错误还说

Message: Trying to get property 'email' of non-object

I/flutter ( 7365):
Filename: auth/Login.php
message:  A PHP Error was encountered

因此,几乎很清楚这不是颤振问题,只需确保您确实将您的姓名和密码从 TextEditingControllers 传递到您的 POST 请求。

为了验证这个理论,在请求中硬编码你的凭据,看看错误是否仍然存在并且没有改变,然后肯定去你的 php 代码。

body: {
      "email": 'email@gmail.com',
      "password": 'youSuperStrongpassword124234',
      "device": device,
    });

此外,你应该jsonEncode你的 POST 请求的正文。


推荐阅读