refa: dir

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-05-03 13:57:47 +08:00
parent 57fa8b4f3e
commit 7f70ee5045
260 changed files with 748 additions and 967 deletions

View File

@@ -1,144 +0,0 @@
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/models/user/fav_detail.dart';
import 'package:PiliPlus/pages/fav_detail/controller.dart';
import 'package:PiliPlus/pages/fav_detail/widget/fav_video_card.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:flutter/material.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
class FavSortPage extends StatefulWidget {
const FavSortPage({super.key, required this.favDetailController});
final FavDetailController favDetailController;
@override
State<FavSortPage> createState() => _FavSortPageState();
}
class _FavSortPageState extends State<FavSortPage> {
FavDetailController get _favDetailController => widget.favDetailController;
final GlobalKey _key = GlobalKey();
late List<FavDetailItemData> sortList = List<FavDetailItemData>.from(
(_favDetailController.loadingState.value as Success).response);
List<String> sort = <String>[];
final ScrollController _scrollController = ScrollController();
void listener() {
if (_favDetailController.isEnd) {
return;
}
if (_scrollController.position.pixels >=
_scrollController.position.maxScrollExtent - 200) {
_favDetailController.onLoadMore().then((_) {
try {
if (_favDetailController.loadingState.value is Success) {
List<FavDetailItemData> list =
(_favDetailController.loadingState.value as Success).response;
sortList.addAll(list.sublist(sortList.length));
if (mounted) {
setState(() {});
}
}
} catch (_) {}
});
}
}
@override
void initState() {
super.initState();
if (_favDetailController.isEnd.not) {
_scrollController.addListener(listener);
}
}
@override
void dispose() {
_scrollController.removeListener(listener);
_scrollController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('排序: ${_favDetailController.item.value.title}'),
actions: [
TextButton(
onPressed: () async {
if (sort.isEmpty) {
Get.back();
return;
}
dynamic res = await UserHttp.sortFav(
mediaId: _favDetailController.mediaId,
sort: sort,
);
if (res['status']) {
SmartDialog.showToast('排序完成');
_favDetailController.loadingState.value =
LoadingState.success(sortList);
Get.back();
} else {
SmartDialog.showToast(res['msg']);
}
},
child: const Text('完成'),
),
const SizedBox(width: 16),
],
),
body: SafeArea(
top: false,
bottom: false,
child: _buildBody,
),
);
}
void onReorder(int oldIndex, int newIndex) {
if (newIndex > oldIndex) {
newIndex -= 1;
}
final oldItem = sortList[oldIndex];
final newItem =
sortList.getOrNull(oldIndex > newIndex ? newIndex - 1 : newIndex);
sort.add(
'${newItem == null ? '0:0' : '${newItem.id}:${newItem.type}'}:${oldItem.id}:${oldItem.type}');
final tabsItem = sortList.removeAt(oldIndex);
sortList.insert(newIndex, tabsItem);
setState(() {});
}
Widget get _buildBody {
return ReorderableListView.builder(
key: _key,
scrollController: _scrollController,
onReorder: onReorder,
physics: const AlwaysScrollableScrollPhysics(),
footer: SizedBox(
height: MediaQuery.of(context).padding.bottom + 80,
),
itemCount: sortList.length,
itemBuilder: (context, index) {
final item = sortList[index];
return SizedBox(
key: Key(item.id.toString()),
height: 98,
child: FavVideoCardH(
isSort: true,
videoItem: item,
),
);
},
);
}
}

View File

@@ -1,4 +0,0 @@
library favdetail;
export './controller.dart';
export './view.dart';

View File

@@ -1,11 +1,15 @@
import 'package:PiliPlus/common/constants.dart';
import 'package:PiliPlus/common/widgets/dialog.dart';
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/http/user.dart';
import 'package:PiliPlus/models/user/fav_detail.dart';
import 'package:PiliPlus/models/user/fav_folder.dart';
import 'package:PiliPlus/pages/fav_detail/fav_sort_page.dart';
import 'package:PiliPlus/pages/fav_detail/controller.dart';
import 'package:PiliPlus/pages/fav_sort/fav_sort_page.dart';
import 'package:PiliPlus/pages/fav_detail/widget/fav_video_card.dart';
import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/grid.dart';
import 'package:PiliPlus/utils/page_utils.dart';
import 'package:PiliPlus/utils/request_utils.dart';
import 'package:PiliPlus/utils/utils.dart';
@@ -15,11 +19,6 @@ import 'package:get/get.dart';
import 'package:PiliPlus/common/skeleton/video_card_h.dart';
import 'package:PiliPlus/common/widgets/http_error.dart';
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
import 'package:PiliPlus/pages/fav_detail/index.dart';
import '../../common/constants.dart';
import '../../utils/grid.dart';
import 'widget/fav_video_card.dart';
class FavDetailPage extends StatefulWidget {
const FavDetailPage({super.key});

View File

@@ -1,3 +1,4 @@
import 'package:PiliPlus/common/widgets/badge.dart';
import 'package:PiliPlus/common/widgets/icon_button.dart';
import 'package:PiliPlus/common/widgets/image_save.dart';
import 'package:PiliPlus/common/widgets/stat/stat.dart';
@@ -13,7 +14,6 @@ import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/utils/id_utils.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
import '../../../common/widgets/badge.dart';
// 收藏视频卡片 - 水平布局
class FavVideoCardH extends StatelessWidget {