flutter利用get中的GetConnect实现拦截请求

1、baseProvider.dart 文件,里面实现请求的拦截和响应的处理

c 复制代码
import 'dart:convert';

import 'package:company_manage_flutter/config/setting.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get_connect/connect.dart';

class BaseProvider extends GetConnect {
  @override
  void onInit() {
    super.onInit();
    print('拦截器初始化');
    httpClient.baseUrl = ProjectConfig.baseUrl;

    // 请求拦截
    httpClient.addRequestModifier<void>((request) {
      print('====================请求拦截====================');
      // 获取 POST 请求的参数
      var uri = Uri.parse(request.url.toString());
      var extra = uri.queryParameters;
      if (extra["isShowLoading"] == "1") {
        EasyLoading.show(status: '请求中');
      }

      //  request.headers['Authorization'] = '12345678';
      return request;
    });

    // 响应拦截
    httpClient.addResponseModifier((request, response) {
      print('====================响应拦截====================');
      print(response.body);
      EasyLoading.dismiss();
      // 将 body 转换为 Map 类型
    
      return response;
    });
  }
}

2、封装接口文件userAPI.dart

c 复制代码
import 'dart:convert';

import 'package:company_manage_flutter/api/formateResponse.dart';
import 'package:company_manage_flutter/utils/baseProvider.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get_connect/connect.dart';

class UserApi extends BaseProvider {
  UserApi() {
    onInit();
  }

  //登录
  Future<List<dynamic>> loginAPI({Map<String, dynamic>? params}) async {
    var response = await post('/app/login', params, query: requestExtraParams);
    List<dynamic> result = formateResponse(response);
    return result;
  }
}

3、封装响应数据和请求参数

c 复制代码
import 'dart:convert';

import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get_storage/get_storage.dart';

List<dynamic> formateResponse(response) {
  Map<String, dynamic> result = jsonDecode(response.body.toString());
  print('返回结果${result}');
  if (response.statusCode == 200) {
    if (result["code"] != 200) {
      EasyLoading.showError(result["msg"]);
      return [result["msg"], null];
    } else {
      return [null, result];
    }
  } else {
    EasyLoading.showError('请求错误,请稍后再试!');
    return ["请求错误,请稍后再试", null];
  }
}

Map<String, dynamic> requestExtraParams = {"isShowLoading": "1"};

Map<String, dynamic> getTokenParams(Map<String, dynamic>? params) {
  GetStorage box = GetStorage();
  Map<String, dynamic> loginUser = box.read('loginUser');
  Map<String, dynamic> tokenParams = {
    "token": loginUser["token"],
    "uid": loginUser["uid"],
  };
  // 合并 params 和 tokenParams
  Map<String, dynamic> mergedParams = {
    ...params ?? {},
    ...tokenParams,
  };
  return mergedParams;
}

4、具体使用

c 复制代码
  	 params = {"login": "admin", "password": "admin"};
      List<dynamic> result = await userApi.loginAPI(params: params);
      if (result[0] != null) return;
      Map<String, dynamic> data = result[1];
      //1、把数据存储到story 和 状态中
      GetStorage box = GetStorage();
      box.write('loginUser', data);
      loginController.setLoginUser(data);
      Get.to(IndexPage());
相关推荐
别拿曾经看以后~43 分钟前
【el-form】记一例好用的el-input输入框回车调接口和el-button按钮防重点击
javascript·vue.js·elementui
我要洋人死1 小时前
导航栏及下拉菜单的实现
前端·css·css3
川石课堂软件测试1 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596931 小时前
前端预览word、excel、ppt
前端·word·excel
小华同学ai1 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
problc1 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter