当前位置: 首页 > news >正文

Flutter实现Retrofit风格的网络请求封装

以下是一个基于 Android Retrofit 思路封装的 Flutter 网络请求框架示例。这个封装会借鉴 Retrofit 的设计模式,包括定义接口、使用注解、以及通过单例模式管理网络请求客户端。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加必要的依赖:

dependencies:dio: ^5.0.0retrofit: ^4.0.0json_annotation: ^4.8.0

2. 定义数据模型

使用 json_annotation 来定义数据模型,这类似于 Retrofit 中的 Gson 转换器。

import 'package:json_annotation/json_annotation.dart';part 'user.g.dart';()
class User {(name: 'id')int id;(name: 'name')String name;(name: 'email')String email;User({required this.id, required this.name, required this.email});factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
}

3. 定义 API 接口

定义一个接口来描述网络请求,使用 Retrofit 的注解风格。

import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';part 'api_service.g.dart';()
abstract class ApiService {factory ApiService(Dio dio, {String baseUrl}) = _ApiService;("/users/{id}")Future<User> getUser(("id") int userId);("/users")Future<User> createUser(() User user);
}

4. 创建 Retrofit 实例

创建一个单例类来管理 Retrofit 实例,类似于 Retrofit 的初始化。

import 'package:dio/dio.dart';
import 'api_service.dart';class RetrofitClient {static final RetrofitClient _instance = RetrofitClient._internal();late ApiService _apiService;factory RetrofitClient() {return _instance;}RetrofitClient._internal() {final dio = Dio(BaseOptions(baseUrl: "https://api.example.com/"));_apiService = ApiService(dio);}ApiService get apiService => _apiService;
}

5. 使用封装的网络请求

在你的 Flutter 应用中使用封装的网络请求。

import 'package:flutter/material.dart';
import 'retrofit_client.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('Retrofit Example')),body: Center(child: ElevatedButton(onPressed: () async {try {var user = await RetrofitClient().apiService.getUser(1);print(user.name);} catch (e) {print(e);}},child: Text('Get User'),),),),);}
}

6. 生成代码

由于使用了 retrofitjson_annotation,你需要运行以下命令来生成代码:

flutter pub run build_runner build

总结

通过以上步骤,你可以创建一个类似于 Retrofit 的网络请求框架。这个框架利用了 Retrofit 的注解和接口定义方式,同时结合了 Flutter 的 Dio 库来实现网络请求。这种方式不仅代码清晰,而且易于维护和扩展。

下面是一个优化后的 Flutter 网络请求框架,增加了环境切换功能,并进行了全面增强:

完整封装方案(带环境切换)

// network/dio_client.dart
import 'package:dio/dio.dart';
import 'package:logger/logger.dart';class DioClient {static final DioClient _instance = DioClient._internal();late Dio _dio
http://www.xdnf.cn/news/1194859.html

相关文章:

  • oracle数据库表空间碎片整理
  • 宏观杠杆率及其数据获取(使用AKShare)
  • 【DM数据守护集群搭建-读写分离】
  • Dify开发教程笔记(一): 文件及系统参数变量说明及使用
  • 消息缓存系统
  • 2025中国GEO优化白皮书:AI搜索优化趋势+行业数据报告
  • 【LLM】Kimi-K2模型架构(MuonClip 优化器等)
  • CSP2025模拟赛2(2025.7.26)
  • 【C/C++】explicit_bzero
  • C++核心编程学习--对象特性--友元
  • [C/C++内存安全]_[中级]_[再次探讨避免悬垂指针的方法和检测空指针的方法]
  • OpenCV学习探秘之一 :了解opencv技术及架构解析、数据结构与内存管理​等基础
  • React入门学习——指北指南(第三节)
  • 云计算技术之docker build构建错误
  • Swagger 配置及使用指南
  • sklearn库中有关于数据集的介绍
  • 命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
  • 【计算机组成原理】第一章:计算机系统概述
  • Django+celery异步:拿来即用,可移植性高
  • 【408二轮强化】数据结构——线性表
  • C++ TAP(基于任务的异步编程模式)
  • 在VS Code中运行Python:基于Anaconda环境或Python官方环境
  • 如何在 Ubuntu 24.04 或 22.04 中创建自定义 Bash 命令
  • 机器学习——随机森林算法分类问题案例解析(sklearn)
  • Nacos-服务注册,服务发现(二)
  • 智慧城市多目标追踪精度↑32%:陌讯动态融合算法实战解析
  • bmp280的压力数据采集(i2c设备驱动+设备树编写)
  • 数据结构 二叉树(3)---层序遍历二叉树
  • 知识图谱的初步探索
  • 智慧农业病虫害识别准确率↑32%:陌讯多模态融合算法实战解析