Flutter Dio网络请求异常处理
2023-09-14 09:04:29 时间
try {
Response r = await dio.get("https://www.instagram.com");
print(r.headers);
}on DioError catch(e){
print(e);
print(e.response.statusCode);
}
我的代码操作如下
void _submitData () async {
try {
//处理图片
List<MultipartFile> imageList = new List<MultipartFile>();
for (Asset asset in images) {
//将图片转为二进制数据
ByteData byteData = await asset.getByteData();
List<int> imageData = byteData.buffer.asUint8List();
MultipartFile multipartFile = new MultipartFile.fromBytes(
imageData,
//这个字段要有,否则后端接收为null
filename: 'load_image',
//请求contentType,设置一下,不设置的话默认的是application/octet/stream,后台可以接收到数据,但上传后是.octet-stream文件
contentType: MediaType("image", "jpg"),
);
imageList.add(multipartFile);
}
FormData formData = FormData.fromMap({
//后端要用multipartFiles接收参数,否则为null
"photos" : imageList,
"text" : _momentController.text
});
// var res = await Dio().post("你的URL", data: formData);
//后面随意发挥
var apiUrl = "http://47.242.63.216:9527/v1/moment";
SharedPreferences prefs = await SharedPreferences.getInstance();
var tokens = prefs.getString("token");
// 后端接口的其他参数
Map<String, dynamic> params = Map();
//网络请求添加token请求头
Response result = await Dio().post(apiUrl,
data: formData, options: Options(headers: {"x-token": tokens}));
debugPrint("${result}");
// 使用 dio 上传图片
// var response = await dio.post(url, data: formData, queryParameters: params);
//
// do something with response...
//json解析
Map<String, dynamic> authCode = json.decode(result.toString());
var mes = PublishMomentData.fromJson(authCode);
if (mes.code == 200) {
Fluttertoast.showToast(
msg: "发布成功",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 10,
backgroundColor: Colors.white,
textColor: Colors.black,
fontSize: 16.0);
//返回动态界面
Navigator.pop(context);
Navigator.pop(context);
} else {
Fluttertoast.showToast(
msg: "发布失败",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 10,
backgroundColor: Colors.white,
textColor: Colors.black,
fontSize: 16.0);
}
}on DioError catch(e){
Fluttertoast.showToast(
msg: "${e}",
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
timeInSecForIosWeb: 10,
backgroundColor: Colors.white,
textColor: Colors.black,
fontSize: 16.0);
print(e);
print(e.response.statusCode);
}
}
相关文章
- Flutter状态管理新的实践
- Flutter游戏引擎Flame初探,实现是男人就坚持100秒
- 【Flutter&Flame 游戏 - 壹】开启新世界的大门
- 【Flutter&Flame 游戏 - 贰】操纵杆与角色移动
- 【Flutter&Flame 游戏 - 伍】 Canvas 参上 | 角色的血条
- flutter工程化-带你一步步搭建企业级app架构
- Flutter 组件集录 | 师于源码 - 与 TapRegion 的相遇
- Flutter 开发 (1)iOS 下超详细集成 Flutter
- 【错误记录】Flutter 设备连接显示 Loading... ( 断网 | 删除 flutter/bin/cache/lockfile 文件 )
- 【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )
- 【Flutter】Flutter 混合开发 ( 简介 | Flutter 混合开发集成步骤 | 创建 Flutter Module )
- 【错误记录】发布 Flutter 插件包报错 ( It‘s strongly recommended to include a “homepage“ or “repository“ field )