feat: pm: share video

Closes #693

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-04-25 11:52:12 +08:00
parent 738cd61825
commit afe812e2be
33 changed files with 7972 additions and 111 deletions

View File

@@ -4,28 +4,17 @@ import 'package:PiliPlus/http/video.dart';
import 'package:PiliPlus/models/fans/result.dart';
import 'package:PiliPlus/pages/common/common_list_controller.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:get/get.dart';
import 'package:PiliPlus/utils/storage.dart';
class FansController
extends CommonListController<FansDataModel, FansItemModel> {
FansController(this.mid);
int ps = 20;
int total = 0;
late int? mid;
late String? name;
dynamic userInfo;
late bool isOwner = false;
int mid;
@override
void onInit() {
super.onInit();
userInfo = GStorage.userInfo.get('userInfoCache');
mid = Get.parameters['mid'] != null
? int.parse(Get.parameters['mid']!)
: userInfo?.mid;
isOwner = mid == userInfo?.mid;
name = Get.parameters['name'] ?? userInfo?.uname;
queryData();
}

View File

@@ -4,6 +4,8 @@ import 'package:PiliPlus/common/widgets/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/fans/result.dart';
import 'package:PiliPlus/pages/video/detail/share/view.dart' show UserModel;
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -13,31 +15,44 @@ import '../../utils/grid.dart';
import 'controller.dart';
class FansPage extends StatefulWidget {
const FansPage({super.key});
const FansPage({
super.key,
this.mid,
this.onSelect,
});
final int? mid;
final ValueChanged<UserModel>? onSelect;
@override
State<FansPage> createState() => _FansPageState();
}
class _FansPageState extends State<FansPage> {
late String mid;
late int mid;
String? name;
late bool isOwner;
late FansController _fansController;
@override
void initState() {
super.initState();
mid = Get.parameters['mid']!;
_fansController = Get.put(FansController(), tag: Utils.makeHeroTag(mid));
final userInfo = GStorage.userInfo.get('userInfoCache');
mid = widget.mid ??
(Get.parameters['mid'] != null
? int.parse(Get.parameters['mid']!)
: userInfo?.mid);
isOwner = mid == userInfo?.mid;
name = Get.parameters['name'] ?? userInfo?.uname;
_fansController = Get.put(FansController(mid), tag: Utils.makeHeroTag(mid));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
_fansController.isOwner ? '我的粉丝' : '${_fansController.name}的粉丝',
),
),
appBar: widget.onSelect != null
? null
: AppBar(title: Text(isOwner ? '我的粉丝' : '$name的粉丝')),
body: SafeArea(
bottom: false,
child: refreshIndicator(
@@ -86,22 +101,33 @@ class _FansPageState extends State<FansPage> {
String heroTag = Utils.makeHeroTag(item.mid);
return ListTile(
onTap: () {
if (widget.onSelect != null) {
widget.onSelect!(UserModel(
mid: item.mid!,
name: item.uname!,
avatar: item.face!,
));
return;
}
Get.toNamed(
'/member?mid=${item.mid}',
arguments: {'face': item.face, 'heroTag': heroTag},
);
},
onLongPress: _fansController.isOwner
? () {
showConfirmDialog(
context: context,
title: '确定移除 ${item.uname} ',
onConfirm: () {
_fansController.onRemoveFan(index, item.mid!);
},
);
}
: null,
onLongPress: widget.onSelect != null
? null
: isOwner
? () {
showConfirmDialog(
context: context,
title: '确定移除 ${item.uname} ',
onConfirm: () {
_fansController.onRemoveFan(
index, item.mid!);
},
);
}
: null,
leading: Hero(
tag: heroTag,
child: NetworkImgLayer(