mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Update task detail page
This commit is contained in:
@@ -6,10 +6,16 @@ class FitText extends StatelessWidget {
|
|||||||
required this.texts,
|
required this.texts,
|
||||||
this.style,
|
this.style,
|
||||||
this.separator = " ",
|
this.separator = " ",
|
||||||
|
this.selectable = false,
|
||||||
|
this.overflow,
|
||||||
|
this.maxLines,
|
||||||
});
|
});
|
||||||
final List<(String, int)> texts;
|
final List<(String, int)> texts;
|
||||||
final TextStyle? style;
|
final TextStyle? style;
|
||||||
final String separator;
|
final String separator;
|
||||||
|
final bool selectable;
|
||||||
|
final TextOverflow? overflow;
|
||||||
|
final int? maxLines;
|
||||||
|
|
||||||
Size _textSize(String text, TextStyle? style) {
|
Size _textSize(String text, TextStyle? style) {
|
||||||
final TextPainter textPainter = TextPainter(
|
final TextPainter textPainter = TextPainter(
|
||||||
@@ -37,10 +43,13 @@ class FitText extends StatelessWidget {
|
|||||||
final double maxWidth = constraints.maxWidth;
|
final double maxWidth = constraints.maxWidth;
|
||||||
for (int i = sizes.length - 1; i >= 0; i--) {
|
for (int i = sizes.length - 1; i >= 0; i--) {
|
||||||
if (sizes[i] <= maxWidth) {
|
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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:percent_indicator/linear_percent_indicator.dart';
|
import 'package:percent_indicator/linear_percent_indicator.dart';
|
||||||
import '../api/task.dart';
|
import '../api/task.dart';
|
||||||
|
import '../components/fit_text.dart';
|
||||||
import '../components/rate.dart';
|
import '../components/rate.dart';
|
||||||
import '../globals.dart';
|
import '../globals.dart';
|
||||||
import '../main.dart';
|
import '../main.dart';
|
||||||
@@ -168,8 +169,10 @@ class _TaskPage extends State<TaskPage> {
|
|||||||
),
|
),
|
||||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(i18n.downloadedSize(
|
child: FitText(texts: [
|
||||||
"${getFileSize(p.downloadedBytes)}${i18n.comma}${p.downloadedPage}/${p.totalPage}"))),
|
(i18n.downloadedSize(getFileSize(p.downloadedBytes)), 0),
|
||||||
|
("${p.downloadedPage}/${p.totalPage}", 1)
|
||||||
|
], overflow: TextOverflow.ellipsis, maxLines: 1)),
|
||||||
Text("${getFileSize((speed * 1000).toInt())}/s"),
|
Text("${getFileSize((speed * 1000).toInt())}/s"),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
@@ -252,7 +255,17 @@ class _TaskPage extends State<TaskPage> {
|
|||||||
: avgSpeed
|
: avgSpeed
|
||||||
: d.speed;
|
: d.speed;
|
||||||
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
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(
|
LinearPercentIndicator(
|
||||||
animation: true,
|
animation: true,
|
||||||
animateFromLastPercent: true,
|
animateFromLastPercent: true,
|
||||||
@@ -268,7 +281,9 @@ class _TaskPage extends State<TaskPage> {
|
|||||||
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Text(
|
child: Text(
|
||||||
"${getFileSize(d.downloaded)}/${getFileSize(d.total)}")),
|
"${getFileSize(d.downloaded)}/${getFileSize(d.total)}",
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis)),
|
||||||
Text(
|
Text(
|
||||||
"${getFileSize((speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"),
|
"${getFileSize((speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -193,5 +193,6 @@
|
|||||||
"category": "Category",
|
"category": "Category",
|
||||||
"uploader": "Uploader",
|
"uploader": "Uploader",
|
||||||
"dlUseAvgSpeed": "Show average speed in task details.",
|
"dlUseAvgSpeed": "Show average speed in task details.",
|
||||||
"refresh": "Refresh"
|
"refresh": "Refresh",
|
||||||
|
"originalImg": "Original image"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -193,5 +193,6 @@
|
|||||||
"category": "分类",
|
"category": "分类",
|
||||||
"uploader": "上传者",
|
"uploader": "上传者",
|
||||||
"dlUseAvgSpeed": "在任务详情中显示平均速度。",
|
"dlUseAvgSpeed": "在任务详情中显示平均速度。",
|
||||||
"refresh": "刷新"
|
"refresh": "刷新",
|
||||||
|
"originalImg": "原图"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user