Files
DMZJ_F/lib/requests/comment_request.dart
2026-03-07 17:24:59 +08:00

170 lines
4.9 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_dmzj/app/app_error.dart';
import 'package:flutter_dmzj/models/comment/comment_item.dart';
import 'package:flutter_dmzj/models/comment/user_comment_item.dart';
import 'package:flutter_dmzj/requests/common/api.dart';
import 'package:flutter_dmzj/requests/common/http_client.dart';
import 'package:flutter_dmzj/services/user_service.dart';
import 'package:get/get.dart';
import 'package:html_unescape/html_unescape.dart';
class CommentRequest {
var unescape = HtmlUnescape();
/// 读取最新的评论
/// - [type] 类型
/// - [objId] ID
/// - [page] 页数
/// - [pageSize] 每页数量
Future<List<CommentItem>> getComment({
required int type,
required int objId,
int sort = 1,
int page = 1,
int pageSize = 30,
}) async {
List<CommentItem> ls = [];
Map result = await HttpClient.instance.getJson(
'/comment/list',
baseUrl: Api.BASE_URL,
queryParameters: {
"type": type,
"objId": objId,
"sort": sort,
"page": page - 1,
"size": pageSize,
},
);
if (result["errno"] != 0) {
throw AppError(result["errmsg"].toString());
}
if (result["data"]["commentIdList"] == null) {
return [];
}
var ids = result["data"]["commentIdList"];
var comments = result["data"]["commentList"];
for (String id in ids) {
var idSplit = id.split(",");
var item = _parseLatestCommentItem(comments, idSplit.first, type);
if (idSplit.length > 1) {
item.parents = [];
for (var id2 in idSplit.skip(1)) {
item.parents.insert(0, _parseLatestCommentItem(comments, id2, type));
}
}
if (item.id != 0) {
ls.add(item);
}
}
return ls;
}
CommentItem _parseLatestCommentItem(Map comments, String id, int type) {
if (!comments.containsKey(id)) {
return CommentItem.createEmpty();
}
var item = comments[id];
//返回的类型非常随机有时候是int有时候是string所以使用int.tryParse
return CommentItem(
type: type,
id: int.tryParse(item["id"].toString()) ?? 0,
objId: int.tryParse(item["obj_id"].toString()) ?? 0,
content: unescape.convert(item["content"].toString()),
photo: item["photo"].toString(),
createTime: int.tryParse(item["create_time"].toString()) ?? 0,
images: item["upload_images"]
.toString()
.split(",")
.where((x) => x.isNotEmpty)
.toList(),
likeAmount: (int.tryParse(item["like_amount"].toString()) ?? 0).obs,
nickname: item["nickname"].toString(),
replyAmount: int.tryParse(item["reply_amount"].toString()) ?? 0,
gender: int.tryParse(item["sex"].toString()) ?? 0,
userId: int.tryParse(item["sender_uid"].toString()) ?? 0,
originId: int.tryParse(item["origin_comment_id"].toString()) ?? 0,
);
}
/// 发表评论
/// - [objId] ID
/// - [type] 类型 ,见AppConstant
/// - [content] 内容
/// - [toCommentId] 回复评论ID
/// - [originCommentId] 原始评论ID
/// - [toUid] 回复用户
Future<bool> sendComment({
required int objId,
required int type,
required String content,
String toCommentId = "0",
String originCommentId = "0",
String toUid = "0",
}) async {
var result = await HttpClient.instance.postJson(
"/v1/$type/new/add/app",
baseUrl: Api.BASE_URL,
data: {
"obj_id": objId,
"to_comment_id": toCommentId,
"origin_comment_id": originCommentId,
"to_uid": toUid,
"sender_terminal": 1,
"content": content,
"dmzj_token": UserService.instance.dmzjToken,
"_debug": 0
},
);
if (result["code"] != 0) {
throw AppError(result["msg"].toString());
}
return true;
}
/// 评论点赞
Future<bool> likeComment({
required int commentId,
required int objId,
required int type,
}) async {
await HttpClient.instance.getJson(
"/v1/$type/like/$commentId",
baseUrl: Api.BASE_URL,
queryParameters: {
"comment_id": commentId,
"obj_id": objId,
"type": type,
},
needLogin: true,
withDefaultParameter: true,
checkCode: true,
);
return true;
}
/// 读取用户的评论
/// - [type] 类型 0=漫画1=轻小说2=新闻
/// - [uid] 用户ID
/// - [page] 页数,从0开始
Future<List<UserCommentItem>> getUserComment({
required int type,
required int uid,
int page = 0,
}) async {
List<UserCommentItem> ls = [];
var result = await HttpClient.instance.getJson(
type == 1
? '/comment/owner/1/$uid/$page.json'
: '/v3/old/comment/owner/$type/$uid/$page.json',
baseUrl: Api.BASE_URL,
withDefaultParameter: true,
needLogin: true,
);
for (var item in result) {
ls.add(UserCommentItem.fromJson(item));
}
return ls;
}
}