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

135 lines
3.7 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 'dart:convert';
import 'package:flutter_dmzj/app/app_error.dart';
import 'package:flutter_dmzj/models/news/news_banner_model.dart';
import 'package:flutter_dmzj/models/news/news_list_item_model.dart';
import 'package:flutter_dmzj/models/news/news_stat_model.dart';
import 'package:flutter_dmzj/models/news/news_tag_model.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';
class NewsRequest {
/// 新闻分类
Future<List<NewsTagModel>> category() async {
var list = <NewsTagModel>[];
var result = await HttpClient.instance.getJson(
'/news/category',
);
for (var item in result["data"]["cateList"]) {
list.add(NewsTagModel.fromJson(item));
}
return list;
}
/// 新闻Banner
Future<List<NewsBannerModel>> banner() async {
var list = <NewsBannerModel>[];
var result = await HttpClient.instance.getJson('/news/recommend');
for (var item in result["data"]["recommendList"]) {
list.add(NewsBannerModel.fromJson(item));
}
return list;
}
/// 读取新闻列表
/// - [id] 新闻分类ID
/// - [page] 页数从1开始
Future<List<NewsListItemModel>> getNewsList(int id, int page) async {
var result = await HttpClient.instance.getJson(
'/news/list/$id/${id == 0 ? 2 : 3}/$page',
);
if (result["errno"] != 0) {
throw AppError(result["errmsg"]);
}
var list = <NewsListItemModel>[];
for (var item in result["data"]["newsList"]) {
list.add(NewsListItemModel.fromJson(item));
}
return list;
}
/// 新闻数据
/// - [newsId] 新闻ID
Future<NewsStatModel> stat(int newsId) async {
var result = await HttpClient.instance.getJson(
'/v3/article/total/$newsId.json',
checkCode: true,
);
return NewsStatModel.fromJson(result);
}
/// 新闻点赞
/// - [newsId] 新闻ID
Future<bool> like(int newsId) async {
await HttpClient.instance.getJson(
'/article/mood/$newsId',
checkCode: true,
);
return true;
}
/// 新闻检查收藏
/// - [newsId] 新闻ID
Future<bool> checkCollect(int newsId) async {
var uid = UserService.instance.userId;
var par = {"uid": int.parse(uid), "sub_id": newsId};
var parJson = jsonEncode(par);
var sign = Api.sign(parJson, 'app_news_sub');
var result = await HttpClient.instance.postJson(
'/api/news/subscribe/check',
baseUrl: Api.BASE_URL_INTERFACE,
data: {
"parm": parJson,
"sign": sign,
},
);
return json.decode(result)["result"] == 809;
}
/// 新闻收藏
/// - [newsId] 新闻ID
Future<bool> collect(int newsId) async {
var uid = UserService.instance.userId;
var par = {"uid": int.parse(uid), "sub_id": newsId};
var parJson = jsonEncode(par);
var sign = Api.sign(parJson, 'app_news_sub');
var result = await HttpClient.instance.postJson(
'/api/news/subscribe/add',
baseUrl: Api.BASE_URL_INTERFACE,
data: {
"parm": parJson,
"sign": sign,
},
);
return json.decode(result)["result"] == 1000;
}
/// 移除收藏
/// - [newsId] 新闻ID
Future<bool> delCollect(int newsId) async {
var uid = UserService.instance.userId;
var par = {"uid": int.parse(uid), "sub_id": newsId};
var parJson = jsonEncode(par);
var sign = Api.sign(parJson, 'app_news_sub');
var result = await HttpClient.instance.postJson(
'/api/news/subscribe/del',
baseUrl: Api.BASE_URL_INTERFACE,
data: {
"parm": parJson,
"sign": sign,
},
);
return json.decode(result)["result"] == 1000;
}
}