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());
相关推荐
胡萝卜术2 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人3 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说3 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢4 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen5 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_963771375 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员5 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢6 小时前
01-threejs架构原理-课程简介
前端·three.js
_瑞7 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒7 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端