Skip to content

Commit

Permalink
TF-2177 Add loading bar progress when download attachment
Browse files Browse the repository at this point in the history
Signed-off-by: dab246 <tdvu@linagora.com>
  • Loading branch information
dab246 committed Oct 24, 2023
1 parent b66c12f commit d5bf162
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 27 deletions.
23 changes: 1 addition & 22 deletions lib/features/base/mixin/app_loader_mixin.dart
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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(
Expand All @@ -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)));
}
}
6 changes: 5 additions & 1 deletion lib/features/email/data/network/email_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit d5bf162

Please sign in to comment.