Как отправить данные через API во Flutter? - PullRequest
0 голосов
/ 04 марта 2020

Когда я пытаюсь войти (параметр email и пароль) через API, данные передаются в формате строки, но я хочу разместить данные в формате формы. Из-за этой проблемы, когда я передаю данные, он не принимает значение параметра и показывает ноль и выдает ошибку. Итак, как я могу решить эту проблему?

> This _loginUser() method In call on login button click.


_loginUser(context) async {
    Map<String, dynamic> loginBodyResponse = {
      "email": _emailController.text,
      "password": _passswordController.text,
    };
    try {
      setState(() {
        _isLoading = true;
      });
> APIs call
      Map loginResponse = await NetworkHttp.postHttpMethod(
          '${AppConstants.apiEndPoint}${AppConstants.loginApi}',
          loginBodyResponse);

          print('email:' + _emailController.text);
          print('Password:' + _passswordController.text);
          print(loginBodyResponse);

      print('===================Login Response=========================');
      print(loginResponse['body']);

      print(loginResponse['body']['login']);

      print("---------------------------");
      if (loginResponse['body']['status'] != "success") {
        setState(() {
          _isLoading = false;
        });
        String errormessage = loginResponse['body']['msg'];
        print("---------------------------");
        print(errormessage);

        ErrorDialog.showErrorDialog(context, errormessage, "Error");
      } else {
        print("Login Successfully");
        print("============================================");
        setState(() {
          _isLoading = false;
        });
        NavigatorHelper.verifyOtpScreen(context);
      }
    } catch (e) {
      setState(() {
        _isLoading = false;
      });
      ErrorDialog.showErrorDialog(context, e.toString(), "Error");
      print('error while login $e');
    }
  }

Класс NetworkHttp, который я использовал в приведенном выше коде. когда я пытаюсь войти в систему, в консоли отображается нулевой параметр

class NetworkHttp {
  static Future<Map<String, String>> _getHeaders() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    final String token = prefs.getString('token');
    if (token != null) {
      return {
        'Content-type': 'application/json',
        'Accept': 'application/json',
        'AccessToken': '$token',
      };
    } else {
      return {
        'Content-type': 'application/json',
        'Accept': 'aapilcation/json',
      };
    }
  }

static Future<Map<String, dynamic>> postHttpMethod(String url, body) async {
    print('url');
    print(url);
    print('body');
    print(body);
    Map headers = await _getHeaders();
    print('headers');
    print(headers);
    http.Response response = await http.post(
      url,
      headers: headers,
      body: json.encode(body),
    );
    Map<String, dynamic> responseJson = {
      'body': json.decode(response.body),
      'headers': response.headers
    };
    return responseJson;
  }

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Просто добавьте заголовки с помощью json_data.

Future<login> requestLogin(String username, String password , String device_id) async {
      Map<String, String> headers = {"Content-type": "application/x-www-form-urlencoded"};
      var json_body = { 'email' : username , 'password': password ,'device_id': device_id};

      if(token != null){
        headers.addAll({"Authorization" : "Bearer "+token});
      }
      //  make POST request
      final response = await http.post(baseUrl+ "/login", headers: headers, body: json_body);
      print(response.body);
      if (response.statusCode == 200) {
        // If server returns an OK response, parse the JSON.
        // return Post.fromJson(json.decode(response.body));
        print(response.body);
        return login.fromJson(json.decode(response.body));
      } else {
        // If that response was not OK, throw an error.
        throw Exception(response.body);
      }
    }
0 голосов
/ 04 марта 2020

С вашим запросом на публикацию просто передайте ваши параметры следующим образом

Ваш запрос на публикацию должен выглядеть примерно так:

response = await http.post("your_api_url",
                           body:{"email" : "value",
                                 "password" : "value"});
...