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);
    }
  }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dingwen_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值