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 – 连续两个文本,左边一个优雅地溢出

利用 Flutter 如何优雅的调用 Android 原生方法?

在 Flutter 和 Dart 中重构小部件的最优雅/高效的方式

利用Kubernetes优雅地处理HTTP请求

Flutter NavigationBar 优雅的实现底部导航栏菜单

如何优雅地进行Flutter开发,GetX值得一试!