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());
相关推荐
威迪斯特1 天前
Flask:轻量级Web框架的技术本质与工程实践
前端·数据库·后端·python·flask·开发框架·核心架构
wuhen_n1 天前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
大鱼前端1 天前
为什么我说CSS-in-JS是前端“最佳”的糟粕设计?
前端
不爱吃糖的程序媛1 天前
Capacitor:跨平台Web原生应用开发利器,现已全面适配鸿蒙
前端·华为·harmonyos
AC赳赳老秦1 天前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
CHU7290351 天前
淘宝扭蛋机抽盒小程序前端功能解析:解锁趣味抽盒新体验
前端·小程序
ZH15455891311 天前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现
python·学习·flutter
-凌凌漆-1 天前
【npm】npm的-D选项介绍
前端·npm·node.js
鹿心肺语1 天前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
一只大侠的侠1 天前
Flutter开源鸿蒙跨平台训练营 Day6ArkUI框架实战
flutter·开源·harmonyos