opt: pages

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-17 10:53:39 +08:00
parent 07c04a9e7e
commit 7b9e4b2f82
14 changed files with 90 additions and 205 deletions

View File

@@ -1,14 +0,0 @@
class StatDatas {
StatDatas();
factory StatDatas.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('StatDatas.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -1,14 +0,0 @@
class AvatarLayer {
AvatarLayer();
factory AvatarLayer.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('AvatarLayer.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -1,14 +0,0 @@
class FansEffect {
FansEffect();
factory FansEffect.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('FansEffect.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -1,14 +0,0 @@
class Profession {
Profession();
factory Profession.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('Profession.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -1,14 +0,0 @@
class School {
School();
factory School.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('School.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -1,17 +0,0 @@
import 'package:json_annotation/json_annotation.dart';
import 'avatar_layer.dart';
part 'tags.g.dart';
@JsonSerializable()
class Tags {
@JsonKey(name: 'AVATAR_LAYER')
AvatarLayer? avatarLayer;
Tags({this.avatarLayer});
factory Tags.fromJson(Map<String, dynamic> json) => _$TagsFromJson(json);
Map<String, dynamic> toJson() => _$TagsToJson(this);
}

View File

@@ -1,17 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'tags.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
Tags _$TagsFromJson(Map<String, dynamic> json) => Tags(
avatarLayer: json['AVATAR_LAYER'] == null
? null
: AvatarLayer.fromJson(json['AVATAR_LAYER'] as Map<String, dynamic>),
);
Map<String, dynamic> _$TagsToJson(Tags instance) => <String, dynamic>{
'AVATAR_LAYER': instance.avatarLayer,
};

View File

@@ -1,14 +0,0 @@
class ThreePoint {
ThreePoint();
factory ThreePoint.fromJson(Map<String, dynamic> json) {
// TODO: implement fromJson
throw UnimplementedError('ThreePoint.fromJson($json) is not implemented');
}
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
}

View File

@@ -0,0 +1,68 @@
import 'package:PiliPlus/http/danmaku_block.dart';
import 'package:PiliPlus/models/user/danmaku_block.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
class DanmakuBlockController extends GetxController
with GetTickerProviderStateMixin {
final ruleTypes = RxMap<int, Map<int, String>>({0: {}, 1: {}, 2: {}});
late TabController tabController;
@override
void onInit() {
super.onInit();
tabController = TabController(length: 3, vsync: this);
}
@override
void onClose() {
tabController.dispose();
super.onClose();
}
Future<void> queryDanmakuFilter() async {
SmartDialog.showLoading(msg: '正在同步弹幕屏蔽规则……');
var result = await DanmakuFilterHttp.danmakuFilter();
SmartDialog.dismiss();
if (result['status']) {
if (result['data']?.rule != null) {
final List<SimpleRule> filter = result['data']?.rule;
for (var rule in filter) {
ruleTypes[rule.type]![rule.id] = rule.filter;
}
ruleTypes.refresh();
}
SmartDialog.showToast(result['data'].toast);
} else {
SmartDialog.showToast(result['msg']);
}
}
Future<void> danmakuFilterDel(int type, int id) async {
SmartDialog.showLoading(msg: '正在删除弹幕屏蔽规则……');
var result = await DanmakuFilterHttp.danmakuFilterDel(ids: id);
SmartDialog.dismiss();
if (result['status']) {
ruleTypes[type]!.remove(id);
ruleTypes.refresh();
}
SmartDialog.showToast(result['msg']);
}
Future<void> danmakuFilterAdd(
{required String filter, required int type}) async {
SmartDialog.showLoading(msg: '正在添加弹幕屏蔽规则……');
var result =
await DanmakuFilterHttp.danmakuFilterAdd(filter: filter, type: type);
SmartDialog.dismiss();
if (result['status']) {
SimpleRule rule = result['data'];
ruleTypes[type]![rule.id] = rule.filter;
ruleTypes.refresh();
SmartDialog.showToast('添加成功');
} else {
SmartDialog.showToast(result['msg']);
}
}
}

View File

@@ -1,11 +1,10 @@
import 'package:PiliPlus/models/user/danmaku_rule.dart';
import 'package:PiliPlus/pages/danmaku_block/controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:PiliPlus/utils/storage.dart';
import '../../http/danmaku_block.dart';
import '../../models/user/danmaku_block.dart';
import '../../plugin/pl_player/controller.dart';
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
@@ -146,66 +145,3 @@ class _DanmakuBlockPageState extends State<DanmakuBlockPage> {
);
}
}
class DanmakuBlockController extends GetxController
with GetTickerProviderStateMixin {
final ruleTypes = RxMap<int, Map<int, String>>({0: {}, 1: {}, 2: {}});
late TabController tabController;
@override
void onInit() {
super.onInit();
tabController = TabController(length: 3, vsync: this);
}
@override
void onClose() {
tabController.dispose();
super.onClose();
}
Future<void> queryDanmakuFilter() async {
SmartDialog.showLoading(msg: '正在同步弹幕屏蔽规则……');
var result = await DanmakuFilterHttp.danmakuFilter();
SmartDialog.dismiss();
if (result['status']) {
if (result['data']?.rule != null) {
final List<SimpleRule> filter = result['data']?.rule;
for (var rule in filter) {
ruleTypes[rule.type]![rule.id] = rule.filter;
}
ruleTypes.refresh();
}
SmartDialog.showToast(result['data'].toast);
} else {
SmartDialog.showToast(result['msg']);
}
}
Future<void> danmakuFilterDel(int type, int id) async {
SmartDialog.showLoading(msg: '正在删除弹幕屏蔽规则……');
var result = await DanmakuFilterHttp.danmakuFilterDel(ids: id);
SmartDialog.dismiss();
if (result['status']) {
ruleTypes[type]!.remove(id);
ruleTypes.refresh();
}
SmartDialog.showToast(result['msg']);
}
Future<void> danmakuFilterAdd(
{required String filter, required int type}) async {
SmartDialog.showLoading(msg: '正在添加弹幕屏蔽规则……');
var result =
await DanmakuFilterHttp.danmakuFilterAdd(filter: filter, type: type);
SmartDialog.dismiss();
if (result['status']) {
SimpleRule rule = result['data'];
ruleTypes[type]![rule.id] = rule.filter;
ruleTypes.refresh();
SmartDialog.showToast('添加成功');
} else {
SmartDialog.showToast(result['msg']);
}
}
}

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/models/user/fav_folder.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:PiliPlus/common/constants.dart';
@@ -6,7 +7,7 @@ import 'package:PiliPlus/common/widgets/network_img_layer.dart';
class FavItem extends StatelessWidget {
final String heroTag;
final dynamic favFolderItem;
final FavFolderItemData favFolderItem;
final VoidCallback? onTap;
final VoidCallback? onLongPress;
@@ -40,14 +41,12 @@ class FavItem extends StatelessWidget {
aspectRatio: StyleString.aspectRatio,
child: LayoutBuilder(
builder: (context, boxConstraints) {
double maxWidth = boxConstraints.maxWidth;
double maxHeight = boxConstraints.maxHeight;
return Hero(
tag: heroTag,
child: NetworkImgLayer(
src: favFolderItem.cover,
width: maxWidth,
height: maxHeight,
width: boxConstraints.maxWidth,
height: boxConstraints.maxHeight,
),
);
},

View File

@@ -2,7 +2,6 @@ import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/common/widgets/video_progress_indicator.dart';
import 'package:PiliPlus/models/user/history.dart';
import 'package:PiliPlus/pages/common/multi_select_controller.dart';
import 'package:PiliPlus/pages/fav_search/controller.dart';
import 'package:PiliPlus/pages/history/base_controller.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/page_utils.dart';
@@ -41,11 +40,11 @@ class HistoryItem extends StatelessWidget {
String bvid = videoItem.history.bvid ?? IdUtils.av2bv(aid);
return InkWell(
onTap: () async {
if ((ctr is MultiSelectController || ctr is HistoryBaseController) &&
ctr!.enableMultiSelect.value) {
feedBack();
onChoose?.call();
return;
if (ctr is MultiSelectController || ctr is HistoryBaseController) {
if (ctr.enableMultiSelect.value) {
onChoose?.call();
return;
}
}
if (videoItem.history.business?.contains('article') == true) {
PageUtils.toDupNamed(
@@ -105,18 +104,18 @@ class HistoryItem extends StatelessWidget {
}
},
onLongPress: () {
if (ctr is FavSearchController) {
imageSaveDialog(
context: context,
title: videoItem.title,
cover: videoItem.cover,
);
if (ctr is MultiSelectController || ctr is HistoryBaseController) {
if (!ctr.enableMultiSelect.value) {
ctr.enableMultiSelect.value = true;
onChoose?.call();
}
return;
}
if (!ctr!.enableMultiSelect.value) {
ctr!.enableMultiSelect.value = true;
onChoose?.call();
}
imageSaveDialog(
context: context,
title: videoItem.title,
cover: videoItem.cover,
);
},
child: Stack(
children: [

View File

@@ -37,6 +37,7 @@ class _HotPageState extends CommonPageState<HotPage, HotController>
}) {
return GestureDetector(
onTap: onTap,
behavior: HitTestBehavior.opaque,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [

View File

@@ -24,7 +24,7 @@ import 'package:PiliPlus/pages/setting/pages/logs.dart';
import '../pages/about/index.dart';
import '../pages/blacklist/view.dart';
import '../pages/danmaku_block/index.dart';
import '../pages/danmaku_block/view.dart';
import '../pages/dynamics/detail/index.dart';
import '../pages/dynamics/index.dart';
import '../pages/fan/index.dart';