如何在flutter中参数传递get方法

时间:2021-04-26 14:41:39

标签: flutter http dart get

我尝试使用 get 方法进行参数传递,并且我创建了一个获取 jsondata 的模型,但出现 500 错误。但是在这里工作的邮递员附上了我的代码,请解决我的问题。 enter image description here

sigin() async {
  var params = {
    "username": "XYZ_32950",
    "password": "XYZ_39510",
    "ProjectName": "ABCD"
  };

  Uri uri = Uri.parse("http://abcd.abcd.co.in/api/login");
  uri.replace(queryParameters: params);

  var response = await http
      .get(uri, headers: {HttpHeaders.contentTypeHeader: "application/json"});
  print('---- status code: ${response.statusCode}');
  var jsonData = json.decode(response.body);
  if (jsonData != null) {
    User data = User.fromJson("user");
    return data;
  } else {
    isLoading = false;

    return null;
  }
}
class User {
  String _loginStatus;
  String _Status;
  String _DivisionName;
  User.fromJson(jsonData) {
    this._loginStatus = jsonData['loginStatus'];
    this._Status = jsonData['Status'];
    this._DivisionName = jsonData['DivisionName'];
  }
  String get loginStatus => _loginStatus;
  String get Status => _Status;
  String get DivisionName => _DivisionName;
  set DivisionName(String value) {
    _DivisionName = value;
  }
  set Status(String value) {
    _Status = value;
  }
  set loginStatus(String value) {
    _loginStatus = value;
  }
}

2 个答案:

答案 0 :(得分:0)

这应该有效, 而不是使用 Uri.parse 使用 Uri.http

sigin(String url) async {
  final base_url = 'devfield.ppms.co.in';
  final path = '/HRMS_WEBAPI/api/login';
  var params = {
    "username": "XYZ_39510",
    "password": "XYZ_39510",
    "ProjectName": "PPMS"
  };
  try {
    final response = await http.get(
      Uri.http(base_url, path, params),
      headers: {HttpHeaders.contentTypeHeader: "application/json"},
    );
    // response

  } catch (e) {
    // error handling
  }
}

答案 1 :(得分:0)

基于 Postman 项目,您的代码不正确。主要问题是参数没有像您的代码所建议的那样作为 GET 变量(查询参数)发送,而是作为 JSON 编码的正文发送。

我已经重写了你的代码,所以它和你的 Postman 项目建议的一样:

class User {
  String? loginStatus;
  String? status;
  String divisionName;

  User.fromJson(dynamic jsonData)
      : this.loginStatus = jsonData['loginStatus'] as String?,
        this.status = jsonData['Status'] as String?,
        this.divisionName = jsonData['DivisionName'] as String;

  @override
  String toString() =>
      'loginStatus: $loginStatus, status: $status, divisionName: $divisionName';
}

Future<User?> signIn() async {
  final params = utf8.encode(json.encode({
    "username": "XYZ_39510",
    "password": "XYZ_39510",
    "ProjectName": "PPMS"
  }));

  final request = await HttpClient().openUrl(
      'GET', Uri.parse('http://devfield.ppms.co.in/HRMS_WEBAPI/api/login'))
    ..headers.contentType = ContentType.json
    ..headers.contentLength = params.length
    ..add(params);
  //await request.flush();
  final response = await request.close();

  print('---- status code: ${response.statusCode}');
  final jsonData = await response
      .transform(const Utf8Decoder())
      .transform(const JsonDecoder())
      .single;

  if (jsonData != null) {
    final user = User.fromJson((jsonData as List<dynamic>).first)
    print('---- divisionName--->: ${user.divisionName}');
    return user;
  } else {
    //isLoading = false;
    return null;
  }
}

我应该注意,我没有使用 http 包,而是使用了 dart:io。如果这是一个问题,请告诉我,我可以尝试重写它。