From 49b3971a95748c5d6f6593ec9ddae826e6d9f710 Mon Sep 17 00:00:00 2001 From: normalllll <147307373+normalllll@users.noreply.github.com> Date: Mon, 26 Aug 2024 13:00:13 +0000 Subject: [PATCH] Add preview and viewing to Downloader page --- lib/pages/downloader/download_task.dart | 89 +++++++++++++++++-------- lib/pages/downloader/logic.dart | 4 ++ 2 files changed, 65 insertions(+), 28 deletions(-) diff --git a/lib/pages/downloader/download_task.dart b/lib/pages/downloader/download_task.dart index ffa679e..1ab6dc7 100644 --- a/lib/pages/downloader/download_task.dart +++ b/lib/pages/downloader/download_task.dart @@ -1,7 +1,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:yande_gui/components/yande_image/yande_image.dart'; import 'package:yande_gui/pages/downloader/logic.dart'; +import 'package:yande_gui/pages/post_detail/post_detail_page.dart'; class DownloadTaskWidget extends ConsumerWidget { final DownloadTaskProvider provider; @@ -11,34 +13,65 @@ class DownloadTaskWidget extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final state = ref.watch(provider); - return Card( - child: ListTile( - title: Text(state.post.id.toString()), - subtitle: LinearProgressIndicator(value: state.progress), - trailing: switch (state.type) { - DownloadTaskStateType.idle => GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - ref.read(provider.notifier).doDownload(); - }, - child: const Icon(Icons.download_outlined), - ), - DownloadTaskStateType.busy => const CupertinoActivityIndicator(), - DownloadTaskStateType.completed => GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - ref.read(provider.notifier).doDownload(retry: true); - }, - child: const Icon(Icons.check_outlined), - ), - DownloadTaskStateType.failed => GestureDetector( - behavior: HitTestBehavior.opaque, - onTap: () { - ref.read(provider.notifier).doDownload(retry: true); - }, - child: const Icon(Icons.error_outline), - ), - }, + return InkWell( + borderRadius: BorderRadius.circular(12), + onTap: () { + Navigator.of(context).push(MaterialPageRoute(builder: (context) => PostDetailPage(post: provider.post))); + }, + child: Card( + child: Padding( + padding: const EdgeInsets.all(8), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + YandeImage(provider.post.previewUrl, width: 150, height: 150), + const SizedBox(width: 20), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + 'ID:${provider.post.id}', + style: const TextStyle(fontSize: 20), + ), + const SizedBox(width: 20), + switch (state.type) { + DownloadTaskStateType.idle => GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + ref.read(provider.notifier).doDownload(); + }, + child: const Icon(Icons.download_outlined), + ), + DownloadTaskStateType.busy => const CupertinoActivityIndicator(), + DownloadTaskStateType.completed => GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + ref.read(provider.notifier).doDownload(retry: true); + }, + child: const Icon(Icons.check_outlined), + ), + DownloadTaskStateType.failed => GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () { + ref.read(provider.notifier).doDownload(retry: true); + }, + child: const Icon(Icons.error_outline), + ), + } + ], + ), + const SizedBox(height: 10), + LinearProgressIndicator(value: state.progress), + ], + ), + ), + ], + ), + ), ), ); } diff --git a/lib/pages/downloader/logic.dart b/lib/pages/downloader/logic.dart index 620f69f..c6ebb44 100644 --- a/lib/pages/downloader/logic.dart +++ b/lib/pages/downloader/logic.dart @@ -1,6 +1,7 @@ import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -154,6 +155,9 @@ class DownloadTask extends _$DownloadTask { state = state.copyWith(type: DownloadTaskStateType.completed); } catch (e) { EasyLoading.showError(i18n.downloader.messages.saveFailedWith(state.post.id)); + if(kDebugMode){ + print(e); + } state = state.copyWith(type: DownloadTaskStateType.failed); } }).catchError((e) {