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/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:percent_indicator/circular_percent_indicator.dart';
|
|
||||||
import 'package:percent_indicator/linear_percent_indicator.dart';
|
import 'package:percent_indicator/linear_percent_indicator.dart';
|
||||||
|
|
||||||
mixin AppLoaderMixin {
|
mixin AppLoaderMixin {
|
||||||
@@ -22,18 +21,6 @@ mixin AppLoaderMixin {
|
|||||||
backgroundColor: AppColor.colorBgMailboxSelected));
|
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) {
|
Widget horizontalPercentLoadingWidget(double percent) {
|
||||||
return Center(
|
return Center(
|
||||||
child: LinearPercentIndicator(
|
child: LinearPercentIndicator(
|
||||||
@@ -44,12 +31,4 @@ mixin AppLoaderMixin {
|
|||||||
progressColor: AppColor.primaryColor,
|
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,
|
headers: headerParam,
|
||||||
responseType: ResponseType.bytes),
|
responseType: ResponseType.bytes),
|
||||||
onReceiveProgress: (downloaded, total) {
|
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()}%');
|
log('DownloadClient::downloadFileForWeb(): progress = ${progress.round()}%');
|
||||||
onReceiveController.add(Right(DownloadingAttachmentForWeb(
|
onReceiveController.add(Right(DownloadingAttachmentForWeb(
|
||||||
taskId,
|
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
|
@override
|
||||||
List<Object?> get props => [taskId, attachment, progress, downloaded, total];
|
List<Object?> get props => [taskId, attachment, progress, downloaded, total];
|
||||||
|
|||||||
+14
-3
@@ -1,15 +1,16 @@
|
|||||||
|
|
||||||
import 'package:byte_converter/byte_converter.dart';
|
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/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/utils/style_utils.dart';
|
import 'package:core/presentation/utils/style_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.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/email/presentation/extensions/attachment_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.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;
|
final DownloadTaskState taskState;
|
||||||
|
|
||||||
@@ -40,7 +41,17 @@ class DownloadTaskItemWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
width: 16,
|
width: 16,
|
||||||
height: 16,
|
height: 16,
|
||||||
fit: BoxFit.fill),
|
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),
|
const SizedBox(width: 12),
|
||||||
|
|||||||
Reference in New Issue
Block a user