TF-654 Show the progress of download attachment on web
This commit is contained in:
+21
@@ -38,8 +38,10 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_ema
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.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/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
||||
@@ -63,6 +65,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
final EmailReceiveManager _emailReceiveManager = Get.find<EmailReceiveManager>();
|
||||
final SearchController searchController = Get.find<SearchController>();
|
||||
final Executor _isolateExecutor = Get.find<Executor>();
|
||||
final DownloadController downloadController = Get.find<DownloadController>();
|
||||
|
||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||
final DeleteEmailPermanentlyInteractor _deleteEmailPermanentlyInteractor;
|
||||
@@ -570,6 +573,23 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
|
||||
Future<List<PresentationEmail>> quickSearchEmails() => searchController.quickSearchEmails(accountId: accountId.value!);
|
||||
|
||||
void addDownloadTask(DownloadTaskState task) {
|
||||
downloadController.addDownloadTask(task);
|
||||
}
|
||||
|
||||
void updateDownloadTask(
|
||||
DownloadTaskId taskId,
|
||||
UpdateDownloadTaskStateCallback updateDownloadTaskCallback
|
||||
) {
|
||||
downloadController.updateDownloadTaskByTaskId(
|
||||
taskId,
|
||||
updateDownloadTaskCallback);
|
||||
}
|
||||
|
||||
void deleteDownloadTask(DownloadTaskId taskId) {
|
||||
downloadController.deleteDownloadTask(taskId);
|
||||
}
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||
@@ -578,6 +598,7 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
_connectivityStreamSubscription.cancel();
|
||||
_progressStateController.close();
|
||||
_isolateExecutor.dispose();
|
||||
Get.delete<DownloadController>();
|
||||
super.onClose();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/comp
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/download/download_task_item_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||
@@ -140,6 +141,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
child: buildNetworkConnectionWidget(context));
|
||||
}
|
||||
}),
|
||||
_buildDownloadTaskStateWidget(),
|
||||
]),
|
||||
),
|
||||
);
|
||||
@@ -644,4 +646,38 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildDownloadTaskStateWidget() {
|
||||
return Obx(() {
|
||||
if (controller.downloadController.notEmptyListDownloadTask) {
|
||||
final downloadTasks = controller.downloadController.listDownloadTaskState;
|
||||
|
||||
return Align(
|
||||
alignment: Alignment.bottomCenter,
|
||||
child: Container(
|
||||
color: AppColor.colorBackgroundSnackBar,
|
||||
height: 60,
|
||||
width: double.infinity,
|
||||
child: ListView.separated(
|
||||
scrollDirection: Axis.horizontal,
|
||||
padding: EdgeInsets.zero,
|
||||
itemCount: downloadTasks.length,
|
||||
separatorBuilder: (context, index) =>
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 5),
|
||||
child: VerticalDivider(
|
||||
color: Colors.grey,
|
||||
width: 2.5,
|
||||
thickness: 0.2),
|
||||
),
|
||||
itemBuilder: (context, index) =>
|
||||
DownloadTaskItemWidget(downloadTasks[index])
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
|
||||
import 'package:byte_converter/byte_converter.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: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 {
|
||||
|
||||
final DownloadTaskState taskState;
|
||||
|
||||
const DownloadTaskItemWidget(this.taskState, {
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
|
||||
return Container(
|
||||
padding: EdgeInsets.zero,
|
||||
alignment: Alignment.center,
|
||||
width: 240,
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const SizedBox(width: 12),
|
||||
Container(
|
||||
width: 30,
|
||||
color: Colors.transparent,
|
||||
height: 30,
|
||||
child: Stack(alignment: Alignment.center, children: [
|
||||
SvgPicture.asset(
|
||||
taskState.attachment.getIcon(_imagePaths),
|
||||
width: 16,
|
||||
height: 16,
|
||||
fit: BoxFit.fill),
|
||||
circularPercentLoadingWidget(taskState.percentDownloading)
|
||||
]),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(taskState.attachment.generateFileName(),
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
maxLines: 1,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 14)),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'${ByteConverter(taskState.downloaded.toDouble()).toHumanReadable(SizeUnit.MB)}/'
|
||||
'${ByteConverter(taskState.total.toDouble()).toHumanReadable(SizeUnit.MB)}',
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
maxLines: 1,
|
||||
style: const TextStyle(color: Colors.white, fontSize: 12))
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user