feat: 请求数据和配置

This commit is contained in:
chengsiwen committed 2026-07-06 15:21:29 +08:00
1 parent 557f900187
commit 9b0fe51fa4
21 files changed
+1026 -60

No files matched your search

-12
View File
@@ -39,17 +39,6 @@ class AppService {
// 添加自定义拦截器
_dio.interceptors.add(NyNetworkIntercept());
// 开发环境添加日志
// if (!kReleaseMode) {
// _dio.interceptors.add(TalkerDioLogger(
// settings: TalkerDioLoggerSettings(
// printRequestHeaders: true,
// printRequestData: true,
// printResponseData: true,
// printResponseHeaders: false,
// ),
// ));
// }
}
/// 更新配置
@@ -279,7 +268,6 @@ class ApiRequest {
throw Exception("retry failed (unreachable)");
}
// ============ 错误处理 ============
static HttpResult<T> _handleError<T>(DioException e) {
final Response? resp = e.response;
+1 -1
View File
@@ -2,7 +2,7 @@
// https://api-glimzodf.glimzodf.com/glimzodf/
class ApiString {
static const String baseUrl = "https://api-glimzodf.glimzodf.com/";
static const String baseUrl = "https://api-glimzodf.glimzodf.com/glimzodf";
static const String appName = 'Novyronst';
+11 -29
View File
@@ -1,7 +1,7 @@
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:logger/logger.dart';
import 'package:novyronst/common/help/help_log.dart';
import 'package:novyronst/common/help/help_time.dart';
import 'package:novyronst/common/help/help_token.dart';
@@ -11,19 +11,18 @@ import '../help/help_encrypt.dart';
/// 网络请求拦截器
class NyNetworkIntercept extends Interceptor {
final bool enableLog = !kReleaseMode;
final Logger _logger = Logger();
@override
Future<void> onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
// 添加公共请求头
await _addRequestHeaders(options);
// 打印请求日志
_logInfo("🔶 REQUEST [${options.method.toUpperCase()}] ${options.uri}");
_logDebug("Headers: ${options.headers}");
HelpLog.print("🔶 REQUEST [${options.method.toUpperCase()}] ${options.uri}");
HelpLog.print("Headers: ${options.headers}");
if (options.data != null) {
_logDebug("Payload: ${options.data}");
HelpLog.print("Payload: ${options.data}");
}
handler.next(options);
@@ -31,7 +30,7 @@ class NyNetworkIntercept extends Interceptor {
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
_logInfo("🟢 RESPONSE [${response.statusCode}] ${response.requestOptions.uri}");
HelpLog.print("🟢 RESPONSE [${response.statusCode}] ${response.requestOptions.uri}");
// _logDebug("Body: ${response.data}");
// 处理 401 / 402 Token 过期
@@ -56,7 +55,7 @@ class NyNetworkIntercept extends Interceptor {
final deStr = HelpEncrypt.deStr(response.data);
response.data = jsonDecode(deStr);
} catch (e) {
_logError("解密失败: $e");
HelpLog.print("解密失败: $e");
}
}
@@ -65,14 +64,13 @@ class NyNetworkIntercept extends Interceptor {
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
_logError("🔴 Error: ${err.message}");
HelpLog.print("🔴 Error: ${err.message}", tag: 'in onError');
handler.next(err);
}
// ============ 私有方法 ============
Future<void> _addRequestHeaders(RequestOptions options) async {
// 开发模式添加 security: false
if (!kReleaseMode) {
options.headers['security'] = 'false';
}
@@ -80,7 +78,6 @@ class NyNetworkIntercept extends Interceptor {
// 注入 Token
final tokenManager = HelpToken();
final token = tokenManager.get();
// print('查看token: $token');
if (token.isNotEmpty) {
options.headers['Authorization'] = 'Bearer $token';
}
@@ -104,7 +101,6 @@ class NyNetworkIntercept extends Interceptor {
'device-gaid': '',
});
// 处理 prevToken(从请求体中提取)
await _handleOldToken(options);
}
@@ -117,25 +113,11 @@ class NyNetworkIntercept extends Interceptor {
options.headers['Authorization'] = prevToken.toString();
}
}
} catch (_) {
// 非 JSON 请求跳过
}
} catch (_) {}
}
void _logInfo(String message) {
if (enableLog) _logger.i(message);
}
void _logDebug(String message) {
if (enableLog) _logger.d('💡 $message');
}
void _logError(String message) {
if (enableLog) _logger.e(message);
}
void _handleError(dynamic e, bool error) {
_logError("🔴 Error: $e");
// 这里可以根据需要处理错误提示
HelpLog.print("🔴 Error: $e", tag: 'in ---- _handleError');
}
}
+62
View File
@@ -2,6 +2,7 @@
import 'package:novyronst/common/api/api_request.dart';
import 'package:novyronst/common/api/api_string.dart';
import 'package:novyronst/common/help/help_log.dart';
import 'package:novyronst/common/help/help_token.dart';
import 'package:novyronst/common/model/novyronst_user.dart';
import 'package:novyronst/common/model/register_model.dart';
@@ -38,4 +39,65 @@ class UserRequest {
return null;
});
}
static Future eventCreateHis({
required String shortPlayId,
required String videoId
}) {
// {"short_play_id": shortPlayId, "video_id": videoId}
Map<String, dynamic> params = {"short_play_id": shortPlayId, "video_id": videoId};
return ApiRequest.post(ApiStringUser.eventCreateHistory, data: params).then((value) {
HelpLog.print(value.data, tag: "eventCreateHis");
});
}
static Future eventEnterApp() {
return ApiRequest.post(ApiStringUser.eventUserEnterApp).then((value) {});
}
static Future<bool> eventOnline({String? oldToken}) {
String token = HelpToken().get();
if (token == '') return Future<bool>.value(false);
final body = <String, dynamic>{};
if (oldToken != null) body['token'] = oldToken;
return ApiRequest.post(ApiStringUser.eventUserOnline, data: body).then((value) {
return value.isSuccess;
});
}
static Future<bool> eventOLeaveApp({String? oldToken}) {
String token = HelpToken().get();
if (token == '') return Future<bool>.value(false);
final body = <String, dynamic>{};
if (oldToken != null) body['token'] = oldToken;
return ApiRequest.post(ApiStringUser.eventUserLeaveApp, data: body).then((value) {
return value.isSuccess;
});
}
// 上报播放时长
static Future eventPlaySeconds({
required int shortPlayId,
required int videoId,
required int seconds,
}) {
return ApiRequest.post(ApiStringUser.eventPlaySeconds, data: {
"short_play_id": shortPlayId,
"video_id": videoId,
"play_seconds": seconds,
}).then((value) {});
}
// 上报观看时长
static Future eventWatchTime({
required int shortPlayId,
required int seconds,
}) {
return ApiRequest.post(ApiStringUser.eventWatchTime, data: {
"short_play_id": shortPlayId,
// 时间戳的毫秒数
"request_id": DateTime.now().millisecondsSinceEpoch,
"duration": seconds,
}).then((value) {});
}
}
+181
View File
@@ -0,0 +1,181 @@
import 'package:novyronst/common/api/api_request.dart';
import 'package:novyronst/common/api/api_string.dart';
import 'package:novyronst/common/help/help_log.dart';
import 'package:novyronst/common/model/ny_category_model.dart';
import 'package:novyronst/common/model/ny_drama_model.dart';
import 'package:novyronst/common/model/ny_home_model.dart';
import '../model/ny_detail_model.dart';
class VideoRequest {
static Future<List<NyHomeModel>> getHomeData() {
return ApiRequest.get(ApiStringVideo.getHomeModules).then((value) {
if (value.isSuccess) {
List? list = value.data['data']['list'];
List<NyHomeModel> homeList = [];
if (list != null) {
homeList = list.map((e) => NyHomeModel.fromJson(e)).toList();
}
return homeList;
}
return [];
});
}
static Future<List<NyCategoryModel>> getCategoriesList() {
return ApiRequest.get(ApiStringVideo.getCategoriesList).then((value) {
// SkyLog.print('vvvvv: ${value.data}');
if (!value.isSuccess) return [];
Map<String, dynamic> data = value.data['data'];
List? list = data['list'];
List<NyCategoryModel> categoryList = [];
if (list != null) {
// id 28 不显示,删除
categoryList = list.map((e) => NyCategoryModel.fromJson(e)).toList();
categoryList.removeWhere((element) => element.id == 28);
categoryList.removeWhere((element) => element.name.length >= 10);
}
return categoryList;
});
}
static Future<List<NyDramaModel>> getCategoriesDetail({
required int categoryId,
int page = 1,
int pageSize = 20,
}) {
return ApiRequest.fetchPage<NyDramaModel>(
ApiStringVideo.getCategoriesDetail,
page: page,
pageSize: pageSize,
extraParams: {'category_id': categoryId},
fromJson: (json) => NyDramaModel.fromJson(json),
);
}
// getSearchHots
static Future<List<NyDramaModel>> getSearchHots() {
return ApiRequest.get(ApiStringVideo.getSearchHots).then((value) {
if (value.isSuccess) {
HelpLog.print('getSearchHots: ${value.data}');
List list = parseDataForList(value.data);
return list.map((e) => NyDramaModel.fromJson(e)).toList();
}
return [];
});
}
// search
static Future<List<NyDramaModel>> search({required String keyword}) {
return ApiRequest.get(ApiStringVideo.getSearch, queryParameters: {
'search': keyword,
}).then((value) {
if (value.isSuccess) {
HelpLog.print('getSearchHots: ${value.data}');
List list = parseDataForList(value.data);
return list.map((e) => NyDramaModel.fromJson(e)).toList();
}
return [];
});
}
//getCollections
static Future<List<NyDramaModel>> getCollections({
int page = 1,
int pageSize = 10,
}) {
Map<String, dynamic> params = _setPage(page: page, pageSize: pageSize);
return ApiRequest.get(
ApiStringVideo.getCollections,
queryParameters: params,
).then((value) {
if (value.isSuccess) {
HelpLog.print('getCollections: ${value.data}');
List list = parseDataForList(value.data);
return list.map((e) => NyDramaModel.fromJson(e)).toList();
}
return [];
});
}
// getHistory
static Future<List<NyDramaModel>> getHistory({
int page = 1,
int pageSize = 10,
}) {
Map<String, dynamic> params = _setPage(page: page, pageSize: pageSize);
return ApiRequest.get(
ApiStringVideo.getHistories,
queryParameters: params,
).then((value) {
if (value.isSuccess) {
HelpLog.print('getHistory: ${value.data}');
List list = parseDataForList(value.data);
return list.map((e) => NyDramaModel.fromJson(e)).toList();
}
return [];
});
}
// getVideoDetail
static Future<NyDetailModel?> getVideoDetail({
required int shortPlayId,
required int shortPlayVideoId,
}) {
Map<String, dynamic> params = {};
params['short_play_id'] = shortPlayId;
params['short_play_video_id'] = shortPlayVideoId;
return ApiRequest.get(
ApiStringVideo.getVideoDetail,
queryParameters: params,
).then((value) {
if (value.isSuccess) {
HelpLog.print('getVideoDetail: ${value.data['data']}');
return NyDetailModel.fromJson(value.data['data']);
}
return null;
});
}
// collect
static Future<bool> collect({
required int shortPlayId,
required int videoId,
}) {
Map<String, dynamic> params = {};
params['short_play_id'] = shortPlayId;
params['video_id'] = videoId;
return ApiRequest.post(ApiStringVideo.collect, data: params).then((value) {
HelpLog.print('collecttttt: ${value.data}');
if (value.isSuccess) {}
return value.isSuccess;
});
}
// cancelCollect
static Future<bool> cancelCollect({required int shortPlayId}) {
Map<String, dynamic> params = {};
params['short_play_id'] = shortPlayId;
return ApiRequest.post(ApiStringVideo.cancelCollect, data: params).then((
value,
) {
HelpLog.print('cancelCollectttt: ${value.data}');
if (value.isSuccess) {}
return value.isSuccess;
});
}
static Map<String, dynamic> _setPage({int page = 1, int pageSize = 10}) {
return {'current_page': page, 'page_size': pageSize};
}
static List parseDataForList(Map<String, dynamic> data) {
Map<String, dynamic> map = data['data'];
List? listData = map['list'];
return listData ?? [];
}
}