TF-2676 Add loading bar when load identities

This commit is contained in:
dab246
2024-04-12 15:21:40 +07:00
committed by Dat H. Pham
parent d651d33e46
commit 6c13e00935
3 changed files with 73 additions and 14 deletions
@@ -38,7 +38,7 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class IdentitiesController extends BaseController {
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
final accountDashBoardController = Get.find<ManageAccountDashBoardController>();
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,
@@ -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
)
))
],
)
)
);
}
@@ -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<Failure, Success> identityViewState;
final Either<Failure, Success> 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();
}
}
)
);
}
}