Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-02-27 16:52:53 +08:00
parent 889f6d01c2
commit 1d35abef63
5 changed files with 15 additions and 13 deletions

View File

@@ -359,6 +359,8 @@ class RenderSliverChatList extends RenderSliverMultiBoxAdaptor
} }
} }
const double kChatListPadding = 14.0;
/// from https://github.com/fluttercandies/extended_list /// from https://github.com/fluttercandies/extended_list
mixin ExtendedRenderObjectMixin on RenderSliverMultiBoxAdaptor { mixin ExtendedRenderObjectMixin on RenderSliverMultiBoxAdaptor {
void handleCloseToTrailingBegin() { void handleCloseToTrailingBegin() {
@@ -366,11 +368,10 @@ mixin ExtendedRenderObjectMixin on RenderSliverMultiBoxAdaptor {
} }
double handleCloseToTrailingEnd(double endScrollOffset) { double handleCloseToTrailingEnd(double endScrollOffset) {
if (endScrollOffset < constraints.remainingPaintExtent) { final extent = constraints.remainingPaintExtent - kChatListPadding;
final double distance = if (endScrollOffset < extent) {
constraints.remainingPaintExtent - endScrollOffset; _closeToTrailingDistance = extent - endScrollOffset;
_closeToTrailingDistance = distance; return extent;
return constraints.remainingPaintExtent;
} }
return endScrollOffset; return endScrollOffset;
} }

View File

@@ -311,15 +311,15 @@ class _VideoDetailPageVState extends State<VideoDetailPageV>
} }
plPlayerController = videoDetailController.plPlayerController; plPlayerController = videoDetailController.plPlayerController;
videoDetailController.autoPlay = true; videoDetailController.autoPlay = true;
plPlayerController!
..addStatusLister(playerListener)
..addPositionListener(positionListener);
if (videoDetailController.plPlayerController.preInitPlayer) { if (videoDetailController.plPlayerController.preInitPlayer) {
await plPlayerController!.play(); await plPlayerController!.play();
} else { } else {
await videoDetailController.playerInit(autoplay: true); await videoDetailController.playerInit(autoplay: true);
} }
if (!mounted || !isShowing) return; if (!mounted || !isShowing) return;
plPlayerController!
..addStatusLister(playerListener)
..addPositionListener(positionListener);
await plPlayerController!.autoEnterFullscreen(); await plPlayerController!.autoEnterFullscreen();
} }

View File

@@ -48,6 +48,7 @@ class WhisperDetailController extends CommonListController<RspSessionMsg, Msg> {
} else { } else {
ackSessionMsg(msgs.last.msgSeqno.toInt()); ackSessionMsg(msgs.last.msgSeqno.toInt());
} }
msgs.removeWhere((e) => e.msgType == MsgType.EN_MSG_TYPE_DRAW_BACK.value);
eInfos ??= <EmotionInfo>[]; eInfos ??= <EmotionInfo>[];
eInfos!.addAll(response.response.eInfos); eInfos!.addAll(response.response.eInfos);
} }

View File

@@ -156,7 +156,7 @@ class _WhisperDetailPageState
response != null && response.isNotEmpty response != null && response.isNotEmpty
? ChatListView.separated( ? ChatListView.separated(
itemCount: response.length, itemCount: response.length,
padding: const EdgeInsets.all(14), padding: const .all(kChatListPadding),
physics: const AlwaysScrollableScrollPhysics( physics: const AlwaysScrollableScrollPhysics(
parent: ClampingScrollPhysics(), parent: ClampingScrollPhysics(),
), ),

View File

@@ -55,10 +55,10 @@ class ChatItem extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final msgType = item.msgType; final msgType = item.msgType;
final isRevoke = msgType == MsgType.EN_MSG_TYPE_DRAW_BACK.value; // 撤回消息 // final isRevoke = msgType == MsgType.EN_MSG_TYPE_DRAW_BACK.value; // 撤回消息
if (isRevoke) { // if (isRevoke) {
return const SizedBox.shrink(); // return const SizedBox.shrink();
} // }
late final ThemeData theme = Theme.of(context); late final ThemeData theme = Theme.of(context);
late final Color textColor = isOwner late final Color textColor = isOwner