From 932be48125f6c2340a0c78eac6eccec2e8e3e122 Mon Sep 17 00:00:00 2001 From: orz12 Date: Sat, 20 Jan 2024 21:05:01 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E6=8E=A8=E8=8D=90=E3=80=81=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E9=A1=B5=E6=B7=BB=E5=8A=A0=E6=97=B6=E9=97=B4=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=86=E9=A2=91=E6=90=9C=E7=B4=A2=E9=A1=B5?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E7=AD=9B=E9=80=89=E5=92=8C=E5=9B=9E=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/widgets/video_card_v.dart | 39 ++++++++++++------- lib/pages/search_panel/view.dart | 2 +- .../search_panel/widgets/video_panel.dart | 6 +-- lib/utils/utils.dart | 28 ++++++++++++- 4 files changed, 56 insertions(+), 19 deletions(-) diff --git a/lib/common/widgets/video_card_v.dart b/lib/common/widgets/video_card_v.dart index 0bbd5377..c40d439c 100644 --- a/lib/common/widgets/video_card_v.dart +++ b/lib/common/widgets/video_card_v.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:get/get.dart'; +import 'stat/danmu.dart'; +import 'stat/view.dart'; import '../../http/dynamics.dart'; import '../../http/search.dart'; import '../../http/user.dart'; @@ -322,21 +324,30 @@ class VideoStat extends StatelessWidget { @override Widget build(BuildContext context) { - return RichText( - maxLines: 1, - text: TextSpan( - style: TextStyle( - fontSize: MediaQuery.textScalerOf(context) - .scale(Theme.of(context).textTheme.labelSmall!.fontSize!), - color: Theme.of(context).colorScheme.outline, + return Row( + children: [ + StatView( + theme: 'gray', + view: videoItem.stat.view as int, ), - children: [ - if (videoItem.stat.view != '-') - TextSpan(text: '${videoItem.stat.view}观看'), - if (videoItem.stat.danmu != '-') - TextSpan(text: ' • ${videoItem.stat.danmu}弹幕'), - ], - ), + const SizedBox(width: 8), + StatDanMu( + theme: 'gray', + danmu: videoItem.stat.danmu as int, + ), + const Spacer(), + RichText( + maxLines: 1, + text: TextSpan( + style: TextStyle( + fontSize: Theme.of(context).textTheme.labelSmall!.fontSize, + color: Theme.of(context).colorScheme.outline, + ), + text: Utils.formatTimestampToRelativeTime(videoItem.pubdate) + ), + ), + const SizedBox(width: 4), + ], ); } } diff --git a/lib/pages/search_panel/view.dart b/lib/pages/search_panel/view.dart index f7392c88..182fbea0 100644 --- a/lib/pages/search_panel/view.dart +++ b/lib/pages/search_panel/view.dart @@ -43,7 +43,7 @@ class _SearchPanelState extends State keyword: widget.keyword, searchType: widget.searchType, ), - tag: widget.searchType!.type + widget.keyword!, + tag: widget.searchType!.type, ); scrollController = _searchPanelController.scrollController; scrollController.addListener(() async { diff --git a/lib/pages/search_panel/widgets/video_panel.dart b/lib/pages/search_panel/widgets/video_panel.dart index 0b5d5eb8..3debcfb9 100644 --- a/lib/pages/search_panel/widgets/video_panel.dart +++ b/lib/pages/search_panel/widgets/video_panel.dart @@ -35,7 +35,7 @@ class SearchVideoPanel extends StatelessWidget { padding: index == 0 ? const EdgeInsets.only(top: 2) : EdgeInsets.zero, - child: VideoCardH(videoItem: i), + child: VideoCardH(videoItem: i, showPubdate: true), ); }, ), @@ -70,7 +70,7 @@ class SearchVideoPanel extends StatelessWidget { controller.selectedType.value = i['type']; ctr!.order.value = i['type'].toString().split('.').last; - SmartDialog.showLoading(msg: 'loooad'); + SmartDialog.showLoading(msg: 'loading'); await ctr!.onRefresh(); SmartDialog.dismiss(); }, @@ -201,7 +201,7 @@ class VideoPanelController extends GetxController { SearchPanelController ctr = Get.find(tag: 'video'); ctr.duration.value = i['value']; - SmartDialog.showLoading(msg: 'loooad'); + SmartDialog.showLoading(msg: 'loading'); await ctr.onRefresh(); SmartDialog.dismiss(); }, diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index 08693d24..7ef0e53f 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -28,7 +28,13 @@ class Utils { return tempPath; } - static String numFormat(int number) { + static String numFormat(dynamic number) { + if (number == null) { + return '0'; + } + if (number is String) { + return number; + } final String res = (number / 10000).toString(); if (int.parse(res.split('.')[0]) >= 1) { return '${(number / 10000).toPrecision(1)}万'; @@ -58,6 +64,26 @@ class Utils { } } + // 完全相对时间显示 + static String formatTimestampToRelativeTime(timeStamp) { + var difference = DateTime.now() + .difference(DateTime.fromMillisecondsSinceEpoch(timeStamp * 1000)); + + if (difference.inDays > 365) { + return '${difference.inDays ~/ 365}年前'; + } else if (difference.inDays > 30) { + return '${difference.inDays ~/ 30}个月前'; + } else if (difference.inDays > 0) { + return '${difference.inDays}天前'; + } else if (difference.inHours > 0) { + return '${difference.inHours}小时前'; + } else if (difference.inMinutes > 0) { + return '${difference.inMinutes}分钟前'; + } else { + return '刚刚'; + } + } + // 时间显示,刚刚,x分钟前 static String dateFormat(timeStamp, {formatType = 'list'}) { // 当前时间