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

上一篇:vue移动端滚动插件better-scroll


下一篇:A better timer