Compare commits
2 Commits
fix-imgPre
...
feature-se
Author | SHA1 | Date | |
---|---|---|---|
bc26e79bf9 | |||
b248158e62 |
31
change_log/1.0.20.0303.md
Normal file
31
change_log/1.0.20.0303.md
Normal file
@ -0,0 +1,31 @@
|
||||
## 1.0.20
|
||||
|
||||
|
||||
### 功能
|
||||
+ 评论区增加表情
|
||||
+ 首页渐变背景开关
|
||||
+ 媒体库显示「我的订阅」
|
||||
+ 评论区链接解析
|
||||
+ 默认启动页设置
|
||||
|
||||
### 修复
|
||||
+ 评论区内容重复
|
||||
+ pip相关问题
|
||||
+ 播放多p视频评论不刷新
|
||||
+ 视频评论翻页重复
|
||||
|
||||
### 优化
|
||||
+ url scheme优化
|
||||
+ 图片预览放大
|
||||
+ 图片加载速度
|
||||
+ 视频评论区复制
|
||||
+ 全屏显示视频标题
|
||||
+ 网络异常处理
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
更多更新日志可在Github上查看
|
||||
问题反馈、功能建议请查看「关于」页面。
|
@ -490,6 +490,9 @@ class Api {
|
||||
/// 我的订阅详情
|
||||
static const userSubFolderDetail = '/x/space/fav/season/list';
|
||||
|
||||
/// 取消订阅
|
||||
static const userSubCancel = '/x/v3/fav/season/unfav';
|
||||
|
||||
/// 表情
|
||||
static const emojiList = '/x/emote/user/panel/web';
|
||||
|
||||
|
@ -349,4 +349,21 @@ class UserHttp {
|
||||
return {'status': false, 'msg': res.data['message']};
|
||||
}
|
||||
}
|
||||
|
||||
// 取消订阅
|
||||
static Future userSubCancel({required int seasonId}) async {
|
||||
var res = await Request().post(
|
||||
Api.userSubCancel,
|
||||
queryParameters: {
|
||||
'season_id': seasonId,
|
||||
'platform': 'web',
|
||||
'csrf': await Request.getCsrf(),
|
||||
},
|
||||
);
|
||||
if (res.data['code'] == 0) {
|
||||
return {'status': true, 'msg': '取消订阅成功'};
|
||||
} else {
|
||||
return {'status': false, 'msg': res.data['message']};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -46,4 +46,41 @@ class SubController extends GetxController {
|
||||
Future onLoad() async {
|
||||
querySubFolder(type: 'onload');
|
||||
}
|
||||
|
||||
// 取消订阅
|
||||
Future<dynamic> cancelSub({required int id}) async {
|
||||
showDialog(
|
||||
context: Get.context!,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
title: const Text('提示'),
|
||||
content: const Text('确认要取消订阅吗?'),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Get.back(),
|
||||
child: Text(
|
||||
'取消',
|
||||
style:
|
||||
TextStyle(color: Theme.of(context).colorScheme.outline),
|
||||
)),
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
Get.back();
|
||||
var res = await UserHttp.userSubCancel(seasonId: id);
|
||||
if (res['status']) {
|
||||
SmartDialog.showToast('取消订阅成功');
|
||||
subFolderData.value.list!
|
||||
.removeWhere((element) => element.id == id);
|
||||
subFolderData.update((val) {});
|
||||
} else {
|
||||
SmartDialog.showToast(res['msg']);
|
||||
}
|
||||
},
|
||||
child: const Text('确认'),
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -57,8 +57,15 @@ class _SubPageState extends State<SubPage> {
|
||||
itemCount: _subController.subFolderData.value.list!.length,
|
||||
itemBuilder: (context, index) {
|
||||
return SubItem(
|
||||
subFolderItem:
|
||||
_subController.subFolderData.value.list![index]);
|
||||
subFolderItem:
|
||||
_subController.subFolderData.value.list![index],
|
||||
fuc: () {
|
||||
_subController.cancelSub(
|
||||
id: _subController
|
||||
.subFolderData.value.list![index].id!,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
|
@ -8,7 +8,8 @@ import '../../../models/user/sub_folder.dart';
|
||||
|
||||
class SubItem extends StatelessWidget {
|
||||
final SubFolderItemData subFolderItem;
|
||||
const SubItem({super.key, required this.subFolderItem});
|
||||
final Function fuc;
|
||||
const SubItem({super.key, required this.subFolderItem, required this.fuc});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -51,7 +52,7 @@ class SubItem extends StatelessWidget {
|
||||
},
|
||||
),
|
||||
),
|
||||
VideoContent(subFolderItem: subFolderItem)
|
||||
VideoContent(subFolderItem: subFolderItem, fuc: fuc)
|
||||
],
|
||||
),
|
||||
);
|
||||
@ -64,7 +65,9 @@ class SubItem extends StatelessWidget {
|
||||
|
||||
class VideoContent extends StatelessWidget {
|
||||
final SubFolderItemData subFolderItem;
|
||||
const VideoContent({super.key, required this.subFolderItem});
|
||||
final Function fuc;
|
||||
const VideoContent(
|
||||
{super.key, required this.subFolderItem, required this.fuc});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@ -100,6 +103,20 @@ class VideoContent extends StatelessWidget {
|
||||
color: Theme.of(context).colorScheme.outline,
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
SizedBox(
|
||||
height: 34,
|
||||
child: TextButton(
|
||||
onPressed: () => fuc(),
|
||||
style: TextButton.styleFrom(
|
||||
padding: const EdgeInsets.fromLTRB(15, 0, 15, 0),
|
||||
foregroundColor: Theme.of(context).colorScheme.outline,
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.onInverseSurface, // 设置按钮背景色
|
||||
),
|
||||
child: const Text('取消订阅'),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
# In Windows, build-name is used as the major, minor, and patch parts
|
||||
# of the product and file versions while build-number is used as the build suffix.
|
||||
version: 1.0.19+1019
|
||||
version: 1.0.20+1020
|
||||
|
||||
environment:
|
||||
sdk: ">=2.19.6 <3.0.0"
|
||||
|
Reference in New Issue
Block a user