flutter开发 dio接口请求及返回处理的问题

发布于 2022-09-12 00:20:40 字数 1545 浏览 25 评论 0

我这里dio的配置如下:(不知道有没有写错,有错的话,请指出,初学者求教,谢谢^_^)

import 'dart:io';
import 'package:dio/dio.dart';

class BaseUrl {
  // 配置默认请求地址
  // static String url = 'http://xxxxxxxxx/'; // 测试环境
}

BaseOptions options = new BaseOptions(
  baseUrl: BaseUrl.url,
  connectTimeout: 5000,
  receiveTimeout: 3000,
  headers: {HttpHeaders.acceptHeader: "accept: application/json"},
);

Dio dio = new Dio(options);

登录的表单逻辑省略,直接上接口请求的逻辑如下:

print('用户名:' + _unameController.text + ',密码:' + _pwdController.text);
String url = "/xxxxx/login.json"; //接口
Response response = await dio.post(url, data: {
  "loginid": _unameController.text,
  "password": _pwdController.text
});
print(response);

以上写法的时候接口总是返回密码不能为空,如图:
TIM图片20191121144211.png
看print的密码明明是表单里输入的值,可是接口返回的是密码不能为空,明显不对;

然后修改写法:

print('用户名:' + _unameController.text + ',密码:' + _pwdController.text);
String url = "/xxxxx/login.json?loginid=${_unameController.text}&password=${_pwdController.text}";
Response response = await dio.post(url);
print(response);

这回,接口返回的提示正确了,因为是随便输入的账号密码,接口肯定是提示用户不存在,这就是对的返回,如图:
的.png

我现在的疑问是,上面的两种写法有什么不同?明明按照dio flutter 中文文档 的例子,上面第一种的写法也是对的吧,可是为什么参数传不过去呢?

另外,作为flutter的初学者,dart语言也不太会用,对于这个返回response我该如何处理?怎么写才能让返回的message能显示在页面上提示用户?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

陌上青苔 2022-09-19 00:20:40

对于response的处理,我自己搞出来了,初学者,真不容易:

//.... 前面的省略了
       Response response = await dio.post(url);
        // print(response);
        dynamic rtn = jsonDecode(response.toString()); // 解析接口返回的json数据
        // print(response.statusCode.toString() + ' : ' + rtn.toString());
        if (response.statusCode == HttpStatus.ok) {
          // print(rtn["code"]);
          // print(rtn["message"]);
          if (rtn["code"] == '1') {
            // 登录成功 写一堆自己的操作.....此处省略
            
            //返回到首页
            Navigator.of(context).pop();
          } else {
            // 登录失败
            // print(response);
            // print(rtn["message"]);
            showToast(rtn["message"]);
          }
        } else {}

关于问题中两种post请求写法的疑问,请大神解答下啊,谢谢^_^

明月松间行 2022-09-19 00:20:40

应该是头文件设置的问题吧,加access-control-allow-origin:* 试试呢

陌路黄昏 2022-09-19 00:20:40

请问楼主问题后来怎么解决的 我也碰到了相同的问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文