From 87a7b4e888d89c60f2bb52d42bf828b09a7e944e Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sun, 26 May 2024 12:15:28 +0800 Subject: [PATCH] Update task detail page --- lib/components/fit_text.dart | 13 +++++++++++-- lib/dialog/task_page.dart | 23 +++++++++++++++++++---- lib/l10n/app_en.arb | 3 ++- lib/l10n/app_zh.arb | 3 ++- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/lib/components/fit_text.dart b/lib/components/fit_text.dart index 55f2bec..e72a010 100644 --- a/lib/components/fit_text.dart +++ b/lib/components/fit_text.dart @@ -6,10 +6,16 @@ class FitText extends StatelessWidget { required this.texts, this.style, this.separator = " ", + this.selectable = false, + this.overflow, + this.maxLines, }); final List<(String, int)> texts; final TextStyle? style; final String separator; + final bool selectable; + final TextOverflow? overflow; + final int? maxLines; Size _textSize(String text, TextStyle? style) { final TextPainter textPainter = TextPainter( @@ -37,10 +43,13 @@ class FitText extends StatelessWidget { final double maxWidth = constraints.maxWidth; for (int i = sizes.length - 1; i >= 0; i--) { if (sizes[i] <= maxWidth) { - return Text(texts[i], style: style); + return selectable + ? SelectableText(texts[i], style: style) + : Text(texts[i], style: style, overflow: overflow); } } - return Text(texts[0], style: style); + return Text(texts[0], + style: style, overflow: overflow, maxLines: maxLines); }); } } diff --git a/lib/dialog/task_page.dart b/lib/dialog/task_page.dart index 09643fc..8a5a9a1 100644 --- a/lib/dialog/task_page.dart +++ b/lib/dialog/task_page.dart @@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart'; import 'package:intl/intl.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; import '../api/task.dart'; +import '../components/fit_text.dart'; import '../components/rate.dart'; import '../globals.dart'; import '../main.dart'; @@ -168,8 +169,10 @@ class _TaskPage extends State { ), Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( - child: Text(i18n.downloadedSize( - "${getFileSize(p.downloadedBytes)}${i18n.comma}${p.downloadedPage}/${p.totalPage}"))), + child: FitText(texts: [ + (i18n.downloadedSize(getFileSize(p.downloadedBytes)), 0), + ("${p.downloadedPage}/${p.totalPage}", 1) + ], overflow: TextOverflow.ellipsis, maxLines: 1)), Text("${getFileSize((speed * 1000).toInt())}/s"), ]), ]); @@ -252,7 +255,17 @@ class _TaskPage extends State { : avgSpeed : d.speed; return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - SelectableText("${d.name}(${d.width}x${d.height})"), + FitText( + texts: [ + ("${d.index}.", 2), + (d.name, 3), + ("(${d.width}x${d.height})", 0), + (d.isOriginal ? "(${i18n.originalImg})" : "", 1) + ], + selectable: true, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), LinearPercentIndicator( animation: true, animateFromLastPercent: true, @@ -268,7 +281,9 @@ class _TaskPage extends State { Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Text( - "${getFileSize(d.downloaded)}/${getFileSize(d.total)}")), + "${getFileSize(d.downloaded)}/${getFileSize(d.total)}", + maxLines: 1, + overflow: TextOverflow.ellipsis)), Text( "${getFileSize((speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"), ]), diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index b713c67..e87e93d 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -193,5 +193,6 @@ "category": "Category", "uploader": "Uploader", "dlUseAvgSpeed": "Show average speed in task details.", - "refresh": "Refresh" + "refresh": "Refresh", + "originalImg": "Original image" } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index a8b6273..bf51f96 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -193,5 +193,6 @@ "category": "分类", "uploader": "上传者", "dlUseAvgSpeed": "在任务详情中显示平均速度。", - "refresh": "刷新" + "refresh": "刷新", + "originalImg": "原图" }