Flutter http包的简单封装

Flutter http包的简单封装

依赖http
dependencies:
  flutter:
    sdk: flutter
    #网络
  http: ^0.13.1

执行 flutter pub get

网络请求类
import 'package:http/http.dart' as http;
typedef onError = void Function(int statusCode, Object error);
typedef onSuccess = void Function(dynamic data);
// typedef onTransform = dynamic Function(dynamic body);
const statusErrorCode = -200;
class NetWorkHelper {
 ///get request
  static Future requestGet(String url, onSuccess success,
      {Map<String, String>? params, Convert? transform, onError? error}) async {
    url = joinParams(params, url);
    try {
      Uri uri = Uri.parse(url);
      http.Response response = await http.get(uri);
      checkResponseData(response, transform, success, error);
    } catch (e) {
      print("package:net/network.dart error get data:$e");
      if (error != null) {
        error(statusErrorCode, e.toString());
      }
    }
  }

  ///Stitching parameters(拼接参数)
  static String joinParams(Map<String, String>? params, String url) {
    if (params != null && params.isNotEmpty) {
      StringBuffer stringBuffer = StringBuffer("?");
      params.forEach((key, value) {
        stringBuffer.write("$key" + "=" + "$value" + "&");
      });
      String paramStr = stringBuffer.toString();
      paramStr = paramStr.substring(0, paramStr.length - 1);
      url = url + paramStr;
    }
    return url;
  }

  ///post request
  static Future<dynamic> requestPost(String url, onSuccess success,
      {Map<String, String>? params, Convert? transform, onError? error}) async {
    try {
      Uri uri = Uri.parse(url);
      http.Response response = await http.post(
        uri,
        body: params,
      );
      checkResponseData(response, transform, success, error);
    } catch (e) {
      print("package:net/network.dart error post data:$e");
      if (error != null) {
        error(statusErrorCode, e.toString());
      }
    }
  }

  ///处理response
  static void checkResponseData(http.Response response, Convert? transform,
      onSuccess success, onError? error) {
    if (response.statusCode == 200) {
      dynamic data = response.body;
      if (transform != null) {
        data = transform.transform(data);
      }
      print("success get data:$data");
      success(data);
    } else {
      print('Request get failed with status: ${response.statusCode}');
      if (error != null) {
        error(response.statusCode, "fail get data");
      }
    }
  }      
}


数据转换
abstract class Convert {
  // Transform create();
  dynamic transform(dynamic data);
}


import 'dart:convert';

class JSONConvert extends Convert {
  @override
  dynamic transform(data) {
    return jsonDecode(data);
  }

  // Transform create() {
  //   return JsonTransform();
  // }
  static JSONConvert create() {
    return JSONConvert();
  }
}

Example
 //Json
 NetWorkHelper.requestPost(url, (data) {
      print("data=$data");
    },params: ,transform: JSONConvert.create());
 //www.baidu.com
 NetWorkHelper.requestGet(
      "https://www.baidu.com/",
      (data) {
        print("data=$data");
      },
    );

参考:Http库 网络请求封装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值