flutter 对dio进行简单的二次封装

前言

在项目中,我们往往要对第三方框架进行二次封装,目的在于减小项目对第三方框架的依赖,当第三方框架出现不兼容或者严重bug以至于我们需要更换第三方框架时,我们只需要在封装的地方更改第三方框架,而不需要在整个项目中进行更改。

下面我们封装对dio进行简单的二次封装

代码

import 'dart:ffi';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

typedef onSuccess(dynamic data);

typedef onError(String reason, int statusCode);

typedef onComplete();

class Http {
  // 项目的baseurl
  static const BASE_URL = "";

  factory Http() => _getInstance();

  static Http get instance => _getInstance();

  static Http _instance;

  Dio _dio;

  Http._internal() {
    // 可以在自己按需要配置
    _dio = Dio(BaseOptions(
      baseUrl: BASE_URL,
    ));
  }

  static Http _getInstance() {
    if (_instance == null) {
      _instance = new Http._internal();
    }
    return _instance;
  }

  void get(String path,
      {Map param,
      onSuccess success,
      onError error,
      onComplete complete}) {
    _dio.get(path, queryParameters: param).then((value) {
      if (value.statusCode == 200) {
        if (success != null) {
          success(value.data);
        }
      } else {
        if (error != null) {
          error(value.statusMessage, value.statusCode);
        }
      }

      if (complete != null) {
        complete();
      }
    });
  }

  void post(String path,
      {data,
      Map param,
      onSuccess success,
      onError error,
      onComplete complete}) {
    _dio.post(path, data: data, queryParameters: param).then((value) {
      if (value.statusCode == 200) {
        if (success != null) {
          success(value.data);
        }
      } else {
        if (error != null) {
          error(value.statusMessage, value.statusCode);
        }
      }

      if (complete != null) {
        complete();
      }
    });
  }
}

这里我们使用单例模式进行封装,在项目中的使用我们个调用Http.instance.get或者Http.instance.post。

你可能感兴趣的:(flutter,设计模式,flutter,android,ios)