From 8f6f26f00e6f1bcb3fcf76aa5c295d327bb4ed79 Mon Sep 17 00:00:00 2001 From: Simon Ding Date: Thu, 8 Aug 2024 19:23:23 +0800 Subject: [PATCH] refactor: activity list --- ui/lib/activity.dart | 73 +++++++++++++++++++++++++++++++++++--------- ui/pubspec.lock | 8 +++++ ui/pubspec.yaml | 1 + 3 files changed, 67 insertions(+), 15 deletions(-) diff --git a/ui/lib/activity.dart b/ui/lib/activity.dart index b542ddb..2c727bf 100644 --- a/ui/lib/activity.dart +++ b/ui/lib/activity.dart @@ -4,6 +4,7 @@ import 'package:percent_indicator/circular_percent_indicator.dart'; import 'package:ui/providers/activity.dart'; import 'package:ui/widgets/progress_indicator.dart'; import 'package:ui/widgets/widgets.dart'; +import 'package:timeago/timeago.dart' as timeago; class ActivityPage extends ConsumerStatefulWidget { const ActivityPage({super.key}); @@ -60,21 +61,63 @@ class _ActivityPageState extends ConsumerState return activitiesWatcher.when( data: (activities) { - return SingleChildScrollView( - child: PaginatedDataTable( - rowsPerPage: 10, - columns: const [ - DataColumn(label: Text("#"), numeric: true), - DataColumn(label: Text("名称")), - DataColumn(label: Text("开始时间")), - DataColumn(label: Text("状态")), - DataColumn(label: Text("操作")) - ], - source: ActivityDataSource( - activities: activities, - onDelete: selectedTab == 0 ? onDelete() : null), - ), - ); + return Flexible( + child: ListView.builder( + itemCount: activities.length, + itemBuilder: (context, index) { + final ac = activities[index]; + return Column( + children: [ + ListTile( + dense: true, + leading: () { + if (ac.status == "uploading") { + return const SizedBox( + width: 20, + height: 20, + child: Tooltip( + message: "正在上传到指定存储", + child: CircularProgressIndicator(), + )); + } else if (ac.status == "fail") { + return const Tooltip( + message: "下载失败", + child: Icon( + Icons.close, + color: Colors.red, + )); + } else if (ac.status == "success") { + return const Tooltip( + message: "下载成功", + child: Icon( + Icons.check, + color: Colors.green, + ), + ); + } + + double p = ac.progress == null + ? 0 + : ac.progress!.toDouble() / 100; + return Tooltip(message: "${ac.progress}%",child: CircularProgressIndicator( + backgroundColor: Colors.black26, + value: p, + ),); + }(), + title: Text("$index " + (ac.sourceTitle ?? "")), + subtitle: Text("开始时间:${timeago.format(ac.date!)}"), + trailing: selectedTab == 0 + ? IconButton( + tooltip: "删除任务", + onPressed: () => onDelete()(ac.id!), + icon: const Icon(Icons.delete)) + : const Text("-"), + ), + Divider(), + ], + ); + }, + )); }, error: (err, trace) => Text("$err"), loading: () => const MyProgressIndicator()); diff --git a/ui/pubspec.lock b/ui/pubspec.lock index 44de00d..c7e2eda 100644 --- a/ui/pubspec.lock +++ b/ui/pubspec.lock @@ -434,6 +434,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.7.2" + timeago: + dependency: "direct main" + description: + name: timeago + sha256: "054cedf68706bb142839ba0ae6b135f6b68039f0b8301cbe8784ae653d5ff8de" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.7.0" typed_data: dependency: transitive description: diff --git a/ui/pubspec.yaml b/ui/pubspec.yaml index 42edd15..a45f0a6 100644 --- a/ui/pubspec.yaml +++ b/ui/pubspec.yaml @@ -46,6 +46,7 @@ dependencies: flutter_form_builder: ^9.3.0 form_builder_validators: ^11.0.0 url_launcher: ^6.3.0 + timeago: ^3.7.0 dev_dependencies: flutter_test: