TF-2177 Add loading bar progress when download attachment
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit a02cb14233c4b23e26a0d2881604024893f6e1ce)
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:percent_indicator/circular_percent_indicator.dart';
|
||||
import 'package:percent_indicator/linear_percent_indicator.dart';
|
||||
|
||||
mixin AppLoaderMixin {
|
||||
@@ -22,18 +21,6 @@ mixin AppLoaderMixin {
|
||||
backgroundColor: AppColor.colorBgMailboxSelected));
|
||||
}
|
||||
|
||||
Widget circularPercentLoadingWidget(double percent) {
|
||||
return Center(
|
||||
child: CircularPercentIndicator(
|
||||
percent: percent > 1.0 ? 1.0 : percent,
|
||||
backgroundColor: AppColor.colorBgMailboxSelected,
|
||||
progressColor: AppColor.primaryColor,
|
||||
lineWidth: 3,
|
||||
radius: 14,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
Widget horizontalPercentLoadingWidget(double percent) {
|
||||
return Center(
|
||||
child: LinearPercentIndicator(
|
||||
@@ -44,12 +31,4 @@ mixin AppLoaderMixin {
|
||||
progressColor: AppColor.primaryColor,
|
||||
));
|
||||
}
|
||||
|
||||
Widget loadingWidgetWithSizeColor({double? size, Color? color}) {
|
||||
return Center(child: SizedBox(
|
||||
width: size ?? 24,
|
||||
height: size ?? 24,
|
||||
child: CircularProgressIndicator(
|
||||
color: color ?? AppColor.colorLoading)));
|
||||
}
|
||||
}
|
||||
@@ -366,7 +366,11 @@ class EmailAPI with HandleSetErrorMixin {
|
||||
headers: headerParam,
|
||||
responseType: ResponseType.bytes),
|
||||
onReceiveProgress: (downloaded, total) {
|
||||
final progress = (downloaded / total) * 100;
|
||||
log('DownloadClient::downloadFileForWeb(): downloaded = $downloaded | total: $total');
|
||||
double progress = 0;
|
||||
if (downloaded > 0 && total > downloaded) {
|
||||
progress = (downloaded / total) * 100;
|
||||
}
|
||||
log('DownloadClient::downloadFileForWeb(): progress = ${progress.round()}%');
|
||||
onReceiveController.add(Right(DownloadingAttachmentForWeb(
|
||||
taskId,
|
||||
|
||||
+10
-1
@@ -34,7 +34,16 @@ class DownloadTaskState with EquatableMixin {
|
||||
);
|
||||
}
|
||||
|
||||
double get percentDownloading => progress / 100;
|
||||
double get percentDownloading {
|
||||
final percent = progress / 100;
|
||||
if (percent < 0) {
|
||||
return 0;
|
||||
} else if (percent > 1) {
|
||||
return 1;
|
||||
} else {
|
||||
return percent;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [taskId, attachment, progress, downloaded, total];
|
||||
|
||||
+14
-3
@@ -1,15 +1,16 @@
|
||||
|
||||
import 'package:byte_converter/byte_converter.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/style_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:percent_indicator/circular_percent_indicator.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/attachment_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
||||
|
||||
class DownloadTaskItemWidget extends StatelessWidget with AppLoaderMixin {
|
||||
class DownloadTaskItemWidget extends StatelessWidget {
|
||||
|
||||
final DownloadTaskState taskState;
|
||||
|
||||
@@ -40,7 +41,17 @@ class DownloadTaskItemWidget extends StatelessWidget with AppLoaderMixin {
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
circularPercentLoadingWidget(taskState.percentDownloading)
|
||||
Center(
|
||||
child: taskState.percentDownloading == 0
|
||||
? const CircularProgressIndicator(color: AppColor.primaryColor, strokeWidth: 3)
|
||||
: CircularPercentIndicator(
|
||||
percent: taskState.percentDownloading,
|
||||
backgroundColor: AppColor.colorBgMailboxSelected,
|
||||
progressColor: AppColor.primaryColor,
|
||||
lineWidth: 3,
|
||||
radius: 14,
|
||||
)
|
||||
)
|
||||
]),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
|
||||
Reference in New Issue
Block a user