Flutter前后端连接的一些注意
1.前端接口使用
在http_config里将BASE_URL改成 *http://本地ip地址:8082/ssp*
本地ip地址 cmd→ipconfig→ipv4地址
在使用接口的文件中引入http_config和http_request(network包下,之前没有,现在有了)
在文件中直接使用,不要重复写BASE_URL了
HttpRequest.request("$BASE_URL/接口路径",
method:接口方式,
params:{
传递参数键值对
}).then((value){
对返回值value的处理
})
传递的数据最好用AesUtil.aesEncrypt()进行加密处理,需要引入Utils包下的AesUtil.dart
加密前后的数据
2.后端接口使用
后端接口的返回类型统一用Result
成功可以返回
Result.ok()//没有返回值
Result.ok(msg)//只返回提示消息
Result.ok(data)//只返回数据
Result.ok(data,msg)//返回数据和提示消息(之前没有,现在有了)
失败可以返回
Result.error(msg)//返回错误消息
Result.error(code,msg)//返回错误代码和错误消息
后端也有AesUtil来加密和解密,在utils包下
aesEncrypt是加密算法,aesDecrypt是解密算法,后端往前端传数据也可以进行加密。
后端向前端传消息和数据,尽量只传前端需要的数据,保护数据安全,防止数据泄露。
3.返回数据处理
后端传来的数据需要用jsonDecode解码,jsonDecode的参数类型是String,传来的数据要toString
接口返回数据和json解码数据
接口返回数据:{"success":true,"message":"登录成功","code":200,"result":{"id":1,"name":"jack","phone":"13512345678","password":"123456","sex":"男"},"timestamp":1626788909039}
json解码数据:{success: true, message: 登录成功, code: 200, result: {id: 1, name: jack, phone: 13512345678, password: 123456, sex: 男}, timestamp: 1626788909039}
用中括号[]来取json解码的数据,数据中用{}嵌套的数据需要用[]嵌套来取,如取data中的result中的phone
String phone = data['result']['phone'];
对返回的数据进行校验,需要状态码code为200即操作成功才能进行后续操作,否则就要提示错误,停止后续操作。
不要把接口的错误直接暴露给用户,封装一下提示一下“操作错误”就行
//http_request.dart文件
import 'package:dio/dio.dart';
import 'package:sui_shou_pai/Utils/storage_util.dart';
import 'http_config.dart';
class HttpRequest {
// 1、创建DIO实例
static BaseOptions baseOptions =
BaseOptions(baseUrl: BASE_URL, connectTimeout: TIMEOUT);
static final dio = Dio(baseOptions);
// 2、发送76 网络请求
static Future request(String url,
{String method = 'get',
Map<String, dynamic> params,
dynamic data,
String token}) async {
// Options options = Options(method: method, headers: );
Options options =
Options(method: method, headers: {"token": token.toString()});
// dio.options.method = method;
// dio.options.baseUrl = BASE_URL;
try {
final result = await dio.request(url,
queryParameters: params, options: options, data: data);
String token = result.headers.value("token");
if (token != null) {
StorageUtil.setStringItem("token", token);
}
return result;
} on DioError catch (err) {
print("err:$err");
throw err;
}
}
// 3、封装下载
void upLoad() {}
}
//http_config.dart文件
const BASE_URL = "http://ip地址:端口号";
const TIMEOUT = 5000;//连接超时