TF-1915 Update state action of sending email item
(cherry picked from commit b23e3389432ec4e385da0d08b79f1727405f0503)
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
|
||||
enum ButtonState {
|
||||
enabled,
|
||||
disabled;
|
||||
|
||||
double get opacity {
|
||||
switch(this) {
|
||||
case ButtonState.enabled:
|
||||
return 1.0;
|
||||
case ButtonState.disabled:
|
||||
return 0.4;
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -156,7 +156,7 @@ class LocalNotificationManager {
|
||||
id.hashCode,
|
||||
title,
|
||||
message,
|
||||
LocalNotificationConfig.instance.generateNotificationDetails(),
|
||||
LocalNotificationConfig.instance.generateNotificationDetails(styleInformation: const DefaultStyleInformation(true, true)),
|
||||
payload: payload
|
||||
);
|
||||
}
|
||||
|
||||
@@ -18,4 +18,6 @@ extension ListSendingEmailExtension on List<SendingEmail> {
|
||||
List<SendingEmail> listSelected() => where((sendingEmail) => sendingEmail.isSelected).toList();
|
||||
|
||||
bool isAllNotReadySendingState() => every((sendingEmail) => !sendingEmail.isReady);
|
||||
|
||||
bool isAllNotDeliveringSendingState() => every((sendingEmail) => !sendingEmail.isDelivering);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
enum SendingEmailActionType {
|
||||
@@ -30,25 +31,25 @@ enum SendingEmailActionType {
|
||||
}
|
||||
}
|
||||
|
||||
Color getButtonIconColor() {
|
||||
Color getButtonIconColor(ButtonState buttonState) {
|
||||
switch(this) {
|
||||
case SendingEmailActionType.delete:
|
||||
return AppColor.colorDeletePermanentlyButton;
|
||||
return AppColor.colorDeletePermanentlyButton.withOpacity(buttonState.opacity);
|
||||
case SendingEmailActionType.edit:
|
||||
return AppColor.primaryColor;
|
||||
return AppColor.primaryColor.withOpacity(buttonState.opacity);
|
||||
case SendingEmailActionType.create:
|
||||
return Colors.transparent;
|
||||
return Colors.transparent.withOpacity(buttonState.opacity);
|
||||
}
|
||||
}
|
||||
|
||||
Color getButtonTitleColor() {
|
||||
Color getButtonTitleColor(ButtonState buttonState) {
|
||||
switch(this) {
|
||||
case SendingEmailActionType.delete:
|
||||
return AppColor.colorDeletePermanentlyButton;
|
||||
return AppColor.colorDeletePermanentlyButton.withOpacity(buttonState.opacity);
|
||||
case SendingEmailActionType.edit:
|
||||
return AppColor.primaryColor;
|
||||
return AppColor.primaryColor.withOpacity(buttonState.opacity);
|
||||
case SendingEmailActionType.create:
|
||||
return Colors.transparent;
|
||||
return Colors.transparent.withOpacity(buttonState.opacity);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,6 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
||||
final _appToast = getBinding<AppToast>();
|
||||
|
||||
final listSendingEmailController = ScrollController();
|
||||
final listSendingEmailSelected = <SendingEmail>[].obs;
|
||||
|
||||
final selectionState = Rx<SelectMode>(SelectMode.INACTIVE);
|
||||
|
||||
@@ -73,8 +72,6 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
||||
selectionState.value = newListSendingEmail.isAllUnSelected()
|
||||
? SelectMode.INACTIVE
|
||||
: SelectMode.ACTIVE;
|
||||
|
||||
listSendingEmailSelected.value = newListSendingEmail.listSelected();
|
||||
}
|
||||
|
||||
void toggleSelectionSendingEmail(SendingEmail sendingEmail) {
|
||||
@@ -84,12 +81,12 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
||||
selectionState.value = newListSendingEmail.isAllUnSelected()
|
||||
? SelectMode.INACTIVE
|
||||
: SelectMode.ACTIVE;
|
||||
|
||||
listSendingEmailSelected.value = newListSendingEmail.listSelected();
|
||||
}
|
||||
|
||||
bool get isAllUnSelected => dashboardController!.listSendingEmails.isAllUnSelected();
|
||||
|
||||
bool get isConnectedNetwork => _networkConnectionController?.isNetworkConnectionAvailable() == true;
|
||||
|
||||
void _refreshSendingQueue({bool needToReopen = false}) {
|
||||
dashboardController!.getAllSendingEmails(needToReopen: needToReopen);
|
||||
}
|
||||
@@ -114,7 +111,7 @@ class SendingQueueController extends BaseController with MessageDialogActionMixi
|
||||
_deleteSendingEmailAction(context, listSendingEmails);
|
||||
break;
|
||||
case SendingEmailActionType.edit:
|
||||
if (_networkConnectionController?.isNetworkConnectionAvailable() == false) {
|
||||
if (!isConnectedNetwork) {
|
||||
_editSendingEmailAction(listSendingEmails.first);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
|
||||
@@ -26,7 +25,7 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
|
||||
children: [
|
||||
Obx(() {
|
||||
return AppBarSendingQueueWidget(
|
||||
listSendingEmails: controller.listSendingEmailSelected,
|
||||
listSendingEmailSelected: controller.dashboardController!.listSendingEmails.listSelected(),
|
||||
onOpenMailboxMenu: controller.openMailboxMenu,
|
||||
onBackAction: controller.disableSelectionMode,
|
||||
selectMode: controller.selectionState.value,
|
||||
@@ -46,7 +45,8 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
|
||||
return const SizedBox.shrink();
|
||||
} else {
|
||||
return BottomBarSendingQueueWidget(
|
||||
listSendingEmails: controller.listSendingEmailSelected,
|
||||
listSendingEmailSelected: controller.dashboardController!.listSendingEmails.listSelected(),
|
||||
isConnectedNetwork: controller.isConnectedNetwork,
|
||||
onHandleSendingEmailActionType: (actionType, listSendingEmails) => controller.handleSendingEmailActionType(context, actionType, listSendingEmails),
|
||||
);
|
||||
}
|
||||
@@ -60,22 +60,24 @@ class SendingQueueView extends GetWidget<SendingQueueController> with AppLoaderM
|
||||
|
||||
Widget _buildListSendingEmails(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (controller.dashboardController!.listSendingEmails.isNotEmpty) {
|
||||
return LayoutBuilder(builder: (context, constraints) {
|
||||
log('SendingQueueView::_buildListSendingEmails(): MAX_WIDTH: ${constraints.maxWidth}');
|
||||
return ListView.builder(
|
||||
controller: controller.listSendingEmailController,
|
||||
itemCount: controller.dashboardController!.listSendingEmails.length,
|
||||
itemBuilder: (context, index) {
|
||||
return Obx(() => SendingEmailTileWidget(
|
||||
sendingEmail: controller.dashboardController!.listSendingEmails[index],
|
||||
selectMode: controller.selectionState.value,
|
||||
onLongPressAction: controller.handleOnLongPressAction,
|
||||
onSelectLeadingAction: controller.toggleSelectionSendingEmail,
|
||||
onTapAction: (actionType, listSendingEmails) => controller.handleSendingEmailActionType(context, actionType, [listSendingEmails])));
|
||||
}
|
||||
);
|
||||
});
|
||||
final listSendingEmails = controller.dashboardController!.listSendingEmails;
|
||||
if (listSendingEmails.isNotEmpty) {
|
||||
return ListView.builder(
|
||||
controller: controller.listSendingEmailController,
|
||||
itemCount: listSendingEmails.length,
|
||||
itemBuilder: (context, index) {
|
||||
return SendingEmailTileWidget(
|
||||
sendingEmail: listSendingEmails[index],
|
||||
selectMode: controller.selectionState.value,
|
||||
onLongPressAction: controller.handleOnLongPressAction,
|
||||
onSelectLeadingAction: controller.toggleSelectionSendingEmail,
|
||||
onTapAction: (actionType, sendingEmail) {
|
||||
if (!controller.isConnectedNetwork && sendingEmail.isReady) {
|
||||
controller.handleSendingEmailActionType(context, actionType, [sendingEmail]);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
@@ -18,11 +18,11 @@ class AppBarSendingQueueWidget extends StatelessWidget {
|
||||
final VoidCallback? onBackAction;
|
||||
final VoidCallback? onOpenMailboxMenu;
|
||||
final SelectMode selectMode;
|
||||
final List<SendingEmail> listSendingEmails;
|
||||
final List<SendingEmail> listSendingEmailSelected;
|
||||
|
||||
const AppBarSendingQueueWidget({
|
||||
super.key,
|
||||
required this.listSendingEmails,
|
||||
required this.listSendingEmailSelected,
|
||||
this.onBackAction,
|
||||
this.onOpenMailboxMenu,
|
||||
this.selectMode = SelectMode.INACTIVE
|
||||
@@ -71,7 +71,7 @@ class AppBarSendingQueueWidget extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Text(
|
||||
listSendingEmails.length.toString(),
|
||||
listSendingEmailSelected.length.toString(),
|
||||
maxLines: 1,
|
||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||
|
||||
+33
-17
@@ -4,6 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/views/button/button_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/button_state.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/domain/model/sending_email.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/extensions/list_sending_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/sending_queue/presentation/model/sending_email_action_type.dart';
|
||||
@@ -12,13 +13,15 @@ typedef OnHandleSendingEmailActionType = void Function(SendingEmailActionType, L
|
||||
|
||||
class BottomBarSendingQueueWidget extends StatelessWidget {
|
||||
|
||||
final List<SendingEmail> listSendingEmails;
|
||||
final List<SendingEmail> listSendingEmailSelected;
|
||||
final OnHandleSendingEmailActionType? onHandleSendingEmailActionType;
|
||||
final bool isConnectedNetwork;
|
||||
|
||||
const BottomBarSendingQueueWidget({
|
||||
super.key,
|
||||
required this.listSendingEmails,
|
||||
required this.listSendingEmailSelected,
|
||||
this.onHandleSendingEmailActionType,
|
||||
this.isConnectedNetwork = true
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -36,27 +39,40 @@ class BottomBarSendingQueueWidget extends StatelessWidget {
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
if (!listSendingEmails.isAllSelected() || listSendingEmails.length < 2)
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icEdit)
|
||||
..key(Key(SendingEmailActionType.edit.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.edit.getButtonIconColor())
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor()))
|
||||
..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmails))
|
||||
..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true)
|
||||
).build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icDeleteComposer)
|
||||
..key(Key(SendingEmailActionType.delete.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.delete.getButtonIconColor())
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icEdit)
|
||||
..key(Key(SendingEmailActionType.edit.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.edit.getButtonIconColor(_isEditable ? ButtonState.enabled : ButtonState.disabled))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.delete.getButtonTitleColor()))
|
||||
..onPressActionClick(() => onHandleSendingEmailActionType?.call(SendingEmailActionType.delete, listSendingEmails))
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.edit.getButtonTitleColor(_isEditable ? ButtonState.enabled : ButtonState.disabled)))
|
||||
..onPressActionClick(() {
|
||||
if (_isEditable) {
|
||||
onHandleSendingEmailActionType?.call(SendingEmailActionType.edit, listSendingEmailSelected);
|
||||
}
|
||||
})
|
||||
..text(SendingEmailActionType.edit.getButtonTitle(context), isVertical: true)
|
||||
).build()),
|
||||
Expanded(child: (ButtonBuilder(imagePaths.icDeleteComposer)
|
||||
..key(Key(SendingEmailActionType.delete.getButtonKey()))
|
||||
..iconColor(SendingEmailActionType.delete.getButtonIconColor(_isCanBeDeleted ? ButtonState.enabled : ButtonState.disabled))
|
||||
..padding(const EdgeInsets.all(8))
|
||||
..radiusSplash(8)
|
||||
..textStyle(TextStyle(fontSize: 12, color: SendingEmailActionType.delete.getButtonTitleColor(_isCanBeDeleted ? ButtonState.enabled : ButtonState.disabled)))
|
||||
..onPressActionClick(() {
|
||||
if (_isCanBeDeleted) {
|
||||
onHandleSendingEmailActionType?.call(SendingEmailActionType.delete, listSendingEmailSelected);
|
||||
}
|
||||
})
|
||||
..text(SendingEmailActionType.delete.getButtonTitle(context), isVertical: true)
|
||||
).build())
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
bool get _isEditable => !isConnectedNetwork &&
|
||||
listSendingEmailSelected.length == 1 &&
|
||||
listSendingEmailSelected.first.isReady;
|
||||
|
||||
bool get _isCanBeDeleted => listSendingEmailSelected.isAllNotDeliveringSendingState();
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class SendingEmailTileWidget extends StatelessWidget {
|
||||
return Material(
|
||||
color: Colors.transparent,
|
||||
child: InkWell(
|
||||
onTap: () => onTapAction?.call(SendingEmailActionType.edit ,sendingEmail),
|
||||
onTap: () => onTapAction?.call(SendingEmailActionType.edit, sendingEmail),
|
||||
onLongPress: () => onLongPressAction?.call(sendingEmail),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
|
||||
Reference in New Issue
Block a user