Flutter (Retrofit + Dio) - 1 - 基础实体类创建

该教程介绍了在Flutter项目中如何使用Dio和Retrofit,通过Idea插件和在线工具快速创建实体类,以及如何创建基础响应实体类、列表响应实体类和分页请求实体类,涉及Json序列化和数据解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议先将Flutter官方文档过一遍,本系列教程 Flutter SDK >= 3.10.0

考虑篇幅长度,这里将分成几片文章

  1. 创建实体类
  2. 封装dio
  3. Retrofit方式使用dio

一、如何快速创建实体类

1.1 idea 插件方式

Android Studio 安装FlutterJsonBeanFactory
在这里插入图片描述
lib/generated 这个目录专门来存放该生成的实体类,使用方式:右键该文件夹-> 新建->JsonToDartBeanAction
在这里插入图片描述

  1. Class Name: 实体类名,大驼峰形式Lhdht
  2. JSON Text: 实体类结构体JSON,注意json结构体最后一个不要加,, 否则无法make
  3. null-able: 空安全
  4. copyWith: (PS:不知道是啥,有知道的朋有评论区说说)
  5. defalut value: 允许默认值
  6. make 创建

将该文件lib/generated/lhdht_entity.dart移入到lib/model/entity 目录下

1.2 工具网站

这个相对简单,将json复制到这里面就会生成

在这里插入图片描述

二、创建基本的实体类(idea方式创建)

这里使用idea方式创建实体类

2.1 基础响应实体类

通过idea方式创建实体类BaseResponse,并将lib/generated/base_response_entity.dart 移入到 lib/model/response/ 目录下,然后需要对这两个文件进行改造,代码如下:

lib/model/response/base_response_entity.dart

import 'package:lhdht_flutter_app/generated/json/base/json_field.dart';
import 'package:lhdht_flutter_app/generated/json/base/json_convert_content.dart';
import 'package:lhdht_flutter_app/generated/json/base_response_entity.g.dart';
import 'dart:convert';


()
class BaseResponseEntity<D> {
	String? message;
	D? data;

	BaseResponseEntity();

	BaseResponseEntity.fromJson(Map<String, dynamic> json) {
		if (json['data'] != null && json['data'] != 'null') {
			data = JsonConvert.fromJsonAsT<D>(json['data']);
		}
		message = json["message"];
	}

	Map<String, dynamic> toJson() => $BaseResponseEntityToJson(this);

	
	String toString() {
		return jsonEncode(this);
	}
}

lib/generated/json/base_response_entity.g.dart

import 'package:lhdht_flutter_app/generated/json/base/json_convert_content.dart';
import 'package:lhdht_flutter_app/model/response/base_response_entity.dart';

BaseResponseEntity $BaseResponseEntityFromJson<D>(Map<String, dynamic> json) {
	final BaseResponseEntity baseResponseEntity = BaseResponseEntity();
	final String? message = jsonConvert.convert<String>(json['message']);
	if (message != null) {
		baseResponseEntity.message = message;
	}
	final D? data = jsonConvert.convert<D>(json['data']);
	if (data != null) {
		baseResponseEntity.data = data;
	}
	return baseResponseEntity;
}

Map<String, dynamic> $BaseResponseEntityToJson(BaseResponseEntity entity) {
	final Map<String, dynamic> data = <String, dynamic>{};
	data['message'] = entity.message;
	data['data'] = entity.data?.toJSON();
	return data;
}

2.2 基础列表响应实体类

通过idea方式创建实体类ListResponse,并将lib/generated/list_response_entity.dart 移入到 lib/model/response/ 目录下,然后需要对这两个文件进行改造,代码如下:

lib/model/response/list_response_entity.dart

import 'package:lhdht_flutter_app/generated/json/base/json_field.dart';
import 'package:lhdht_flutter_app/generated/json/base/json_convert_content.dart';
import 'package:lhdht_flutter_app/generated/json/list_response_entity.g.dart';
import 'dart:convert';

()
class ListResponseEntity<D> {
	D? list;
	int? total;

	ListResponseEntity();

	ListResponseEntity.fromJson(Map<String, dynamic> json) {
		if (json['list'] != null && json['list'] != 'null') {
			list = JsonConvert.fromJsonAsT<D>(json['list']);
		}
		total = json["total"];
	}

	Map<String, dynamic> toJson() => $ListResponseEntityToJson(this);

	
	String toString() {
		return jsonEncode(this);
	}
}

lib/generated/json/list_response_entity.g.dart

import 'package:lhdht_flutter_app/generated/json/base/json_convert_content.dart';
import 'package:lhdht_flutter_app/model/response/list_response_entity.dart';

ListResponseEntity $ListResponseEntityFromJson<D>(Map<String, dynamic> json) {
	final ListResponseEntity listResponseEntity = ListResponseEntity();
	final D? list = jsonConvert.convert<D>(json['list']);
	if (list != null) {
		listResponseEntity.list = list;
	}
	final int? total = jsonConvert.convert<int>(json['total']);
	if (total != null) {
		listResponseEntity.total = total;
	}
	return listResponseEntity;
}

Map<String, dynamic> $ListResponseEntityToJson(ListResponseEntity entity) {
	final Map<String, dynamic> data = <String, dynamic>{};
	data['list'] = entity.list.toJson();
	data['total'] = entity.total;
	return data;
}

2.3 基础分页请求实体类

通过idea方式创建实体类BasePageRequest,并将lib/generated/base_page_request.dart 移入到 lib/model/response/ 目录下

2.4 创建测试列表项实体类

通过idea方式创建实体类Item,并将lib/generated/item_request.dart 移入到 lib/model/entity/ 目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨花炖海棠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值