TF-2667 Create ApplicationVersionWidget to display app version

This commit is contained in:
dab246
2024-03-06 11:14:33 +07:00
committed by Dat H. Pham
parent c9fed1fa41
commit 61687b60e0
20 changed files with 233 additions and 143 deletions
+24
View File
@@ -304,6 +304,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
fk_user_agent:
dependency: transitive
description:
name: fk_user_agent
sha256: fd6c94e120786985a292d12f61422a581f4e851148d5940af38b819357b8ad0d
url: "https://pub.dev"
source: hosted
version: "2.1.0"
flex_color_picker:
dependency: transitive
description:
@@ -671,6 +679,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
path:
dependency: transitive
description:
+49
View File
@@ -0,0 +1,49 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:fk_user_agent/fk_user_agent.dart';
import 'package:package_info_plus/package_info_plus.dart';
class ApplicationManager {
final DeviceInfoPlugin _deviceInfoPlugin;
ApplicationManager(this._deviceInfoPlugin);
Future<PackageInfo> getPackageInfo() async {
final packageInfo = await PackageInfo.fromPlatform();
log('ApplicationManager::getPackageInto: $packageInfo');
return packageInfo;
}
Future<String> getVersion() async {
final version = (await getPackageInfo()).version;
log('ApplicationManager::getVersion: $version');
return version;
}
Future<String> getUserAgent() async {
try {
String userAgent;
if (PlatformInfo.isWeb) {
final webBrowserInfo = await _deviceInfoPlugin.webBrowserInfo;
userAgent = webBrowserInfo.userAgent ?? '';
} else {
await FkUserAgent.init();
userAgent = FkUserAgent.userAgent ?? '';
FkUserAgent.release();
}
return userAgent;
} catch(e) {
logError('ApplicationManager::getUserAgent: Exception: $e');
return '';
}
}
Future<String> generateApplicationUserAgent() async {
final userAgent = await getUserAgent();
final version = await getVersion();
return 'Team-Mail/$version $userAgent';
}
}
+24
View File
@@ -185,6 +185,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.4"
fk_user_agent:
dependency: "direct main"
description:
name: fk_user_agent
sha256: fd6c94e120786985a292d12f61422a581f4e851148d5940af38b819357b8ad0d
url: "https://pub.dev"
source: hosted
version: "2.1.0"
flex_color_picker:
dependency: "direct main"
description:
@@ -440,6 +448,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.0"
package_info_plus:
dependency: "direct main"
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
path:
dependency: transitive
description:
+4
View File
@@ -75,6 +75,10 @@ dependencies:
printing: 5.12.0
package_info_plus: 4.2.0
fk_user_agent: 2.1.0
dev_dependencies:
flutter_test:
sdk: flutter
+2
View File
@@ -8,6 +8,7 @@ import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/toast/tmail_toast.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/application_manager.dart';
import 'package:core/utils/fps_manager.dart';
import 'package:core/utils/platform_info.dart';
import 'package:dartz/dartz.dart';
@@ -76,6 +77,7 @@ abstract class BaseController extends GetxController
final ImagePaths imagePaths = Get.find<ImagePaths>();
final ResponsiveUtils responsiveUtils = Get.find<ResponsiveUtils>();
final Uuid uuid = Get.find<Uuid>();
final ApplicationManager applicationManager = Get.find<ApplicationManager>();
bool _isFcmEnabled = false;
@@ -0,0 +1,44 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/utils/application_manager.dart';
import 'package:flutter/material.dart';
class ApplicationVersionWidget extends StatelessWidget {
final ApplicationManager applicationManager;
final EdgeInsetsGeometry? padding;
final String? title;
final TextStyle? textStyle;
const ApplicationVersionWidget({
super.key,
required this.applicationManager,
this.title,
this.textStyle,
this.padding,
});
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: applicationManager.getVersion(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Padding(
padding: padding ?? const EdgeInsets.only(top: 6),
child: Text(
'${title ?? 'v.'}${snapshot.data}',
textAlign: TextAlign.center,
style: textStyle ?? Theme.of(context).textTheme.labelMedium?.copyWith(
fontSize: 13,
color: AppColor.colorContentEmail,
fontWeight: FontWeight.w500
),
),
);
} else {
return const SizedBox.shrink();
}
}
);
}
}
@@ -207,7 +207,6 @@ class ComposerBindings extends BaseBindings {
Get.lazyPut(() => UploadController(Get.find<UploadAttachmentInteractor>()));
Get.lazyPut(() => RichTextWebController());
Get.lazyPut(() => ComposerController(
Get.find<DeviceInfoPlugin>(),
Get.find<LocalFilePickerInteractor>(),
Get.find<LocalImagePickerInteractor>(),
Get.find<GetEmailContentInteractor>(),
@@ -10,7 +10,6 @@ import 'package:device_info_plus/device_info_plus.dart';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:file_picker/file_picker.dart';
import 'package:filesize/filesize.dart';
import 'package:fk_user_agent/fk_user_agent.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -123,7 +122,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
final LocalFilePickerInteractor _localFilePickerInteractor;
final LocalImagePickerInteractor _localImagePickerInteractor;
final DeviceInfoPlugin _deviceInfoPlugin;
final GetEmailContentInteractor _getEmailContentInteractor;
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
final UploadController uploadController;
@@ -189,7 +187,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
late bool _isEmailBodyLoaded;
ComposerController(
this._deviceInfoPlugin,
this._localFilePickerInteractor,
this._localImagePickerInteractor,
this._getEmailContentInteractor,
@@ -209,11 +206,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
createFocusNodeInput();
scrollControllerEmailAddress.addListener(_scrollControllerEmailAddressListener);
_listenStreamEvent();
if (PlatformInfo.isMobile) {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
await FkUserAgent.init();
});
} else {
if (PlatformInfo.isWeb) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_listenBrowserEventAction();
});
@@ -244,9 +237,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
_subscriptionOnDragOver?.cancel();
_subscriptionOnDragLeave?.cancel();
_subscriptionOnDrop?.cancel();
if (PlatformInfo.isMobile) {
FkUserAgent.release();
}
super.onClose();
}
@@ -729,7 +719,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
attachments.addAll(listInlineEmailBodyPart);
}
final userAgent = await userAgentPlatform;
final userAgent = await applicationManager.getUserAgent();
log('ComposerController::_generateEmail(): userAgent: $userAgent');
Map<MailboxId, bool> mailboxIds = {};
@@ -814,21 +804,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
}
}
Future<String> get userAgentPlatform async {
String userAgent;
try {
if (kIsWeb) {
final webBrowserInfo = await _deviceInfoPlugin.webBrowserInfo;
userAgent = webBrowserInfo.userAgent ?? '';
} else {
userAgent = FkUserAgent.userAgent ?? '';
}
} catch (e) {
userAgent = '';
}
return 'Team-Mail/${mailboxDashBoardController.appInformation.value?.version} $userAgent';
}
void validateInformationBeforeSending(BuildContext context) async {
if (isSendEmailLoading.isTrue) {
return;
@@ -4,7 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
@@ -85,13 +85,25 @@ class MailboxView extends BaseMailboxView {
: const SizedBox.shrink(),
),
Obx(() {
final appInformation = controller.mailboxDashBoardController.appInformation.value;
if (appInformation != null
&& !controller.isSelectionEnabled()) {
if (controller.responsiveUtils.isLandscapeMobile(context)) {
return const SizedBox.shrink();
}
return _buildVersionInformation(context, appInformation);
if (!controller.isSelectionEnabled() && controller.responsiveUtils.isPortraitMobile(context)) {
return Container(
color: AppColor.colorBgMailbox,
width: double.infinity,
padding: const EdgeInsets.all(16),
child: SafeArea(
top: false,
child: ApplicationVersionWidget(
applicationManager: controller.applicationManager,
padding: EdgeInsets.zero,
title: '${AppLocalizations.of(context).version} ',
textStyle: Theme.of(context).textTheme.labelMedium?.copyWith(
fontSize: 16,
color: AppColor.colorContentEmail,
fontWeight: FontWeight.w500
),
),
),
);
} else {
return const SizedBox.shrink();
}
@@ -365,20 +377,4 @@ class MailboxView extends BaseMailboxView {
}
}).toList() ?? <Widget>[];
}
Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) {
return Container(
color: AppColor.colorBgMailbox,
width: double.infinity,
padding: const EdgeInsets.all(16),
child: SafeArea(
top: false,
child: Text(
'${AppLocalizations.of(context).version} ${packageInfo.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 16, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
),
),
);
}
}
@@ -3,7 +3,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
@@ -68,13 +68,10 @@ class MailboxView extends BaseMailboxView {
textStyle: const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold),
logoSVG: controller.imagePaths.icTMailLogo
),
Obx(() {
if (controller.mailboxDashBoardController.appInformation.value != null) {
return _buildVersionInformation(context, controller.mailboxDashBoardController.appInformation.value!);
} else {
return const SizedBox.shrink();
}
}),
ApplicationVersionWidget(
applicationManager: controller.mailboxDashBoardController.applicationManager,
padding: const EdgeInsets.only(top: 4),
)
])
);
}
@@ -331,15 +328,4 @@ class MailboxView extends BaseMailboxView {
controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction(listEmails, presentationMailbox);
}
}
Widget _buildVersionInformation(BuildContext context, PackageInfo packageInfo) {
return Container(
padding: const EdgeInsets.only(top: 4),
child: Text(
'v.${packageInfo.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
),
);
}
}
@@ -23,7 +23,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:rxdart/transformers.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
@@ -203,7 +202,6 @@ class MailboxDashBoardController extends ReloadableController {
final mailboxUIAction = Rxn<MailboxUIAction>();
final emailUIAction = Rxn<EmailUIAction>();
final dashboardRoute = DashboardRoutes.waiting.obs;
final appInformation = Rxn<PackageInfo>();
final currentSelectMode = SelectMode.INACTIVE.obs;
final filterMessageOption = FilterMessageOption.all.obs;
final listEmailSelected = <PresentationEmail>[].obs;
@@ -281,7 +279,6 @@ class MailboxDashBoardController extends ReloadableController {
_registerPendingEmailContents();
_registerPendingFileInfo();
_handleArguments();
_getAppVersion();
super.onReady();
}
@@ -541,12 +538,6 @@ class MailboxDashBoardController extends ReloadableController {
_handleNotificationMessageFromEmailId(arguments.emailId);
}
Future<void> _getAppVersion() async {
final info = await PackageInfo.fromPlatform();
log('MailboxDashBoardController::_getAppVersion(): ${info.version}');
appInformation.value = info;
}
void _getVacationResponse() {
if (accountId.value != null && _getAllVacationInteractor != null) {
consumeState(_getAllVacationInteractor!.execute(accountId.value!));
@@ -1941,11 +1932,15 @@ class MailboxDashBoardController extends ReloadableController {
}
void _storeSendingEmailInCaseOfSendingFailureInMobile(SendEmailFailure failure) {
if (PlatformInfo.isMobile) {
if (PlatformInfo.isMobile &&
failure.session != null &&
failure.accountId != null &&
failure.emailRequest != null
) {
_tryToStoreSendingEmail(
failure.session,
failure.accountId,
failure.emailRequest,
failure.session!,
failure.accountId!,
failure.emailRequest!,
failure.mailboxRequest
);
}
@@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.dart';
import 'package:model/extensions/username_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/base/widget/popup_item_no_icon_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_view_web.dart';
import 'package:tmail_ui_user/features/email/presentation/email_view.dart';
@@ -76,21 +77,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
logoSVG: controller.imagePaths.icTMailLogo,
onTapCallback: controller.redirectToInboxAction,
),
Obx(() {
if (controller.appInformation.value != null) {
return Padding(padding: const EdgeInsets.only(top: 6),
child: Text(
'v${controller.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 13,
color: AppColor.colorContentEmail,
fontWeight: FontWeight.w500),
));
} else {
return const SizedBox.shrink();
}
}),
ApplicationVersionWidget(
applicationManager: controller.applicationManager
)
])
),
Expanded(child: Container(
@@ -340,7 +329,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
: const SizedBox.shrink(),
const SizedBox(width: 24),
Obx(() => (AvatarBuilder()
..text(controller.sessionCurrent?.username.firstCharacter ?? '')
..text(controller.accountId.value != null
? controller.sessionCurrent?.username.firstCharacter ?? ''
: ''
)
..backgroundColor(Colors.white)
..textColor(Colors.black)
..context(context)
@@ -10,7 +10,6 @@ import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
import 'package:server_settings/server_settings/capability_server_settings.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
@@ -44,7 +43,6 @@ class ManageAccountDashBoardController extends ReloadableController {
GetAllVacationInteractor? _getAllVacationInteractor;
UpdateVacationInteractor? _updateVacationInteractor;
final appInformation = Rxn<PackageInfo>();
final accountId = Rxn<AccountId>();
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
final settingsPageLevel = SettingsPageLevel.universal.obs;
@@ -66,7 +64,6 @@ class ManageAccountDashBoardController extends ReloadableController {
void onReady() {
_initialPageLevel();
_getArguments();
_getAppVersion();
super.onReady();
}
@@ -151,12 +148,6 @@ class ManageAccountDashBoardController extends ReloadableController {
}
}
Future<void> _getAppVersion() async {
final info = await PackageInfo.fromPlatform();
log('ManageAccountDashBoardController::_getAppVersion(): ${info.version}');
appInformation.value = info;
}
void _getVacationResponse() {
if (accountId.value != null && _getAllVacationInteractor != null) {
consumeState(_getAllVacationInteractor!.execute(accountId.value!));
@@ -9,6 +9,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
import 'package:tmail_ui_user/features/base/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart';
@@ -55,18 +56,9 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
logoSVG: controller.imagePaths.icTMailLogo,
onTapCallback: () => controller.backToMailboxDashBoard(context: context),
),
Obx(() {
if (controller.appInformation.value != null) {
return Padding(padding: const EdgeInsets.only(top: 6),
child: Text(
'v.${controller.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
));
} else {
return const SizedBox.shrink();
}
}),
ApplicationVersionWidget(
applicationManager: controller.applicationManager
)
])
),
Expanded(child: Padding(
@@ -4,6 +4,7 @@ import 'package:core/utils/direction_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/widget/application_version_widget.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/account_menu_item_tile_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -31,20 +32,10 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
textStyle: const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold),
logoSVG: controller.imagePaths.icTMailLogo
),
Obx(() {
if (controller.dashBoardController.appInformation.value != null) {
return Padding(
ApplicationVersionWidget(
applicationManager: controller.dashBoardController.applicationManager,
padding: const EdgeInsets.only(top: 4),
child: Text(
'v.${controller.dashBoardController.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500),
),
);
} else {
return const SizedBox.shrink();
}
}),
)
])
),
if (!controller.responsiveUtils.isWebDesktop(context))
@@ -3,6 +3,7 @@ import 'package:core/data/utils/device_manager.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/app_toast.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/application_manager.dart';
import 'package:core/utils/config/app_config_loader.dart';
import 'package:core/utils/file_utils.dart';
import 'package:core/utils/platform_info.dart';
@@ -62,6 +63,7 @@ class CoreBindings extends Bindings {
Get.put(AppConfigLoader());
Get.put(FileUtils());
Get.put(PrintUtils());
Get.put(ApplicationManager(Get.find<DeviceInfoPlugin>()));
}
void _bindingIsolate() {
+24
View File
@@ -304,6 +304,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
fk_user_agent:
dependency: transitive
description:
name: fk_user_agent
sha256: fd6c94e120786985a292d12f61422a581f4e851148d5940af38b819357b8ad0d
url: "https://pub.dev"
source: hosted
version: "2.1.0"
flex_color_picker:
dependency: transitive
description:
@@ -648,6 +656,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.0"
package_info_plus:
dependency: transitive
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
package_info_plus_platform_interface:
dependency: transitive
description:
name: package_info_plus_platform_interface
sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
path:
dependency: transitive
description:
+2 -2
View File
@@ -594,7 +594,7 @@ packages:
source: hosted
version: "1.1.0"
fk_user_agent:
dependency: "direct main"
dependency: transitive
description:
name: fk_user_agent
sha256: fd6c94e120786985a292d12f61422a581f4e851148d5940af38b819357b8ad0d
@@ -1272,7 +1272,7 @@ packages:
source: hosted
version: "2.1.0"
package_info_plus:
dependency: "direct main"
dependency: transitive
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
-4
View File
@@ -152,16 +152,12 @@ dependencies:
hive: 2.2.3
fk_user_agent: 2.1.0
pointer_interceptor: 0.9.1
rxdart: 0.27.7
connectivity_plus: 3.0.3
package_info_plus: 4.2.0
dropdown_button2: 2.0.0
flutter_staggered_grid_view: 0.6.2
@@ -1,6 +1,7 @@
import 'dart:ui';
import 'package:core/core.dart';
import 'package:core/utils/application_manager.dart';
import 'package:dartz/dartz.dart' hide State;
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
@@ -86,6 +87,7 @@ const fallbackGenerators = {
MockSpec<RejectCalendarEventInteractor>(),
MockSpec<StoreEventAttendanceStatusInteractor>(),
MockSpec<PrintUtils>(),
MockSpec<ApplicationManager>(),
])
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -118,6 +120,7 @@ void main() {
final printEmailInteractor = MockPrintEmailInteractor();
final storeEventAttendanceStatusInteractor = MockStoreEventAttendanceStatusInteractor();
final printUtils = MockPrintUtils();
final applicationManager = MockApplicationManager();
late SingleEmailController singleEmailController;
@@ -151,6 +154,7 @@ void main() {
Get.put<ResponsiveUtils>(responsiveUtils);
Get.put<Uuid>(uuid);
Get.put<PrintUtils>(printUtils);
Get.put<ApplicationManager>(applicationManager);
when(mailboxDashboardController.accountId).thenReturn(Rxn(testAccountId));
when(uuid.v4()).thenReturn(testTaskId);