首页 > 解决方案 > SyntaxError:Flutter 中 JSON 输入的意外结束

问题描述

我试图为我的颤振应用程序建立一个注册后端。为了做到这一点,我有这个类:

class _MyHomePageState extends State<MyHomePage> {
  bool verifyButton = false;

  TextEditingController user = TextEditingController();
  TextEditingController pass = TextEditingController();

  String verifylink;
  Future signUp() async {
    if (user.text.isNotEmpty) {
      var response = await http.post(
          'https://mydomammmmmmmin.com/signup.php',
          body: {"username": user.text, "password": pass.text});
      var link = json.decode(response.body);

      verifylink = link;

      sendMail();

      setState(() {
        verifyButton = true;
      });

      //print(verifylink);

      showToast(
          "Thanks for registering with Flutter localhost. Please click this link to complete this registation",
          duration: 4,
          gravity: Toast.CENTER);
    } else {
      showToast("Enter Username and password first",
          duration: 3, gravity: Toast.TOP);
    }
  }

但是,当我按下按钮时,总是会出现这个问题:

Error: FormatException: SyntaxError: Unexpected end of JSON input
    at Object.throw_ [as throw] (http://localhost:54346/dart_sdk.js:5340:11)
    at Object._parseJson (http://localhost:54346/dart_sdk.js:49770:19)
    at JsonDecoder.convert (http://localhost:54346/dart_sdk.js:47520:22)
    at JsonCodec.decode (http://localhost:54346/dart_sdk.js:47217:48)
    at main._MyHomePageState.new.signUp (http://localhost:54346/packages/ftesty/Welcome.dart.lib.js:1821:35)
    at signUp.next (<anonymous>)

注意:我也认为问题出在 php 文件中,所以这是我用于注册的 php 文件:


<?php 
    $db = mysqli_connect("localhost","db_","","dbuser");
    if(!$db){
        echo "Database connect error".mysqli_error();
    }
    
    $username = $_POST['username'];
    $password = $_POST['password'];

    $token = md5(rand('10000', '99999'));
    
    $insert = $db->query("INSERT INTO login(username,password,token)VALUES('".$username."','".$password."','".$token."')");
    if($insert){
        $lastId = mysqli_insert_id($db);

        $url = 'http://'.$_SERVER['SERVER_NAME'].'/mydommmain.com/verify.php?id='.$lastId.'&token='.$token;
        
        echo json_encode($url);
    }

mm我不确定,有什么想法吗?

标签: mysqlfluttersyntax-error

解决方案


试试这个你需要添加json.encode到身体

var response = await http.post(Uri.parse("https://mydomammmmmmmin.com/signup.php"),
        headers: {"Content-Type": "application/json"},
        body: json.encode({
          "username": user.text,
          "password": pass.text,
        }));

    print("response menu " + response.body.toString());

推荐阅读