api.dart 1.8 KB
// Dio 网络请求工具类
import 'dart:convert';

import 'package:clx_flutter_message/clx_flutter_message.dart';
// ignore: depend_on_referenced_packages
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';

class Api {
  static final dio = messageConfig.dio;

  // 构建网络请求同步请求
  Future<dynamic> requestSync({
    required String requestUrl,
    required Method method,
    Map<String, dynamic>? queryParameters,
    Object? data,
  }) async {
    try {
      var response = await dio?.request(
        requestUrl,
        queryParameters: queryParameters,
        data: data,
        options: _checkOptions(method.value),
      );
      try {
        var data = response?.data;

        if (data is Map) {
          return data;
        } else if (data is String) {
          return _jsonDecode(data);
        }

        return data;
      } catch (e) {
        debugPrint("数据解析错误:${e.toString()}");
        return {"code": 400, "message": "数据解析错误"};
      }
    } on DioException catch (e) {
      if (e.response != null) {
        debugPrint(
            "请求错误:${e.response!.statusCode} ${e.response!.requestOptions.path}");
      } else {
        // Something happened in setting up or sending the request that triggered an Error
        debugPrint("请求错误:${e.error}");
      }
      return {"code": 500, "message": "服务器请求错误"};
    }
  }

  // Options
  Options _checkOptions(String method) {
    Options options = Options();
    options.method = method;
    return options;
  }

  // jsonDecode
  Map<String, dynamic> _jsonDecode(String json) {
    return jsonDecode(json);
  }
}


enum Method {
  get,
  post,
  put,
  patch,
  delete,
}

extension MethodExtension on Method {
  String get value => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'][index];
}