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

我这里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能显示在页面上提示用户?

阅读 8.8k
3 个回答

对于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请求写法的疑问,请大神解答下啊,谢谢^_^

新手上路,请多包涵

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏