简体   繁体   中英

How to solve http error code 400 missing parameters in flutter?

I have a signup page where i am making a http.post request to the server by passing the parameters email,username,password,firstname and lastname. I have tried everything but couldn't solve the problem. Whenever i tap on the signup button it says the following-- "I/flutter ( 2914): 400 I/flutter ( 2914): {"code":"rest_missing_callback_param","message":"Missing parameter(s): email, username, password","data":{"status":400,"params":["email","username","password"]}}"

I have gone through other posts but they didnt solve my problem so please help. Thanks in advance.

import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:restaurant_app/globalVar.dart';
import 'package:restaurant_app/homescreen.dart';

class SignUp extends StatefulWidget {
 @override
 _SignUpState createState() => _SignUpState();
}

class _SignUpState extends State<SignUp> with SingleTickerProviderStateMixin 
 {
  TabController controller;
 TextEditingController _firstnameController;
 TextEditingController _lastnameController;
 TextEditingController _usernameController;
 TextEditingController _emailController;
 TextEditingController _passwordController;
 TextEditingController _rePasswordController;

 bool loading;

 final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState> 
 ();

 @override
 void initState() {
  // TODO: implement initState
  super.initState();
  controller = new TabController(length: 2, vsync: this);
  loading = false;
  _firstnameController = new TextEditingController(text: "Vishal");
  _lastnameController = new TextEditingController(text: "Das");
  _usernameController = new TextEditingController(text: "vishaldas");
_emailController = new TextEditingController(text: "vissudas@gmail.com");
_passwordController = new TextEditingController(text: "Vishal@123");
_rePasswordController = new TextEditingController(text: "Vishal@123");
}

@override
void dispose() {
// TODO: implement dispose
super.dispose();
controller.dispose();
setState(() {
  loading = false;
});

_emailController.dispose();
_usernameController.dispose();
_passwordController.dispose();
_firstnameController.dispose();
_lastnameController.dispose();
_rePasswordController.dispose();

}

  //  static final String fullnameKey = 'fullname';
  //  static final String emailKey = 'email';
  //  static final String passwordkey = 'password';

signUp(email, username, password, firstname, lastname) async {
setState(() {
  loading = true;
});

var body = json.encode({
  "email": email,
  "username": username,
  "password": password,
  "firstname": firstname,
  "lastname": lastname,
});

String basicAuth =
    'Basic' + base64Encode(utf8.encode('$username:$password'));

Map<String, String> headers = {
  HttpHeaders.AUTHORIZATION: basicAuth,
};

print(basicAuth);

await http
    .post("${GlobalVar.url}wp-json/wc/v2/customers",
        body: body, headers: headers)
    .then((response) {
  var body = json.decode(response.body);
  print(response.statusCode);
  print(response.body);
  if (response.statusCode == 200) {
    loading = false;
    Navigator.pushReplacement(context,
        MaterialPageRoute(builder: (BuildContext ctx) => HomePage()));
  } else {
    final snackBar = SnackBar(content: Text(body['message']));
    _scaffoldKey.currentState.showSnackBar(snackBar);
  }
  setState(() {
    loading = false;
  });
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
  resizeToAvoidBottomPadding: false,
  key: _scaffoldKey,
  body: Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage('images/art.png'),
        fit: BoxFit.fill,
        colorFilter: ColorFilter.mode(
            Colors.white12.withOpacity(0.2), BlendMode.dstATop),
      ),
    ),
    child: ListView(
      shrinkWrap: true,
      physics: BouncingScrollPhysics(),
      children: <Widget>[
        SizedBox(
          height: MediaQuery.of(context).size.height / 35,
        ),
        Align(
          alignment: Alignment.topCenter,
          child: CircleAvatar(
            backgroundColor: Colors.grey,
            radius: 55.0,
            backgroundImage: AssetImage('images/logo.png'),
          ),
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 40,
        ),
        Stack(
          alignment: Alignment.center,
          children: <Widget>[
            SizedBox(
              height: 2.0,
              child: new Center(
                child: new Container(
                  height: 10.0,
                  color: Colors.black12,
                ),
              ),
            ),
            Row(
              children: <Widget>[
                SizedBox(
                  width: MediaQuery.of(context).size.width / 4,
                ),
                Chip(
                  label: Text(
                    "SIGN IN",
                    style: TextStyle(color: Colors.white, fontSize: 18.0),
                  ),
                  backgroundColor: Color(0xFFD1A155),
                ),
                SizedBox(
                  width: MediaQuery.of(context).size.width / 35,
                  child: Container(
                    width: MediaQuery.of(context).size.height / 12,
                    height: 2.0,
                    color: Colors.white,
                  ),
                ),
                Chip(
                  label: Text(
                    "SIGN UP",
                    style: TextStyle(color: Colors.white, fontSize: 18.0),
                  ),
                  backgroundColor: Colors.black87,
                ),
              ],
            )
          ],
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 30,
        ),
        Align(
            alignment: Alignment.center,
            child: Text(
              "Sign Up Maa ki Rasoi",
              style: TextStyle(
                fontSize: 20.0,
                color: Color(0xFFD1A155),
              ),
            )),
        SizedBox(
          height: MediaQuery.of(context).size.height / 30,
        ),
        Column(
          children: <Widget>[
            Theme(
              data: ThemeData(
                hintColor: Colors.black26,
                primaryColor: Color(0xFFD1A155),
              ),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _firstnameController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.person,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'First name',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.text,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Theme(
              data: ThemeData(
                hintColor: Colors.black26,
                primaryColor: Color(0xFFD1A155),
              ),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _lastnameController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.person,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'Last name',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.text,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Theme(
              data: ThemeData(
                  primaryColor: Color(0xFFD1A155),
                  hintColor: Colors.black26),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _emailController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.email,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'Email Address',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.emailAddress,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Theme(
              data: ThemeData(
                hintColor: Colors.black26,
                primaryColor: Color(0xFFD1A155),
              ),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _usernameController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.supervised_user_circle,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'Username',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.text,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Theme(
              data: ThemeData(
                hintColor: Colors.black26,
                primaryColor: Color(0xFFD1A155),
              ),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _passwordController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.lock,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'Password',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.text,
                  obscureText: true,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Theme(
              data: ThemeData(
                  primaryColor: Color(0xFFD1A155),
                  hintColor: Colors.black26),
              child: Padding(
                padding: const EdgeInsets.only(left: 15.0, right: 15.0),
                child: TextField(
                  controller: _rePasswordController,
                  decoration: InputDecoration(
                      border: OutlineInputBorder(borderSide: BorderSide()),
                      prefixIcon: Icon(
                        Icons.lock,
                        color: Color(0xFFD1A155),
                      ),
                      hintText: 'Re - Password',
                      hintStyle: TextStyle(
                          color: Colors.black,
                          fontWeight: FontWeight.w400)),
                  keyboardType: TextInputType.text,
                  obscureText: true,
                ),
              ),
            ),
            SizedBox(
              height: MediaQuery.of(context).size.height / 50,
            ),
            Padding(
              padding: const EdgeInsets.only(left: 15.0, right: 15.0),
              child: InkWell(
                onTap: () {
                  print(_emailController.text);
                  print(_passwordController.text);
                  print(_usernameController.text);
                  signUp(
                    _emailController.text,
                    _usernameController.text,
                    _passwordController.text,
                    _firstnameController.text,
                    _lastnameController.text,
                  );
                },
                child: loading
                    ? CircularProgressIndicator()
                    : Container(
                        height: MediaQuery.of(context).size.height / 13,
                        //width: MediaQuery.of(context).size.height / 1.8,
                        decoration: BoxDecoration(
                          color: Color(0xFFD1A155),
                          borderRadius: BorderRadius.circular(5.0),
                        ),
                        child: Center(
                          child: Text(
                            "SIGN UP",
                            style: TextStyle(
                                color: Colors.white, fontSize: 18.0),
                          ),
                        ),
                      ),
              ),
            )
          ],
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 30,
        ),
        Stack(
          alignment: Alignment.center,
          children: <Widget>[
            SizedBox(
              height: 2.0,
              child: new Center(
                child: new Container(
                  height: 10.0,
                  color: Colors.black12,
                ),
              ),
            ),
            Container(
              height: MediaQuery.of(context).size.height / 18,
              width: MediaQuery.of(context).size.height / 11,
              decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(23.0),
                  color: Colors.white,
                  border: Border.all(color: Colors.black12)),
              child: Center(
                  child: Text(
                "OR",
                style: TextStyle(fontSize: 18.0),
              )),
            ),
          ],
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 40,
        ),
        Padding(
          padding: const EdgeInsets.only(left: 15.0, right: 15.0),
          child: Row(
            children: <Widget>[
              Container(
                height: MediaQuery.of(context).size.height / 13,
                width: MediaQuery.of(context).size.width / 2.2,
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(5.0),
                    color: Colors.white,
                    border: Border.all(color: Colors.black12)),
                child: Row(
                  children: <Widget>[
                    SizedBox(
                      width: 18.0,
                    ),
                    Icon(Icons.tag_faces),
                    SizedBox(
                      width: 10.0,
                    ),
                    Text(
                      "Facebook",
                      style: TextStyle(fontSize: 22.0, color: Colors.blue),
                    ),
                  ],
                ),
              ),
              SizedBox(
                width: MediaQuery.of(context).size.width / 40,
              ),
              Container(
                height: MediaQuery.of(context).size.height / 13,
                width: MediaQuery.of(context).size.width / 2.3,
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(5.0),
                    color: Colors.white,
                    border: Border.all(color: Colors.black12)),
                child: Row(
                  children: <Widget>[
                    SizedBox(
                      width: 18.0,
                    ),
                    Icon(Icons.tag_faces),
                    SizedBox(
                      width: 10.0,
                    ),
                    Text(
                      "Google+",
                      style: TextStyle(fontSize: 22.0, color: Colors.red),
                    ),
                  ],
                ),
              ),
            ],
          ),
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 30,
        ),
        Align(
          alignment: Alignment.center,
          child: InkWell(
            onTap: () => Navigator.pop(context),
            child: RichText(
                text: TextSpan(
                    text: "Already have an account?",
                    style: TextStyle(fontSize: 20.0, color: Colors.black87),
                    children: <TextSpan>[
                  TextSpan(
                      text: ' Log in',
                      style: TextStyle(
                          color: Color(0xFFD1A155),
                          fontWeight: FontWeight.bold)),
                ])),
          ),
        ),
        SizedBox(
          height: MediaQuery.of(context).size.height / 40,
        ),
       ],
      ),
    ),
  );
 }
}

Error code 400 commonly occurs due to bad requests that the server is unable to process (ie unexpected parameters, malformed syntax). If what has been mentioned in the comments is correct, and woocommerce is being used here, there's no way that I can test your setup. But what I can suggest is testing your config in a client following this guide . Postman is a commonly used tool that I can suggest to test HTTP Requests. If the API works well with Postman but the request still has issues in Flutter, we can start from there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM