From 6c13e00935fcca5ae59f3fd531b19ad08f4bd033 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 12 Apr 2024 15:21:40 +0700 Subject: [PATCH] TF-2676 Add loading bar when load identities --- .../identities/identities_controller.dart | 22 ++++----- .../identities_radio_list_builder.dart | 20 +++++++-- .../widgets/identity_loading_widget.dart | 45 +++++++++++++++++++ 3 files changed, 73 insertions(+), 14 deletions(-) create mode 100644 lib/features/manage_account/presentation/profiles/identities/widgets/identity_loading_widget.dart diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart index e7abe242d..e3854efe1 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -38,7 +38,7 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class IdentitiesController extends BaseController { - final _accountDashBoardController = Get.find(); + final accountDashBoardController = Get.find(); final GetAllIdentitiesInteractor _getAllIdentitiesInteractor; final CreateNewIdentityInteractor _createNewIdentityInteractor; @@ -95,8 +95,8 @@ class IdentitiesController extends BaseController { } void _registerObxStreamListener() { - ever(_accountDashBoardController.accountId, (accountId) { - final session = _accountDashBoardController.sessionCurrent; + ever(accountDashBoardController.accountId, (accountId) { + final session = accountDashBoardController.sessionCurrent; if (accountId != null && session != null) { _getAllIdentities(session, accountId); } @@ -111,8 +111,8 @@ class IdentitiesController extends BaseController { identitySelected.value = null; listAllIdentities.clear(); - final accountId = _accountDashBoardController.accountId.value; - final session = _accountDashBoardController.sessionCurrent; + final accountId = accountDashBoardController.accountId.value; + final session = accountDashBoardController.sessionCurrent; if (accountId != null && session != null) { _getAllIdentities(session, accountId); } @@ -141,8 +141,8 @@ class IdentitiesController extends BaseController { } void goToCreateNewIdentity(BuildContext context) async { - final accountId = _accountDashBoardController.accountId.value; - final session = _accountDashBoardController.sessionCurrent; + final accountId = accountDashBoardController.accountId.value; + final session = accountDashBoardController.sessionCurrent; if (accountId != null && session != null) { final arguments = IdentityCreatorArguments(accountId, session); @@ -204,8 +204,8 @@ class IdentitiesController extends BaseController { void _deleteIdentityAction(Identity identity) { popBack(); - final session = _accountDashBoardController.sessionCurrent; - final accountId = _accountDashBoardController.accountId.value; + final session = accountDashBoardController.sessionCurrent; + final accountId = accountDashBoardController.accountId.value; if (accountId != null && session != null && identity.id != null) { consumeState(_deleteIdentityInteractor.execute(session, accountId, identity.id!)); } @@ -247,8 +247,8 @@ class IdentitiesController extends BaseController { } void goToEditIdentity(BuildContext context, Identity identity) async { - final accountId = _accountDashBoardController.accountId.value; - final session = _accountDashBoardController.sessionCurrent; + final accountId = accountDashBoardController.accountId.value; + final session = accountDashBoardController.sessionCurrent; if (accountId != null && session != null) { final arguments = IdentityCreatorArguments( accountId, diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart index 88eea6986..b0e61dd4f 100644 --- a/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart +++ b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart @@ -8,6 +8,7 @@ import 'package:get/get_state_manager/get_state_manager.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/transform_html_signature_state.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/identity_list_tile_builder.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/identity_loading_widget.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart'; class IdentitiesRadioListBuilder extends StatelessWidget { @@ -34,9 +35,22 @@ class IdentitiesRadioListBuilder extends StatelessWidget { ), child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(16.0)), - child: responsiveUtils.isWebDesktop(context) - ? _buildIdentityViewHorizontal(context) - : _buildIdentityViewVertical(context)) + child: Stack( + children: [ + if (responsiveUtils.isWebDesktop(context)) + _buildIdentityViewHorizontal(context) + else + _buildIdentityViewVertical(context), + Obx(() => Align( + alignment: AlignmentDirectional.topCenter, + child: IdentityLoadingWidget( + identityViewState: controller.viewState.value, + settingViewState: controller.accountDashBoardController.viewState.value + ) + )) + ], + ) + ) ); } diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/identity_loading_widget.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/identity_loading_widget.dart new file mode 100644 index 000000000..151ff6058 --- /dev/null +++ b/lib/features/manage_account/presentation/profiles/identities/widgets/identity_loading_widget.dart @@ -0,0 +1,45 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/widget/circle_loading_widget.dart'; +import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart'; + +class IdentityLoadingWidget extends StatelessWidget { + + final Either identityViewState; + final Either settingViewState; + + const IdentityLoadingWidget({ + super.key, + required this.identityViewState, + required this.settingViewState + }); + + @override + Widget build(BuildContext context) { + return settingViewState.fold( + (failure) => identityViewState.fold( + (failure) => const SizedBox.shrink(), + (success) { + if (success is GetAllIdentitiesLoading || success is GetSessionLoading) { + return const CircleLoadingWidget(padding: EdgeInsets.all(16.0)); + } else { + return const SizedBox.shrink(); + } + } + ), + (success) => identityViewState.fold( + (failure) => const SizedBox.shrink(), + (success) { + if (success is GetAllIdentitiesLoading || success is GetSessionLoading) { + return const CircleLoadingWidget(padding: EdgeInsets.all(16.0)); + } else { + return const SizedBox.shrink(); + } + } + ) + ); + } +} \ No newline at end of file