opt ugc intro

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-07-22 18:19:20 +08:00
parent a875ff3988
commit 55bed2e830
4 changed files with 98 additions and 98 deletions

View File

@@ -43,8 +43,8 @@ class VideoCardV extends StatelessWidget {
PageUtils.toVideoPage( PageUtils.toVideoPage(
'bvid=$bvid&cid=$cid', 'bvid=$bvid&cid=$cid',
arguments: { arguments: {
'pic': videoItem.cover,
'heroTag': heroTag, 'heroTag': heroTag,
'videoItem': videoItem,
}, },
); );
} }

View File

@@ -54,10 +54,11 @@ abstract class CommonIntroController extends GetxController {
} }
Future<void> queryVideoTags() async { Future<void> queryVideoTags() async {
videoTags.value = null;
var result = await UserHttp.videoTags(bvid: bvid); var result = await UserHttp.videoTags(bvid: bvid);
if (result['status']) { if (result['status']) {
videoTags.value = result['data']; videoTags.value = result['data'];
} else {
videoTags.value = null;
} }
} }
} }

View File

@@ -164,6 +164,9 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
), ),
), ),
const SizedBox(height: 8), const SizedBox(height: 8),
if (isLoading)
_buildVideoTitle(theme, videoDetail)
else
ExpandablePanel( ExpandablePanel(
controller: introController.expandableCtr, controller: introController.expandableCtr,
collapsed: GestureDetector( collapsed: GestureDetector(
@@ -508,8 +511,9 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
handleState(videoIntroController.actionOneThree), handleState(videoIntroController.actionOneThree),
selectStatus: videoIntroController.hasLike.value, selectStatus: videoIntroController.hasLike.value,
semanticsLabel: '点赞', semanticsLabel: '点赞',
text: text: !isLoading
!isLoading ? NumUtil.numFormat(videoDetail.stat!.like!) : '-', ? NumUtil.numFormat(videoDetail.stat!.like!)
: null,
needAnim: true, needAnim: true,
hasTriple: videoIntroController.hasLike.value && hasTriple: videoIntroController.hasLike.value &&
videoIntroController.hasCoin && videoIntroController.hasCoin &&
@@ -544,8 +548,9 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
onTap: () => handleState(videoIntroController.actionCoinVideo), onTap: () => handleState(videoIntroController.actionCoinVideo),
selectStatus: videoIntroController.hasCoin, selectStatus: videoIntroController.hasCoin,
semanticsLabel: '投币', semanticsLabel: '投币',
text: text: !isLoading
!isLoading ? NumUtil.numFormat(videoDetail.stat!.coin!) : '-', ? NumUtil.numFormat(videoDetail.stat!.coin!)
: null,
needAnim: true, needAnim: true,
), ),
), ),
@@ -561,7 +566,7 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
semanticsLabel: '收藏', semanticsLabel: '收藏',
text: !isLoading text: !isLoading
? NumUtil.numFormat(videoDetail.stat!.favorite!) ? NumUtil.numFormat(videoDetail.stat!.favorite!)
: '-', : null,
needAnim: true, needAnim: true,
), ),
), ),
@@ -581,7 +586,7 @@ class _VideoIntroPanelState extends State<VideoIntroPanel>
selectStatus: false, selectStatus: false,
semanticsLabel: '分享', semanticsLabel: '分享',
text: text:
!isLoading ? NumUtil.numFormat(videoDetail.stat!.share!) : '分享', !isLoading ? NumUtil.numFormat(videoDetail.stat!.share!) : null,
), ),
], ],
), ),

View File

@@ -121,16 +121,18 @@ class ActionItemState extends State<ActionItem>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final theme = Theme.of(context); final theme = Theme.of(context);
return widget.expand == false final hasText = widget.text != null;
? _buildItem(theme) final text = Text(
: Expanded(child: _buildItem(theme)); hasText ? widget.text! : '-',
} key: hasText ? ValueKey(widget.text!) : null,
style: TextStyle(
Widget _buildItem(ThemeData theme) => Semantics( color: widget.selectStatus
label: (widget.text ?? "") + ? theme.colorScheme.primary
(widget.selectStatus ? "" : "") + : theme.colorScheme.outline,
widget.semanticsLabel, fontSize: theme.textTheme.labelSmall!.fontSize,
child: Material( ),
);
final child = Material(
type: MaterialType.transparency, type: MaterialType.transparency,
child: InkWell( child: InkWell(
borderRadius: const BorderRadius.all(Radius.circular(6)), borderRadius: const BorderRadius.all(Radius.circular(6)),
@@ -178,27 +180,19 @@ class ActionItemState extends State<ActionItem>
if (widget.text != null) if (widget.text != null)
AnimatedSwitcher( AnimatedSwitcher(
duration: const Duration(milliseconds: 300), duration: const Duration(milliseconds: 300),
transitionBuilder: transitionBuilder: (Widget child, Animation<double> animation) {
(Widget child, Animation<double> animation) {
return ScaleTransition(scale: animation, child: child); return ScaleTransition(scale: animation, child: child);
}, },
child: Text( child: text,
widget.text!, )
key: ValueKey(widget.text!), else
style: TextStyle( text
color: widget.selectStatus
? theme.colorScheme.primary
: theme.colorScheme.outline,
fontSize: theme.textTheme.labelSmall!.fontSize,
),
semanticsLabel: "",
),
),
], ],
), ),
), ),
),
); );
return widget.expand == false ? child : Expanded(child: child);
}
} }
class _ArcPainter extends CustomPainter { class _ArcPainter extends CustomPainter {