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());
相关推荐
gqkmiss4 分钟前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃10 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰14 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
sunly_15 分钟前
Flutter:AnimatedSwitcher当子元素改变时,触发动画
flutter
AiFlutter16 分钟前
Flutter封装Coap
flutter
Viktor_Ye20 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm22 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
花海少爷1 小时前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript