Merge branch 'fix' into alpha

This commit is contained in:
guozhigq
2023-09-17 13:01:12 +08:00
9 changed files with 81 additions and 54 deletions

View File

@ -16,13 +16,16 @@ class FansPage extends StatefulWidget {
} }
class _FansPageState extends State<FansPage> { class _FansPageState extends State<FansPage> {
final FansController _fansController = Get.put(FansController()); late String mid;
late FansController _fansController;
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
Future? _futureBuilderFuture; Future? _futureBuilderFuture;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
mid = Get.parameters['mid']!;
_fansController = Get.put(FansController(), tag: mid);
_futureBuilderFuture = _fansController.queryFans('init'); _futureBuilderFuture = _fansController.queryFans('init');
scrollController.addListener( scrollController.addListener(
() async { () async {

View File

@ -16,13 +16,16 @@ class FollowPage extends StatefulWidget {
} }
class _FollowPageState extends State<FollowPage> { class _FollowPageState extends State<FollowPage> {
final FollowController _followController = Get.put(FollowController()); late String mid;
late FollowController _followController;
final ScrollController scrollController = ScrollController(); final ScrollController scrollController = ScrollController();
Future? _futureBuilderFuture; Future? _futureBuilderFuture;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
mid = Get.parameters['mid']!;
_followController = Get.put(FollowController(), tag: mid);
_futureBuilderFuture = _followController.queryFollowings('init'); _futureBuilderFuture = _followController.queryFollowings('init');
scrollController.addListener( scrollController.addListener(
() async { () async {

View File

@ -110,6 +110,7 @@ class MemberController extends GetxController {
// 关系查询 // 关系查询
Future relationSearch() async { Future relationSearch() async {
if (userInfo == null) return; if (userInfo == null) return;
if (mid == ownerMid) return;
var res = await UserHttp.relationSearch(mid); var res = await UserHttp.relationSearch(mid);
if (res['status']) { if (res['status']) {
attribute.value = res['data']['relation']['attribute']; attribute.value = res['data']['relation']['attribute'];

View File

@ -20,7 +20,8 @@ class MemberPage extends StatefulWidget {
class _MemberPageState extends State<MemberPage> class _MemberPageState extends State<MemberPage>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
final MemberController _memberController = Get.put(MemberController()); late String heroTag;
late MemberController _memberController;
Future? _futureBuilderFuture; Future? _futureBuilderFuture;
final ScrollController _extendNestCtr = ScrollController(); final ScrollController _extendNestCtr = ScrollController();
late TabController _tabController; late TabController _tabController;
@ -29,6 +30,8 @@ class _MemberPageState extends State<MemberPage>
@override @override
void initState() { void initState() {
super.initState(); super.initState();
heroTag = Get.arguments['heroTag'];
_memberController = Get.put(MemberController(), tag: heroTag);
_tabController = TabController(length: 3, vsync: this, initialIndex: 2); _tabController = TabController(length: 3, vsync: this, initialIndex: 2);
_futureBuilderFuture = _memberController.getInfo(); _futureBuilderFuture = _memberController.getInfo();
_extendNestCtr.addListener( _extendNestCtr.addListener(
@ -105,27 +108,33 @@ class _MemberPageState extends State<MemberPage>
PopupMenuButton( PopupMenuButton(
icon: const Icon(Icons.more_vert), icon: const Icon(Icons.more_vert),
itemBuilder: (BuildContext context) => <PopupMenuEntry>[ itemBuilder: (BuildContext context) => <PopupMenuEntry>[
if (_memberController.ownerMid !=
_memberController.mid) ...[
PopupMenuItem(
onTap: () => _memberController.blockUser(),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(Icons.block, size: 19),
const SizedBox(width: 10),
Text(_memberController.attribute.value != 128
? '加入黑名单'
: '移除黑名单'),
],
),
)
],
PopupMenuItem( PopupMenuItem(
onTap: () => _memberController.blockUser(), onTap: () => _memberController.shareUser(),
child: Row( child: Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
const Icon(Icons.block, size: 19), const Icon(Icons.share_outlined, size: 19),
const SizedBox(width: 10), const SizedBox(width: 10),
Text(_memberController.attribute.value != 128 Text(_memberController.ownerMid !=
? '加入黑名单' _memberController.mid
: '移除黑名单'), ? '分享UP主'
], : '分享我的主页'),
),
),
PopupMenuItem(
onTap: () => _memberController.shareUser(),
child: const Row(
mainAxisSize: MainAxisSize.min,
children: [
Icon(Icons.share_outlined, size: 19),
SizedBox(width: 10),
Text('分享UP主'),
], ],
), ),
), ),

View File

@ -123,12 +123,14 @@ Widget profile(ctr, {loadingStatus = false}) {
: '-', : '-',
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold)), fontWeight: FontWeight.bold)),
Text('粉丝', Text(
style: TextStyle( '粉丝',
fontSize: Theme.of(context) style: TextStyle(
.textTheme fontSize: Theme.of(context)
.labelMedium! .textTheme
.fontSize)) .labelMedium!
.fontSize),
)
], ],
), ),
), ),

View File

@ -199,6 +199,9 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
// 视频介绍 // 视频介绍
showIntroDetail() { showIntroDetail() {
if (loadingStatus) {
return;
}
feedBack(); feedBack();
showBottomSheet( showBottomSheet(
context: context, context: context,
@ -254,22 +257,25 @@ class _VideoInfoState extends State<VideoInfo> with TickerProviderStateMixin {
), ),
), ),
const SizedBox(width: 20), const SizedBox(width: 20),
SizedBox( Opacity(
width: 34, opacity: loadingStatus ? 0 : 1,
height: 34, child: SizedBox(
child: IconButton( width: 34,
style: ButtonStyle( height: 34,
padding: child: IconButton(
MaterialStateProperty.all(EdgeInsets.zero), style: ButtonStyle(
backgroundColor: padding:
MaterialStateProperty.resolveWith((states) { MaterialStateProperty.all(EdgeInsets.zero),
return t.highlightColor.withOpacity(0.2); backgroundColor:
}), MaterialStateProperty.resolveWith((states) {
), return t.highlightColor.withOpacity(0.2);
onPressed: showIntroDetail, }),
icon: Icon( ),
Icons.more_horiz, onPressed: showIntroDetail,
color: Theme.of(context).colorScheme.primary, icon: Icon(
Icons.more_horiz,
color: Theme.of(context).colorScheme.primary,
),
), ),
), ),
), ),

View File

@ -26,11 +26,6 @@ class VideoReplyReplyController extends GetxController {
currentPage = 0; currentPage = 0;
} }
// 上拉加载
Future onLoad() async {
queryReplyList(type: 'onLoad');
}
Future queryReplyList({type = 'init'}) async { Future queryReplyList({type = 'init'}) async {
if (type == 'init') { if (type == 'init') {
currentPage = 0; currentPage = 0;
@ -49,11 +44,11 @@ class VideoReplyReplyController extends GetxController {
if (replyList.length == res['data'].page.count) { if (replyList.length == res['data'].page.count) {
noMore.value = '没有更多了'; noMore.value = '没有更多了';
} }
currentPage++;
} else { } else {
// 未登录状态replies可能返回null // 未登录状态replies可能返回null
noMore.value = currentPage == 0 ? '还没有评论' : '没有更多了'; noMore.value = currentPage == 0 ? '还没有评论' : '没有更多了';
} }
currentPage++;
if (type == 'init') { if (type == 'init') {
// List<ReplyItemModel> replies = res['data'].replies; // List<ReplyItemModel> replies = res['data'].replies;
// 添加置顶回复 // 添加置顶回复
@ -72,6 +67,10 @@ class VideoReplyReplyController extends GetxController {
// res['data'].replies = replies; // res['data'].replies = replies;
replyList.value = replies; replyList.value = replies;
} else { } else {
// 每次回复之后,翻页请求有且只有相同的一条回复数据
if (replies.length == 1 && replies.last.rpid == replyList.last.rpid) {
return;
}
replyList.addAll(replies); replyList.addAll(replies);
// res['data'].replies.addAll(replyList); // res['data'].replies.addAll(replyList);
} }

View File

@ -1,3 +1,4 @@
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
@ -54,9 +55,9 @@ class _VideoReplyReplyPanelState extends State<VideoReplyReplyPanel> {
() { () {
if (scrollController.position.pixels >= if (scrollController.position.pixels >=
scrollController.position.maxScrollExtent - 300) { scrollController.position.maxScrollExtent - 300) {
if (!_videoReplyReplyController.isLoadingMore) { EasyThrottle.throttle('replylist', const Duration(seconds: 2), () {
_videoReplyReplyController.onLoad(); _videoReplyReplyController.queryReplyList(type: 'onLoad');
} });
} }
}, },
); );

View File

@ -99,10 +99,13 @@ class _VideoDetailPageState extends State<VideoDetailPage>
plPlayerController!.triggerFullScreen(status: false); plPlayerController!.triggerFullScreen(status: false);
} }
// 播放完展示控制栏 // 播放完展示控制栏
PiPStatus currentStatus = await videoDetailController.floating!.pipStatus; try {
if (currentStatus == PiPStatus.disabled) { PiPStatus currentStatus =
plPlayerController!.onLockControl(false); await videoDetailController.floating!.pipStatus;
} if (currentStatus == PiPStatus.disabled) {
plPlayerController!.onLockControl(false);
}
} catch (_) {}
} }
} }