diff --git a/lib/http/api.dart b/lib/http/api.dart index b1f22982..05e93902 100644 --- a/lib/http/api.dart +++ b/lib/http/api.dart @@ -202,7 +202,7 @@ class Api { // https://api.bilibili.com/x/v3/fav/folder/created/list?pn=1&ps=10&up_mid=17340771 static const String userFavFolder = '/x/v3/fav/folder/created/list'; - static const String folderInfo = '/x/v3/fav/folder/info'; + static const String favFolderInfo = '/x/v3/fav/folder/info'; static const String addFolder = '/x/v3/fav/folder/add'; diff --git a/lib/http/fav.dart b/lib/http/fav.dart index 5108c719..746e5acd 100644 --- a/lib/http/fav.dart +++ b/lib/http/fav.dart @@ -4,12 +4,11 @@ import 'package:PiliPlus/http/init.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_article/data.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_folder_info/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/models_new/fav/fav_note/list.dart'; import 'package:PiliPlus/models_new/fav/fav_pgc/data.dart'; import 'package:PiliPlus/models_new/fav/fav_topic/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; import 'package:PiliPlus/models_new/space/space_fav/data.dart'; import 'package:PiliPlus/models_new/sub/sub_detail/data.dart'; import 'package:PiliPlus/utils/storage.dart' show Accounts; @@ -353,7 +352,7 @@ class FavHttp { } // 收藏夹 - static Future> userfavFolder({ + static Future> userfavFolder({ required int pn, required int ps, required dynamic mid, @@ -367,7 +366,7 @@ class FavHttp { }, ); if (res.data['code'] == 0) { - return Success(FavVideoData.fromJson(res.data['data'])); + return Success(FavFolderData.fromJson(res.data['data'])); } else { return Error(res.data['message'] ?? '账号未登录'); } @@ -480,26 +479,23 @@ class FavHttp { contentType: Headers.formUrlEncodedContentType, )); if (res.data['code'] == 0) { - return { - 'status': true, - 'data': FavVideoItemModel.fromJson(res.data['data']) - }; + return {'status': true, 'data': FavFolderInfo.fromJson(res.data['data'])}; } else { return {'status': false, 'msg': res.data['message']}; } } - static Future folderInfo({ + static Future favFolderInfo({ dynamic mediaId, }) async { var res = await Request().get( - Api.folderInfo, + Api.favFolderInfo, queryParameters: { 'media_id': mediaId, }, ); if (res.data['code'] == 0) { - return {'status': true, 'data': FolderInfo.fromJson(res.data['data'])}; + return {'status': true, 'data': FavFolderInfo.fromJson(res.data['data'])}; } else { return {'status': false, 'msg': res.data['message']}; } @@ -674,7 +670,7 @@ class FavHttp { queryParameters: {'up_mid': mid}, ); if (res.data['code'] == 0) { - return {'status': true, 'data': FavVideoData.fromJson(res.data['data'])}; + return {'status': true, 'data': FavFolderData.fromJson(res.data['data'])}; } else { return {'status': false, 'msg': res.data['message']}; } @@ -695,7 +691,7 @@ class FavHttp { }, ); if (res.data['code'] == 0) { - return {'status': true, 'data': FavVideoData.fromJson(res.data['data'])}; + return {'status': true, 'data': FavFolderData.fromJson(res.data['data'])}; } else { return {'status': false, 'msg': res.data['message']}; } diff --git a/lib/models_new/fav/fav_detail/cnt_info.dart b/lib/models_new/fav/fav_detail/cnt_info.dart index 1591c1df..73b82499 100644 --- a/lib/models_new/fav/fav_detail/cnt_info.dart +++ b/lib/models_new/fav/fav_detail/cnt_info.dart @@ -2,22 +2,40 @@ class CntInfo { int? collect; int? play; int? thumbUp; + int? thumbDown; int? share; + int? reply; int? danmaku; + int? coin; + int? vt; + int? playSwitch; + String? viewText1; CntInfo({ this.collect, this.play, this.thumbUp, + this.thumbDown, this.share, + this.reply, this.danmaku, + this.coin, + this.vt, + this.playSwitch, + this.viewText1, }); factory CntInfo.fromJson(Map json) => CntInfo( collect: json['collect'] as int?, play: json['play'] as int?, thumbUp: json['thumb_up'] as int?, + thumbDown: json['thumb_down'] as int?, share: json['share'] as int?, + reply: json['reply'] as int?, danmaku: json['danmaku'] as int?, + coin: json['coin'] as int?, + vt: json['vt'] as int?, + playSwitch: json['play_switch'] as int?, + viewText1: json['view_text_1'] as String?, ); } diff --git a/lib/models_new/fav/fav_detail/data.dart b/lib/models_new/fav/fav_detail/data.dart index c6f11980..34f5a431 100644 --- a/lib/models_new/fav/fav_detail/data.dart +++ b/lib/models_new/fav/fav_detail/data.dart @@ -1,8 +1,8 @@ import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; class FavDetailData { - FavVideoItemModel? info; + FavFolderInfo? info; List? medias; bool? hasMore; int? ttl; @@ -12,7 +12,7 @@ class FavDetailData { factory FavDetailData.fromJson(Map json) => FavDetailData( info: json['info'] == null ? null - : FavVideoItemModel.fromJson(json['info'] as Map), + : FavFolderInfo.fromJson(json['info'] as Map), medias: (json['medias'] as List?) ?.map((e) => FavDetailItemModel.fromJson(e as Map)) .toList(), diff --git a/lib/models_new/fav/fav_detail/info.dart b/lib/models_new/fav/fav_detail/info.dart index 0cebe7e7..e16ac6a7 100644 --- a/lib/models_new/fav/fav_detail/info.dart +++ b/lib/models_new/fav/fav_detail/info.dart @@ -1,5 +1,5 @@ +import 'package:PiliPlus/models/model_owner.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/cnt_info.dart'; -import 'package:PiliPlus/models_new/fav/fav_detail/upper.dart'; class FavDetailInfo { int? id; @@ -8,7 +8,7 @@ class FavDetailInfo { int? attr; String? title; String? cover; - Upper? upper; + Owner? upper; int? coverType; CntInfo? cntInfo; int? type; @@ -51,7 +51,7 @@ class FavDetailInfo { cover: json['cover'] as String?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), coverType: json['cover_type'] as int?, cntInfo: json['cnt_info'] == null ? null diff --git a/lib/models_new/fav/fav_detail/media.dart b/lib/models_new/fav/fav_detail/media.dart index 573ef82e..a0150217 100644 --- a/lib/models_new/fav/fav_detail/media.dart +++ b/lib/models_new/fav/fav_detail/media.dart @@ -1,7 +1,7 @@ +import 'package:PiliPlus/models/model_owner.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/cnt_info.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/ogv.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/ugc.dart'; -import 'package:PiliPlus/models_new/fav/fav_detail/upper.dart'; import 'package:PiliPlus/pages/common/multi_select_controller.dart'; class FavDetailItemModel with MultiSelectData { @@ -12,7 +12,7 @@ class FavDetailItemModel with MultiSelectData { String? intro; int? page; int? duration; - Upper? upper; + Owner? upper; int? attr; CntInfo? cntInfo; String? link; @@ -56,7 +56,7 @@ class FavDetailItemModel with MultiSelectData { duration: json['duration'] as int?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), attr: json['attr'] as int?, cntInfo: json['cnt_info'] == null ? null diff --git a/lib/models_new/fav/fav_detail/upper.dart b/lib/models_new/fav/fav_detail/upper.dart deleted file mode 100644 index c284ab3c..00000000 --- a/lib/models_new/fav/fav_detail/upper.dart +++ /dev/null @@ -1,26 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - bool? followed; - int? vipType; - int? vipStatue; - - Upper({ - this.mid, - this.name, - this.face, - this.followed, - this.vipType, - this.vipStatue, - }); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - followed: json['followed'] as bool?, - vipType: json['vip_type'] as int?, - vipStatue: json['vip_statue'] as int?, - ); -} diff --git a/lib/models_new/fav/fav_folder/data.dart b/lib/models_new/fav/fav_folder/data.dart new file mode 100644 index 00000000..21fb0a95 --- /dev/null +++ b/lib/models_new/fav/fav_folder/data.dart @@ -0,0 +1,17 @@ +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; + +class FavFolderData { + int? count; + List? list; + bool? hasMore; + + FavFolderData({this.count, this.list, this.hasMore}); + + factory FavFolderData.fromJson(Map json) => FavFolderData( + count: json['count'] as int?, + list: (json['list'] as List?) + ?.map((e) => FavFolderInfo.fromJson(e as Map)) + .toList(), + hasMore: json['has_more'] as bool?, + ); +} diff --git a/lib/models_new/fav/fav_video/list.dart b/lib/models_new/fav/fav_folder/list.dart similarity index 64% rename from lib/models_new/fav/fav_video/list.dart rename to lib/models_new/fav/fav_folder/list.dart index 276c28ad..e1bec48f 100644 --- a/lib/models_new/fav/fav_video/list.dart +++ b/lib/models_new/fav/fav_folder/list.dart @@ -1,21 +1,21 @@ -import 'package:PiliPlus/models_new/fav/fav_video/upper.dart'; +import 'package:PiliPlus/models/model_owner.dart'; -class FavVideoItemModel { - int? id; +class FavFolderInfo { + int id; int? fid; - int? mid; - int? attr; + int mid; + int attr; String? attrDesc; - String? title; - String? cover; - Upper? upper; + String title; + String cover; + Owner? upper; int? coverType; String? intro; int? ctime; int? mtime; int? state; int? favState; - int? mediaCount; + int mediaCount; int? viewCount; int? vt; bool? isTop; @@ -25,14 +25,14 @@ class FavVideoItemModel { String? link; String? bvid; - FavVideoItemModel({ - this.id, + FavFolderInfo({ + this.id = 0, this.fid, - this.mid, - this.attr, + this.mid = 0, + this.attr = -1, this.attrDesc, - this.title, - this.cover, + this.title = '', + this.cover = '', this.upper, this.coverType, this.intro, @@ -40,7 +40,7 @@ class FavVideoItemModel { this.mtime, this.state, this.favState, - this.mediaCount, + this.mediaCount = 0, this.viewCount, this.vt, this.isTop, @@ -51,25 +51,24 @@ class FavVideoItemModel { this.bvid, }); - factory FavVideoItemModel.fromJson(Map json) => - FavVideoItemModel( - id: json['id'] as int?, + factory FavFolderInfo.fromJson(Map json) => FavFolderInfo( + id: json['id'] as int? ?? 0, fid: json['fid'] as int?, - mid: json['mid'] as int?, - attr: json['attr'] as int?, + mid: json['mid'] as int? ?? 0, + attr: json['attr'] as int? ?? 0, attrDesc: json['attr_desc'] as String?, - title: json['title'] as String?, - cover: json['cover'] as String?, + title: json['title'] as String? ?? '', + cover: json['cover'] as String? ?? '', upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), coverType: json['cover_type'] as int?, intro: json['intro'] as String?, ctime: json['ctime'] as int?, mtime: json['mtime'] as int?, state: json['state'] as int?, favState: json['fav_state'] as int?, - mediaCount: json['media_count'] as int?, + mediaCount: json['media_count'] as int? ?? 0, viewCount: json['view_count'] as int?, vt: json['vt'] as int?, isTop: json['is_top'] as bool?, diff --git a/lib/models_new/fav/fav_folder_info/cnt_info.dart b/lib/models_new/fav/fav_folder_info/cnt_info.dart deleted file mode 100644 index 00b3e15d..00000000 --- a/lib/models_new/fav/fav_folder_info/cnt_info.dart +++ /dev/null @@ -1,15 +0,0 @@ -class CntInfo { - int? collect; - int? play; - int? thumbUp; - int? share; - - CntInfo({this.collect, this.play, this.thumbUp, this.share}); - - factory CntInfo.fromJson(Map json) => CntInfo( - collect: json['collect'] as int?, - play: json['play'] as int?, - thumbUp: json['thumb_up'] as int?, - share: json['share'] as int?, - ); -} diff --git a/lib/models_new/fav/fav_folder_info/data.dart b/lib/models_new/fav/fav_folder_info/data.dart deleted file mode 100644 index 16f2891f..00000000 --- a/lib/models_new/fav/fav_folder_info/data.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:PiliPlus/models_new/fav/fav_folder_info/cnt_info.dart'; -import 'package:PiliPlus/models_new/fav/fav_folder_info/upper.dart'; - -class FolderInfo { - int? id; - int? fid; - int? mid; - int? attr; - String? title; - String? cover; - Upper? upper; - int? coverType; - CntInfo? cntInfo; - int? type; - String? intro; - int? ctime; - int? mtime; - int? state; - int? favState; - int? likeState; - int? mediaCount; - bool? isTop; - - FolderInfo({ - this.id, - this.fid, - this.mid, - this.attr, - this.title, - this.cover, - this.upper, - this.coverType, - this.cntInfo, - this.type, - this.intro, - this.ctime, - this.mtime, - this.state, - this.favState, - this.likeState, - this.mediaCount, - this.isTop, - }); - - factory FolderInfo.fromJson(Map json) => FolderInfo( - id: json['id'] as int?, - fid: json['fid'] as int?, - mid: json['mid'] as int?, - attr: json['attr'] as int?, - title: json['title'] as String?, - cover: json['cover'] as String?, - upper: json['upper'] == null - ? null - : Upper.fromJson(json['upper'] as Map), - coverType: json['cover_type'] as int?, - cntInfo: json['cnt_info'] == null - ? null - : CntInfo.fromJson(json['cnt_info'] as Map), - type: json['type'] as int?, - intro: json['intro'] as String?, - ctime: json['ctime'] as int?, - mtime: json['mtime'] as int?, - state: json['state'] as int?, - favState: json['fav_state'] as int?, - likeState: json['like_state'] as int?, - mediaCount: json['media_count'] as int?, - isTop: json['is_top'] as bool?, - ); -} diff --git a/lib/models_new/fav/fav_folder_info/upper.dart b/lib/models_new/fav/fav_folder_info/upper.dart deleted file mode 100644 index c284ab3c..00000000 --- a/lib/models_new/fav/fav_folder_info/upper.dart +++ /dev/null @@ -1,26 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - bool? followed; - int? vipType; - int? vipStatue; - - Upper({ - this.mid, - this.name, - this.face, - this.followed, - this.vipType, - this.vipStatue, - }); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - followed: json['followed'] as bool?, - vipType: json['vip_type'] as int?, - vipStatue: json['vip_statue'] as int?, - ); -} diff --git a/lib/models_new/fav/fav_video/data.dart b/lib/models_new/fav/fav_video/data.dart deleted file mode 100644 index 542e9a13..00000000 --- a/lib/models_new/fav/fav_video/data.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; - -class FavVideoData { - int? count; - List? list; - bool? hasMore; - - FavVideoData({this.count, this.list, this.hasMore}); - - factory FavVideoData.fromJson(Map json) => FavVideoData( - count: json['count'] as int?, - list: (json['list'] as List?) - ?.map((e) => FavVideoItemModel.fromJson(e as Map)) - .toList(), - hasMore: json['has_more'] as bool?, - ); -} diff --git a/lib/models_new/fav/fav_video/upper.dart b/lib/models_new/fav/fav_video/upper.dart deleted file mode 100644 index d0e2361a..00000000 --- a/lib/models_new/fav/fav_video/upper.dart +++ /dev/null @@ -1,15 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - String? jumpLink; - - Upper({this.mid, this.name, this.face, this.jumpLink}); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - jumpLink: json['jump_link'] as String?, - ); -} diff --git a/lib/models_new/media_list/cnt_info.dart b/lib/models_new/media_list/cnt_info.dart deleted file mode 100644 index 73b82499..00000000 --- a/lib/models_new/media_list/cnt_info.dart +++ /dev/null @@ -1,41 +0,0 @@ -class CntInfo { - int? collect; - int? play; - int? thumbUp; - int? thumbDown; - int? share; - int? reply; - int? danmaku; - int? coin; - int? vt; - int? playSwitch; - String? viewText1; - - CntInfo({ - this.collect, - this.play, - this.thumbUp, - this.thumbDown, - this.share, - this.reply, - this.danmaku, - this.coin, - this.vt, - this.playSwitch, - this.viewText1, - }); - - factory CntInfo.fromJson(Map json) => CntInfo( - collect: json['collect'] as int?, - play: json['play'] as int?, - thumbUp: json['thumb_up'] as int?, - thumbDown: json['thumb_down'] as int?, - share: json['share'] as int?, - reply: json['reply'] as int?, - danmaku: json['danmaku'] as int?, - coin: json['coin'] as int?, - vt: json['vt'] as int?, - playSwitch: json['play_switch'] as int?, - viewText1: json['view_text_1'] as String?, - ); -} diff --git a/lib/models_new/media_list/media_list.dart b/lib/models_new/media_list/media_list.dart index 606e3f3e..16b21c83 100644 --- a/lib/models_new/media_list/media_list.dart +++ b/lib/models_new/media_list/media_list.dart @@ -1,10 +1,10 @@ +import 'package:PiliPlus/models/model_owner.dart'; +import 'package:PiliPlus/models_new/fav/fav_detail/cnt_info.dart'; import 'package:PiliPlus/models_new/media_list/badge.dart'; -import 'package:PiliPlus/models_new/media_list/cnt_info.dart'; import 'package:PiliPlus/models_new/media_list/coin.dart'; import 'package:PiliPlus/models_new/media_list/ogv_info.dart'; import 'package:PiliPlus/models_new/media_list/page.dart'; import 'package:PiliPlus/models_new/media_list/rights.dart'; -import 'package:PiliPlus/models_new/media_list/upper.dart'; import 'package:PiliPlus/utils/extension.dart'; class MediaListItemModel { @@ -26,7 +26,7 @@ class MediaListItemModel { List? pages; String? title; int? type; - Upper? upper; + Owner? upper; String? link; String? bvid; String? shortLink; @@ -94,7 +94,7 @@ class MediaListItemModel { pages = (json['pages'] as List?)?.map((e) => Page.fromJson(e)).toList(); title = json['title'] as String?; type = json['type'] as int?; - upper = json['upper'] == null ? null : Upper.fromJson(json['upper']); + upper = json['upper'] == null ? null : Owner.fromJson(json['upper']); link = json['link'] as String?; bvid = json['bv_id'] as String?; shortLink = json['short_link'] as String?; diff --git a/lib/models_new/media_list/upper.dart b/lib/models_new/media_list/upper.dart deleted file mode 100644 index 5e488a09..00000000 --- a/lib/models_new/media_list/upper.dart +++ /dev/null @@ -1,47 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - int? followed; - int? fans; - int? vipType; - int? vipStatue; - int? vipDueDate; - int? vipPayType; - int? officialRole; - String? officialTitle; - String? officialDesc; - String? displayName; - - Upper({ - this.mid, - this.name, - this.face, - this.followed, - this.fans, - this.vipType, - this.vipStatue, - this.vipDueDate, - this.vipPayType, - this.officialRole, - this.officialTitle, - this.officialDesc, - this.displayName, - }); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - followed: json['followed'] as int?, - fans: json['fans'] as int?, - vipType: json['vip_type'] as int?, - vipStatue: json['vip_statue'] as int?, - vipDueDate: json['vip_due_date'] as int?, - vipPayType: json['vip_pay_type'] as int?, - officialRole: json['official_role'] as int?, - officialTitle: json['official_title'] as String?, - officialDesc: json['official_desc'] as String?, - displayName: json['display_name'] as String?, - ); -} diff --git a/lib/models_new/space/space_fav/list.dart b/lib/models_new/space/space_fav/list.dart index f711d5d0..631bd033 100644 --- a/lib/models_new/space/space_fav/list.dart +++ b/lib/models_new/space/space_fav/list.dart @@ -1,4 +1,4 @@ -import 'package:PiliPlus/models_new/space/space_fav/upper.dart'; +import 'package:PiliPlus/models/model_owner.dart'; class SpaceFavItemModel { int? id; @@ -11,7 +11,7 @@ class SpaceFavItemModel { String? attrDesc; String? title; String? cover; - Upper? upper; + Owner? upper; int? coverType; String? intro; int? ctime; @@ -71,7 +71,7 @@ class SpaceFavItemModel { cover: json['cover'] as String?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), coverType: json['cover_type'] as int?, intro: json['intro'] as String?, ctime: json['ctime'] as int?, diff --git a/lib/models_new/space/space_fav/upper.dart b/lib/models_new/space/space_fav/upper.dart deleted file mode 100644 index d0e2361a..00000000 --- a/lib/models_new/space/space_fav/upper.dart +++ /dev/null @@ -1,15 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - String? jumpLink; - - Upper({this.mid, this.name, this.face, this.jumpLink}); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - jumpLink: json['jump_link'] as String?, - ); -} diff --git a/lib/models_new/sub/sub/list.dart b/lib/models_new/sub/sub/list.dart index bb59b1bb..9bd3fa3d 100644 --- a/lib/models_new/sub/sub/list.dart +++ b/lib/models_new/sub/sub/list.dart @@ -1,4 +1,4 @@ -import 'package:PiliPlus/models_new/sub/sub/upper.dart'; +import 'package:PiliPlus/models/model_owner.dart'; class SubItemModel { int? id; @@ -8,7 +8,7 @@ class SubItemModel { String? attrDesc; String? title; String? cover; - Upper? upper; + Owner? upper; int? coverType; String? intro; int? ctime; @@ -61,7 +61,7 @@ class SubItemModel { cover: json['cover'] as String?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), coverType: json['cover_type'] as int?, intro: json['intro'] as String?, ctime: json['ctime'] as int?, diff --git a/lib/models_new/sub/sub/upper.dart b/lib/models_new/sub/sub/upper.dart deleted file mode 100644 index d0e2361a..00000000 --- a/lib/models_new/sub/sub/upper.dart +++ /dev/null @@ -1,15 +0,0 @@ -class Upper { - int? mid; - String? name; - String? face; - String? jumpLink; - - Upper({this.mid, this.name, this.face, this.jumpLink}); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - face: json['face'] as String?, - jumpLink: json['jump_link'] as String?, - ); -} diff --git a/lib/models_new/sub/sub_detail/cnt_info.dart b/lib/models_new/sub/sub_detail/cnt_info.dart deleted file mode 100644 index e6b37bf0..00000000 --- a/lib/models_new/sub/sub_detail/cnt_info.dart +++ /dev/null @@ -1,15 +0,0 @@ -class CntInfo { - int? collect; - int? play; - int? danmaku; - int? vt; - - CntInfo({this.collect, this.play, this.danmaku, this.vt}); - - factory CntInfo.fromJson(Map json) => CntInfo( - collect: json['collect'] as int?, - play: json['play'] as int?, - danmaku: json['danmaku'] as int?, - vt: json['vt'] as int?, - ); -} diff --git a/lib/models_new/sub/sub_detail/info.dart b/lib/models_new/sub/sub_detail/info.dart index dd86dcef..701dc656 100644 --- a/lib/models_new/sub/sub_detail/info.dart +++ b/lib/models_new/sub/sub_detail/info.dart @@ -1,12 +1,12 @@ -import 'package:PiliPlus/models_new/sub/sub_detail/cnt_info.dart'; -import 'package:PiliPlus/models_new/sub/sub_detail/upper.dart'; +import 'package:PiliPlus/models/model_owner.dart'; +import 'package:PiliPlus/models_new/fav/fav_detail/cnt_info.dart'; class Info { int? id; int? seasonType; String? title; String? cover; - Upper? upper; + Owner? upper; CntInfo? cntInfo; int? mediaCount; String? intro; @@ -31,7 +31,7 @@ class Info { cover: json['cover'] as String?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), cntInfo: json['cnt_info'] == null ? null : CntInfo.fromJson(json['cnt_info'] as Map), diff --git a/lib/models_new/sub/sub_detail/media.dart b/lib/models_new/sub/sub_detail/media.dart index f7f978b7..5e46ee42 100644 --- a/lib/models_new/sub/sub_detail/media.dart +++ b/lib/models_new/sub/sub_detail/media.dart @@ -1,5 +1,5 @@ -import 'package:PiliPlus/models_new/sub/sub_detail/cnt_info.dart'; -import 'package:PiliPlus/models_new/sub/sub_detail/upper.dart'; +import 'package:PiliPlus/models/model_owner.dart'; +import 'package:PiliPlus/models_new/fav/fav_detail/cnt_info.dart'; class SubDetailItemModel { int? id; @@ -8,7 +8,7 @@ class SubDetailItemModel { int? duration; int? pubtime; String? bvid; - Upper? upper; + Owner? upper; CntInfo? cntInfo; int? enableVt; String? vtDisplay; @@ -38,7 +38,7 @@ class SubDetailItemModel { bvid: json['bvid'] as String?, upper: json['upper'] == null ? null - : Upper.fromJson(json['upper'] as Map), + : Owner.fromJson(json['upper'] as Map), cntInfo: json['cnt_info'] == null ? null : CntInfo.fromJson(json['cnt_info'] as Map), diff --git a/lib/models_new/sub/sub_detail/upper.dart b/lib/models_new/sub/sub_detail/upper.dart deleted file mode 100644 index 876980fd..00000000 --- a/lib/models_new/sub/sub_detail/upper.dart +++ /dev/null @@ -1,11 +0,0 @@ -class Upper { - int? mid; - String? name; - - Upper({this.mid, this.name}); - - factory Upper.fromJson(Map json) => Upper( - mid: json['mid'] as int?, - name: json['name'] as String?, - ); -} diff --git a/lib/pages/fav/video/controller.dart b/lib/pages/fav/video/controller.dart index da4a803d..b21db7c0 100644 --- a/lib/pages/fav/video/controller.dart +++ b/lib/pages/fav/video/controller.dart @@ -1,13 +1,12 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/common/common_list_controller.dart'; import 'package:PiliPlus/services/account_service.dart'; import 'package:get/get.dart'; -class FavController - extends CommonListController { +class FavController extends CommonListController { AccountService accountService = Get.find(); @override @@ -26,12 +25,12 @@ class FavController } @override - List? getDataList(FavVideoData response) { + List? getDataList(FavFolderData response) { return response.list; } @override - bool customHandleResponse(bool isRefresh, Success response) { + bool customHandleResponse(bool isRefresh, Success response) { if (response.response.hasMore == false) { isEnd = true; } @@ -39,7 +38,7 @@ class FavController } @override - Future> customGetData() => FavHttp.userfavFolder( + Future> customGetData() => FavHttp.userfavFolder( pn: page, ps: 20, mid: accountService.mid, diff --git a/lib/pages/fav/video/view.dart b/lib/pages/fav/video/view.dart index e6641a12..be2e62fb 100644 --- a/lib/pages/fav/video/view.dart +++ b/lib/pages/fav/video/view.dart @@ -3,7 +3,7 @@ import 'package:PiliPlus/common/skeleton/video_card_h.dart'; import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/common/widgets/refresh_indicator.dart'; import 'package:PiliPlus/http/loading_state.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/fav/video/controller.dart'; import 'package:PiliPlus/pages/fav/video/widgets/item.dart'; import 'package:PiliPlus/utils/grid.dart'; @@ -48,7 +48,7 @@ class _FavVideoPageState extends State ); } - Widget _buildBody(LoadingState?> loadingState) { + Widget _buildBody(LoadingState?> loadingState) { return switch (loadingState) { Loading() => SliverGrid( gridDelegate: Grid.videoCardHDelegate(context), diff --git a/lib/pages/fav/video/widgets/item.dart b/lib/pages/fav/video/widgets/item.dart index f4bea532..18d38802 100644 --- a/lib/pages/fav/video/widgets/item.dart +++ b/lib/pages/fav/video/widgets/item.dart @@ -1,13 +1,13 @@ import 'package:PiliPlus/common/constants.dart'; import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; class FavVideoItem extends StatelessWidget { final String heroTag; - final FavVideoItemModel item; + final FavFolderInfo item; final VoidCallback? onTap; final VoidCallback? onLongPress; @@ -68,7 +68,7 @@ class FavVideoItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - item.title!, + item.title, textAlign: TextAlign.start, style: const TextStyle( letterSpacing: 0.3, diff --git a/lib/pages/fav/view.dart b/lib/pages/fav/view.dart index ec857bc1..e8c4c21c 100644 --- a/lib/pages/fav/view.dart +++ b/lib/pages/fav/view.dart @@ -1,7 +1,7 @@ import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/fav_type.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/fav/article/controller.dart'; import 'package:PiliPlus/pages/fav/topic/controller.dart'; import 'package:PiliPlus/pages/fav/video/controller.dart'; @@ -60,7 +60,7 @@ class _FavPageState extends State with SingleTickerProviderStateMixin { onPressed: () => Get.toNamed('/createFav')?.then( (data) { if (data != null) { - List? list = + List? list = _favController.loadingState.value.isSuccess ? _favController.loadingState.value.data : null; diff --git a/lib/pages/fav_create/view.dart b/lib/pages/fav_create/view.dart index 23c25372..b1490089 100644 --- a/lib/pages/fav_create/view.dart +++ b/lib/pages/fav_create/view.dart @@ -1,7 +1,7 @@ import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/msg.dart'; -import 'package:PiliPlus/models_new/fav/fav_folder_info/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:easy_debounce/easy_throttle.dart'; @@ -40,12 +40,12 @@ class _CreateFavPageState extends State { void _getFolderInfo() { _errMsg = null; - FavHttp.folderInfo(mediaId: _mediaId).then((res) { + FavHttp.favFolderInfo(mediaId: _mediaId).then((res) { if (res['status']) { - FolderInfo data = res['data']; - _titleController.text = data.title!; + FavFolderInfo data = res['data']; + _titleController.text = data.title; _introController.text = data.intro ?? ''; - _isPublic = Utils.isPublicFav(data.attr!); + _isPublic = Utils.isPublicFav(data.attr); _cover = data.cover; _attr = data.attr; } else { diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index 7d4516a0..c255d568 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -2,7 +2,7 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/data.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/common/multi_select_controller.dart'; import 'package:PiliPlus/pages/fav_sort/view.dart'; import 'package:PiliPlus/services/account_service.dart'; @@ -17,7 +17,7 @@ class FavDetailController extends MultiSelectController { late int mediaId; late String heroTag; - final Rx item = FavVideoItemModel().obs; + final Rx folderInfo = FavFolderInfo().obs; final Rx isOwner = Rx(null); AccountService accountService = Get.find(); @@ -42,7 +42,7 @@ class FavDetailController @override void checkIsEnd(int length) { - if (item.value.mediaCount != null && length >= item.value.mediaCount!) { + if (length >= folderInfo.value.mediaCount) { isEnd = true; } } @@ -51,7 +51,7 @@ class FavDetailController bool customHandleResponse(bool isRefresh, Success response) { FavDetailData data = response.response; if (isRefresh) { - item.value = data.info ?? FavVideoItemModel(); + folderInfo.value = data.info!; isOwner.value = data.info?.mid == accountService.mid; } return false; @@ -63,11 +63,12 @@ class FavDetailController delIds: mediaId.toString(), ); if (result['status']) { - List dataList = loadingState.value.data!; - item.value.mediaCount = item.value.mediaCount! - 1; - item.refresh(); - dataList.removeAt(index); - loadingState.refresh(); + folderInfo + ..value.mediaCount -= 1 + ..refresh(); + loadingState + ..value.data!.removeAt(index) + ..refresh(); SmartDialog.showToast('取消收藏'); } else { SmartDialog.showToast(result['msg']); @@ -113,8 +114,9 @@ class FavDetailController List dataList = loadingState.value.data!; List remainList = dataList.toSet().difference(list.toSet()).toList(); - item.value.mediaCount = item.value.mediaCount! - list.length; - item.refresh(); + folderInfo + ..value.mediaCount -= list.length + ..refresh(); if (remainList.isNotEmpty) { loadingState.value = Success(remainList); } else { @@ -153,10 +155,10 @@ class FavDetailController 'videoItem': element, 'heroTag': Utils.makeHeroTag(element.bvid), 'sourceType': 'fav', - 'mediaId': item.value.id, + 'mediaId': folderInfo.value.id, 'oid': element.id, - 'favTitle': item.value.title, - 'count': item.value.mediaCount, + 'favTitle': folderInfo.value.title, + 'count': folderInfo.value.mediaCount, 'desc': true, 'isOwner': isOwner.value ?? false, }, @@ -183,7 +185,7 @@ class FavDetailController : await FavHttp.favFavFolder(mediaId); if (res['status']) { - item + folderInfo ..value.favState = isFav ? 0 : 1 ..refresh(); } @@ -205,7 +207,7 @@ class FavDetailController void onSort() { if (loadingState.value.isSuccess && loadingState.value.data?.isNotEmpty == true) { - if ((item.value.mediaCount ?? 0) > 1000) { + if (folderInfo.value.mediaCount > 1000) { SmartDialog.showToast('内容太多啦!超过1000不支持排序'); return; } diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 4f00fa12..097a319a 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -9,7 +9,7 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/data.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/dynamics_repost/view.dart'; import 'package:PiliPlus/pages/fav_detail/controller.dart'; import 'package:PiliPlus/pages/fav_detail/widget/fav_video_card.dart'; @@ -53,7 +53,7 @@ class _FavDetailPageState extends State { child: Scaffold( resizeToAvoidBottomInset: false, floatingActionButton: Obx( - () => (_favDetailController.item.value.mediaCount ?? -1) > 0 + () => _favDetailController.folderInfo.value.mediaCount > 0 ? FloatingActionButton.extended( onPressed: _favDetailController.toViewPlayAll, label: const Text('播放全部'), @@ -112,11 +112,11 @@ class _FavDetailPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _favDetailController.item.value.title ?? '', + _favDetailController.folderInfo.value.title, style: theme.textTheme.titleMedium, ), Text( - '共${_favDetailController.item.value.mediaCount}条视频', + '共${_favDetailController.folderInfo.value.mediaCount}条视频', style: theme.textTheme.labelMedium, ) ], @@ -128,35 +128,42 @@ class _FavDetailPageState extends State { ); } - List _actions(ThemeData theme) => [ - IconButton( - tooltip: '搜索', - onPressed: () => Get.toNamed( + List _actions(ThemeData theme) { + return [ + IconButton( + tooltip: '搜索', + onPressed: () { + final folderInfo = _favDetailController.folderInfo.value; + Get.toNamed( '/favSearch', arguments: { 'type': 0, 'mediaId': int.parse(mediaId), - 'title': _favDetailController.item.value.title, - 'count': _favDetailController.item.value.mediaCount, + 'title': folderInfo.title, + 'count': folderInfo.mediaCount, 'isOwner': _favDetailController.isOwner.value ?? false, }, - ), - icon: const Icon(Icons.search_outlined), - ), - Obx( - () => _favDetailController.item.value.attr == null || - !Utils.isPublicFav(_favDetailController.item.value.attr!) - ? const SizedBox.shrink() - : IconButton( - iconSize: 22, - onPressed: () => Utils.shareText( - 'https://www.bilibili.com/medialist/detail/ml${_favDetailController.mediaId}'), - icon: const Icon(Icons.share), - ), - ), - PopupMenuButton( - icon: const Icon(Icons.more_vert), - itemBuilder: (context) => [ + ); + }, + icon: const Icon(Icons.search_outlined), + ), + Obx(() { + final attr = _favDetailController.folderInfo.value.attr; + return attr == -1 || !Utils.isPublicFav(attr) + ? const SizedBox.shrink() + : IconButton( + iconSize: 22, + tooltip: '分享', + onPressed: () => Utils.shareText( + 'https://www.bilibili.com/medialist/detail/ml${_favDetailController.mediaId}'), + icon: const Icon(Icons.share), + ); + }), + PopupMenuButton( + icon: const Icon(Icons.more_vert), + itemBuilder: (context) { + final folderInfo = _favDetailController.folderInfo.value; + return [ if (_favDetailController.isOwner.value == true) ...[ PopupMenuItem( onTap: _favDetailController.onSort, @@ -167,20 +174,19 @@ class _FavDetailPageState extends State { '/createFav', parameters: {'mediaId': mediaId}, )?.then((res) { - if (res is FavVideoItemModel) { - _favDetailController.item.value = res; + if (res is FavFolderInfo) { + _favDetailController.folderInfo.value = res; } }), child: const Text('编辑信息'), ), ] else PopupMenuItem( - onTap: () => _favDetailController - .onFav(_favDetailController.item.value.favState == 1), - child: Text( - '${_favDetailController.item.value.favState == 1 ? '取消' : ''}收藏'), + onTap: () => + _favDetailController.onFav(folderInfo.favState == 1), + child: Text('${folderInfo.favState == 1 ? '取消' : ''}收藏'), ), - if (Utils.isPublicFav(_favDetailController.item.value.attr ?? 0)) + if (Utils.isPublicFav(folderInfo.attr)) PopupMenuItem( onTap: () => showModalBottomSheet( context: context, @@ -189,9 +195,9 @@ class _FavDetailPageState extends State { builder: (context) => RepostPanel( rid: _favDetailController.mediaId, dynType: 4300, - pic: _favDetailController.item.value.cover, - title: _favDetailController.item.value.title, - uname: _favDetailController.item.value.upper?.name, + pic: folderInfo.cover, + title: folderInfo.title, + uname: folderInfo.upper?.name, ), ), child: const Text('分享至动态'), @@ -201,8 +207,7 @@ class _FavDetailPageState extends State { onTap: _favDetailController.cleanFav, child: const Text('清除失效内容'), ), - if (!Utils.isDefaultFav( - _favDetailController.item.value.attr)) ...[ + if (!Utils.isDefaultFav(folderInfo.attr)) ...[ const PopupMenuDivider(height: 12), PopupMenuItem( onTap: () => showConfirmDialog( @@ -227,10 +232,12 @@ class _FavDetailPageState extends State { ), ], ], - ], - ), - const SizedBox(width: 10), - ]; + ]; + }, + ), + const SizedBox(width: 10), + ]; + } List _selectActions(ThemeData theme) => [ TextButton( @@ -308,7 +315,7 @@ class _FavDetailPageState extends State { height: 110, child: Obx( () { - final item = _favDetailController.item.value; + final folderInfo = _favDetailController.folderInfo.value; return Row( spacing: 12, crossAxisAlignment: CrossAxisAlignment.start, @@ -321,7 +328,7 @@ class _FavDetailPageState extends State { child: NetworkImgLayer( width: 176, height: 110, - src: item.cover, + src: folderInfo.cover, ), ), Positioned( @@ -331,8 +338,7 @@ class _FavDetailPageState extends State { if (_favDetailController.isOwner.value != false) { return const SizedBox.shrink(); } - bool isFav = - _favDetailController.item.value.favState == 1; + bool isFav = folderInfo.favState == 1; return iconButton( context: context, size: 28, @@ -352,55 +358,49 @@ class _FavDetailPageState extends State { ) ], ), - if (item.title != null) + if (folderInfo.title.isNotEmpty) Expanded( child: Column( spacing: 4, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - item.title!, + folderInfo.title, style: TextStyle( fontSize: theme.textTheme.titleMedium!.fontSize, fontWeight: FontWeight.bold, ), ), GestureDetector( - onTap: () => - Get.toNamed('/member?mid=${item.upper!.mid}'), + onTap: () => Get.toNamed( + '/member?mid=${folderInfo.upper!.mid}'), child: Text( - item.upper!.name!, + folderInfo.upper!.name!, style: TextStyle( color: theme.colorScheme.primary, ), ), ), - if (item.intro?.isNotEmpty == true) + if (folderInfo.intro?.isNotEmpty == true) Text( - item.intro!, + folderInfo.intro!, style: style, maxLines: 2, overflow: TextOverflow.ellipsis, ), - if (item.attr != null) ...[ - Expanded( - child: Align( - alignment: Alignment.bottomLeft, - child: Text( - '共${item.mediaCount}条视频 · ${Utils.isPublicFavText(item.attr)}', - textAlign: TextAlign.end, - style: style, - ), + Expanded( + child: Align( + alignment: Alignment.bottomLeft, + child: Text( + '共${folderInfo.mediaCount}条视频 · ${Utils.isPublicFavText(folderInfo.attr)}', + textAlign: TextAlign.end, + style: style, ), ), - ], + ), ], ), - ) - else - SizedBox.shrink( - key: ValueKey(_favDetailController.item.value), - ) + ), ], ); }, @@ -455,23 +455,26 @@ class _FavDetailPageState extends State { item.type!, ) : null, - onViewFav: () => PageUtils.toVideoPage( - 'bvid=${item.bvid}&cid=${item.ugc?.firstCid}', - arguments: { - 'videoItem': item, - 'heroTag': Utils.makeHeroTag(item.bvid), - 'sourceType': 'fav', - 'mediaId': _favDetailController.item.value.id, - 'oid': item.id, - 'favTitle': _favDetailController.item.value.title, - 'count': - _favDetailController.item.value.mediaCount, - 'desc': true, - 'isContinuePlaying': index != 0, - 'isOwner': - _favDetailController.isOwner.value ?? false, - }, - ), + onViewFav: () { + final folderInfo = + _favDetailController.folderInfo.value; + PageUtils.toVideoPage( + 'bvid=${item.bvid}&cid=${item.ugc?.firstCid}', + arguments: { + 'videoItem': item, + 'heroTag': Utils.makeHeroTag(item.bvid), + 'sourceType': 'fav', + 'mediaId': folderInfo.id, + 'oid': item.id, + 'favTitle': folderInfo.title, + 'count': folderInfo.mediaCount, + 'desc': true, + 'isContinuePlaying': index != 0, + 'isOwner': + _favDetailController.isOwner.value ?? false, + }, + ); + }, onTap: _favDetailController.enableMultiSelect.value ? () => _favDetailController.onSelect(index) : null, diff --git a/lib/pages/fav_folder_sort/view.dart b/lib/pages/fav_folder_sort/view.dart index 56019345..e8b1cf05 100644 --- a/lib/pages/fav_folder_sort/view.dart +++ b/lib/pages/fav_folder_sort/view.dart @@ -1,6 +1,6 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/fav/video/controller.dart'; import 'package:PiliPlus/pages/fav/video/widgets/item.dart'; import 'package:flutter/material.dart'; @@ -20,8 +20,8 @@ class _FavFolderSortPageState extends State { FavController get _favController => widget.favController; final GlobalKey _key = GlobalKey(); - late List sortList = - List.from(_favController.loadingState.value.data!); + late List sortList = + List.from(_favController.loadingState.value.data!); final ScrollController _scrollController = ScrollController(); @@ -34,8 +34,7 @@ class _FavFolderSortPageState extends State { _favController.onLoadMore().whenComplete(() { try { if (_favController.loadingState.value.isSuccess) { - List list = - _favController.loadingState.value.data!; + List list = _favController.loadingState.value.data!; sortList.addAll(list.sublist(sortList.length)); if (mounted) { setState(() {}); diff --git a/lib/pages/fav_panel/view.dart b/lib/pages/fav_panel/view.dart index 5df4bc89..6dd77ba1 100644 --- a/lib/pages/fav_panel/view.dart +++ b/lib/pages/fav_panel/view.dart @@ -1,5 +1,5 @@ import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; import 'package:PiliPlus/utils/feed_back.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; @@ -45,7 +45,7 @@ class _FavPanelState extends State { TextButton.icon( onPressed: () => Get.toNamed('/createFav')?.then((data) { if (data != null) { - (widget.ctr?.favFolderData as Rx) + (widget.ctr?.favFolderData as Rx) ..value.list?.insert(1, data) ..refresh(); } diff --git a/lib/pages/fav_sort/view.dart b/lib/pages/fav_sort/view.dart index 5a70de93..ae8a0f0d 100644 --- a/lib/pages/fav_sort/view.dart +++ b/lib/pages/fav_sort/view.dart @@ -68,7 +68,7 @@ class _FavSortPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text('排序: ${_favDetailController.item.value.title}'), + title: Text('排序: ${_favDetailController.folderInfo.value.title}'), actions: [ TextButton( onPressed: () async { diff --git a/lib/pages/media/controller.dart b/lib/pages/media/controller.dart index 1a318998..9d5950c2 100644 --- a/lib/pages/media/controller.dart +++ b/lib/pages/media/controller.dart @@ -1,12 +1,13 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; import 'package:PiliPlus/pages/common/common_data_controller.dart'; import 'package:PiliPlus/services/account_service.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -class MediaController extends CommonDataController { +class MediaController + extends CommonDataController { final list = <({IconData icon, String title, VoidCallback onTap})>[ ( icon: Icons.history, @@ -47,14 +48,14 @@ class MediaController extends CommonDataController { } @override - bool customHandleResponse(bool isRefresh, Success response) { + bool customHandleResponse(bool isRefresh, Success response) { count.value = response.response.count ?? -1; loadingState.value = response; return true; } @override - Future> customGetData() { + Future> customGetData() { return FavHttp.userfavFolder( pn: 1, ps: 5, diff --git a/lib/pages/media/view.dart b/lib/pages/media/view.dart index 98135be1..d74ca3e7 100644 --- a/lib/pages/media/view.dart +++ b/lib/pages/media/view.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/nav_bar_config.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/common/common_page.dart'; import 'package:PiliPlus/pages/main/controller.dart'; import 'package:PiliPlus/pages/media/controller.dart'; @@ -169,7 +169,7 @@ class _MediaPageState extends CommonPageState Loading() => const SizedBox.shrink(), Success(:var response) => Builder( builder: (context) { - List? favFolderList = response.list; + List? favFolderList = response.list; if (favFolderList.isNullOrEmpty) { return const SizedBox.shrink(); } diff --git a/lib/pages/media/widgets/item.dart b/lib/pages/media/widgets/item.dart index 595cd241..5c1c7b2b 100644 --- a/lib/pages/media/widgets/item.dart +++ b/lib/pages/media/widgets/item.dart @@ -1,5 +1,5 @@ import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -12,7 +12,7 @@ class FavFolderItem extends StatelessWidget { required this.heroTag, }); - final FavVideoItemModel item; + final FavFolderInfo item; final VoidCallback callback; final String heroTag; diff --git a/lib/pages/member_favorite/widget/item.dart b/lib/pages/member_favorite/widget/item.dart index 3284c74e..842b8db8 100644 --- a/lib/pages/member_favorite/widget/item.dart +++ b/lib/pages/member_favorite/widget/item.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/image/image_save.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/models_new/space/space_fav/list.dart'; import 'package:PiliPlus/models_new/sub/sub/list.dart'; -import 'package:PiliPlus/models_new/sub/sub/upper.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -43,11 +42,7 @@ class MemberFavItem extends StatelessWidget { type: item.type, title: item.title, cover: item.cover, - upper: Upper( - mid: item.upper?.mid, - name: item.upper?.name, - face: item.upper?.face, - ), + upper: item.upper, mediaCount: item.mediaCount, viewCount: item.viewCount, ), diff --git a/lib/pages/subscription_detail/controller.dart b/lib/pages/subscription_detail/controller.dart index a6a07ab6..74fefcc6 100644 --- a/lib/pages/subscription_detail/controller.dart +++ b/lib/pages/subscription_detail/controller.dart @@ -8,7 +8,7 @@ import 'package:get/get.dart'; class SubDetailController extends CommonListController { - late SubItemModel item; + late SubItemModel subInfo; late int id; late String heroTag; @@ -19,9 +19,9 @@ class SubDetailController @override void onInit() { super.onInit(); - item = Get.arguments; - mediaCount = (item.mediaCount ?? 0).obs; - playCount = (item.viewCount ?? 0).obs; + subInfo = Get.arguments; + mediaCount = (subInfo.mediaCount ?? 0).obs; + playCount = (subInfo.viewCount ?? 0).obs; id = int.parse(Get.parameters['id']!); heroTag = Get.parameters['heroTag']!; queryData(); @@ -42,7 +42,7 @@ class SubDetailController @override bool customHandleResponse(bool isRefresh, Success response) { mediaCount.value = response.response.info!.mediaCount!; - if (item.type == 11) { + if (subInfo.type == 11) { playCount.value = response.response.info!.cntInfo!.play!; } return false; @@ -50,7 +50,7 @@ class SubDetailController @override Future> customGetData() { - if (item.type == 11) { + if (subInfo.type == 11) { return FavHttp.favResourceList( id: id, ps: 20, diff --git a/lib/pages/subscription_detail/view.dart b/lib/pages/subscription_detail/view.dart index 48868b56..5a44ee05 100644 --- a/lib/pages/subscription_detail/view.dart +++ b/lib/pages/subscription_detail/view.dart @@ -99,7 +99,7 @@ class _SubDetailPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _subDetailController.item.title!, + _subDetailController.subInfo.title!, maxLines: 1, overflow: TextOverflow.ellipsis, style: theme.textTheme.titleMedium, @@ -136,7 +136,7 @@ class _SubDetailPageState extends State { child: NetworkImgLayer( width: 176, height: 110, - src: _subDetailController.item.cover, + src: _subDetailController.subInfo.cover, ), ), Expanded( @@ -145,7 +145,7 @@ class _SubDetailPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _subDetailController.item.title!, + _subDetailController.subInfo.title!, style: TextStyle( fontSize: theme.textTheme.titleMedium!.fontSize, fontWeight: FontWeight.bold, @@ -154,14 +154,14 @@ class _SubDetailPageState extends State { GestureDetector( onTap: () { Get.toNamed( - '/member?mid=${_subDetailController.item.upper!.mid}', + '/member?mid=${_subDetailController.subInfo.upper!.mid}', arguments: { - 'face': _subDetailController.item.upper!.face, + 'face': _subDetailController.subInfo.upper!.face, }, ); }, child: Text( - _subDetailController.item.upper!.name!, + _subDetailController.subInfo.upper!.name!, style: TextStyle(color: theme.colorScheme.primary), ), ), diff --git a/lib/pages/video/introduction/pgc/controller.dart b/lib/pages/video/introduction/pgc/controller.dart index 9aac9a0c..db3a8951 100644 --- a/lib/pages/video/introduction/pgc/controller.dart +++ b/lib/pages/video/introduction/pgc/controller.dart @@ -8,8 +8,8 @@ import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/pgc_lcf.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/episode.dart'; import 'package:PiliPlus/models_new/pgc/pgc_info_model/result.dart'; import 'package:PiliPlus/models_new/triple/pgc_triple.dart'; @@ -59,7 +59,7 @@ class PgcIntroController extends GetxController { List? videoTags; List? favIds; - Rx favFolderData = FavVideoData().obs; + Rx favFolderData = FavFolderData().obs; AccountService accountService = Get.find(); @@ -162,7 +162,7 @@ class PgcIntroController extends GetxController { SmartDialog.showLoading(msg: '请求中'); queryVideoInFolder().then((res) async { if (res['status']) { - int defaultFolderId = favFolderData.value.list!.first.id!; + int defaultFolderId = favFolderData.value.list!.first.id; int favStatus = favFolderData.value.list!.first.favState!; var result = await FavHttp.favVideo( aid: epId, @@ -352,10 +352,10 @@ class PgcIntroController extends GetxController { // 选择文件夹 void onChoose(bool checkValue, int index) { feedBack(); - FavVideoItemModel item = favFolderData.value.list![index]; + FavFolderInfo item = favFolderData.value.list![index]; item ..favState = checkValue ? 1 : 0 - ..mediaCount = checkValue ? item.mediaCount! + 1 : item.mediaCount! - 1; + ..mediaCount = checkValue ? item.mediaCount + 1 : item.mediaCount - 1; favFolderData.refresh(); } diff --git a/lib/pages/video/introduction/ugc/controller.dart b/lib/pages/video/introduction/ugc/controller.dart index be41719c..8e935e3a 100644 --- a/lib/pages/video/introduction/ugc/controller.dart +++ b/lib/pages/video/introduction/ugc/controller.dart @@ -9,8 +9,8 @@ import 'package:PiliPlus/http/member.dart'; import 'package:PiliPlus/http/search.dart'; import 'package:PiliPlus/http/user.dart'; import 'package:PiliPlus/http/video.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/data.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/data.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/models_new/triple/ugc_triple.dart'; import 'package:PiliPlus/models_new/video/video_ai_conclusion/data.dart'; import 'package:PiliPlus/models_new/video/video_ai_conclusion/model_result.dart'; @@ -78,7 +78,7 @@ class VideoIntroController extends GetxController { RxBool hasFav = false.obs; // 是否稍后再看 RxBool hasLater = false.obs; - Rx favFolderData = FavVideoData().obs; + Rx favFolderData = FavFolderData().obs; Set? favIds; // 关注状态 默认未关注 RxMap followStatus = {}.obs; @@ -387,7 +387,7 @@ class VideoIntroController extends GetxController { SmartDialog.showLoading(msg: '请求中'); queryVideoInFolder().then((res) async { if (res['status']) { - int defaultFolderId = favFolderData.value.list!.first.id!; + int defaultFolderId = favFolderData.value.list!.first.id; bool notInDefFolder = favFolderData.value.list!.first.favState! == 0; var result = await FavHttp.favVideo( aid: IdUtils.bv2av(bvid), @@ -565,10 +565,10 @@ class VideoIntroController extends GetxController { // 选择文件夹 void onChoose(bool checkValue, int index) { feedBack(); - FavVideoItemModel item = favFolderData.value.list![index]; + FavFolderInfo item = favFolderData.value.list![index]; item ..favState = checkValue ? 1 : 0 - ..mediaCount = checkValue ? item.mediaCount! + 1 : item.mediaCount! - 1; + ..mediaCount = checkValue ? item.mediaCount + 1 : item.mediaCount - 1; favFolderData.refresh(); } diff --git a/lib/utils/request_utils.dart b/lib/utils/request_utils.dart index c888d649..d73ec60b 100644 --- a/lib/utils/request_utils.dart +++ b/lib/utils/request_utils.dart @@ -18,7 +18,7 @@ import 'package:PiliPlus/http/validate.dart'; import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/login/model.dart'; -import 'package:PiliPlus/models_new/fav/fav_video/list.dart'; +import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/common/multi_select_controller.dart'; import 'package:PiliPlus/pages/dynamics_tab/controller.dart'; import 'package:PiliPlus/pages/group_panel/view.dart'; @@ -346,7 +346,7 @@ class RequestUtils { if (context.mounted && res['status'] && (res['data'].list as List?)?.isNotEmpty == true) { - List list = res['data'].list; + List list = res['data'].list; dynamic checkedId; showDialog( context: context, @@ -360,7 +360,7 @@ class RequestUtils { children: List.generate(list.length, (index) { return RadioWidget( padding: const EdgeInsets.only(left: 14), - title: list[index].title ?? '', + title: list[index].title, groupValue: checkedId, value: list[index].id, onChanged: (value) {