From edc2cb066ba2f1dd5d8f09caff3676f6d8225acd Mon Sep 17 00:00:00 2001 From: nyne Date: Thu, 20 Feb 2025 13:16:09 +0800 Subject: [PATCH] Fixed download speed display. --- lib/foundation/local.dart | 2 +- lib/network/images.dart | 12 +++++------- lib/pages/downloading_page.dart | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/foundation/local.dart b/lib/foundation/local.dart index 4aa516c..2d19c34 100644 --- a/lib/foundation/local.dart +++ b/lib/foundation/local.dart @@ -509,7 +509,7 @@ class LocalManager with ChangeNotifier { var dir = Directory(FilePath.join(path, c.directory)); dir.deleteIgnoreError(recursive: true); } - // Deleting a local comic means that it's nolonger available, thus both favorite and history should be deleted. + // Deleting a local comic means that it's no longer available, thus both favorite and history should be deleted. if (c.comicType == ComicType.local) { if (HistoryManager().find(c.id, c.comicType) != null) { HistoryManager().remove(c.id, c.comicType); diff --git a/lib/network/images.dart b/lib/network/images.dart index 6a5c9a1..f16e0ea 100644 --- a/lib/network/images.dart +++ b/lib/network/images.dart @@ -139,12 +139,10 @@ class ImageDownloader { var buffer = []; await for (var data in stream) { buffer.addAll(data); - if (expectedBytes != null) { - yield ImageDownloadProgress( - currentBytes: buffer.length, - totalBytes: expectedBytes, - ); - } + yield ImageDownloadProgress( + currentBytes: buffer.length, + totalBytes: expectedBytes, + ); } if (configs['onResponse'] is JSInvokable) { @@ -194,7 +192,7 @@ class ImageDownloader { class ImageDownloadProgress { final int currentBytes; - final int totalBytes; + final int? totalBytes; final Uint8List? imageBytes; diff --git a/lib/pages/downloading_page.dart b/lib/pages/downloading_page.dart index 795d6e0..1ec15c6 100644 --- a/lib/pages/downloading_page.dart +++ b/lib/pages/downloading_page.dart @@ -15,6 +15,15 @@ class DownloadingPage extends StatefulWidget { } class _DownloadingPageState extends State { + DownloadTask? firstTask; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + firstTask = LocalManager().downloadingTasks.firstOrNull; + firstTask?.addListener(update); + } + @override void initState() { LocalManager().addListener(update); @@ -24,10 +33,17 @@ class _DownloadingPageState extends State { @override void dispose() { LocalManager().removeListener(update); + firstTask?.removeListener(update); super.dispose(); } void update() { + var currentFirstTask = LocalManager().downloadingTasks.firstOrNull; + if (currentFirstTask != firstTask) { + firstTask?.removeListener(update); + firstTask = currentFirstTask; + firstTask?.addListener(update); + } if(mounted) { setState(() {}); }