Flutter http 优雅的处理@RquestParam参数
Posted dingwen_blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter http 优雅的处理@RquestParam参数相关的知识,希望对你有一定的参考价值。
一、Uri注意事项
新版本url不在是String类型需要进行转化,否则报错。
我在flutter{参数类型’String’不能分配给参数类型’Uri’}[关闭]中使用http包时遇到了这个问题
Uri.parse(你的请求地址(String))
二、参数拼接工具类
/// 参数处理小工具
/// @author: dingwen
/// @date: 2021/5/1
class ParamsUtil {
/// map to uri
static String mapToUri(Map map) {
int index = 0;
String uri = '';
map.forEach((key, value) {
if (index == 0) {
uri += "?" + '$key' + "=" + '$value';
} else if (index != map.length) {
uri += "&" + '$key' + "=" + '$value';
} else {
uri += '$key' + "=" + '$value';
}
index++;
});
return uri;
}
}
三、实例
1.方法
import 'dart:async';
import 'dart:convert';
import 'package:daily_score_mobile/model/student_info_model.dart';
import 'package:daily_score_mobile/model/student_model.dart';
import 'package:daily_score_mobile/util/params_util.dart';
import 'package:http/http.dart' as http;
import 'package:daily_score_mobile/constant/api_constant.dart';
import 'package:fluttertoast/fluttertoast.dart';
/// student 数据访问接口
/// @author: dingwen
/// @date: 2021/5/1
class StudentDao {
/// 登录
static Future<StudentModel> login({Map data}) async {
final response = await http.post(Uri.parse(login_uri),
headers: {"content-type": "application/json"},
body: jsonEncode(data)).catchError((onError){
Fluttertoast.showToast(msg: "服务器异常,请联系管理员",);
});
Utf8Decoder utf8decoder = Utf8Decoder(); // fix 中文乱码
var result = json.decode(utf8decoder.convert(response.bodyBytes));
if (result['code'] == 200) {
return StudentModel.fromJson(result['data']);
} else if (result['code'] == 400 || result['code'] == 600) {
Fluttertoast.showToast(msg: "登录失败,用户名或密码错误!",);
return null;
}else {Fluttertoast.showToast(msg: "服务器异常,请联系管理员",);
return null;
}
}
}
2.调用
/// 登录
Future<bool> login() async {
if (_account == null) {
Fluttertoast.showToast(msg: "账号不能为空",);
return Future.value(false);
}
if (_password == null) {
Fluttertoast.showToast(msg: "密码不能为空",);
return Future.value(false);
}
Map student = {"studentId": _account, "studentPassword": _password};
StudentModel studentModel = await StudentDao.login(data: student);
if (studentModel != null) {
PreferenceUtils.instance.saveString("studentId", studentModel.studentId);
return Future.value(true);
} else {
return Future.value(false);
}
}
}
以上是关于Flutter http 优雅的处理@RquestParam参数的主要内容,如果未能解决你的问题,请参考以下文章
利用 Flutter 如何优雅的调用 Android 原生方法?
在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式