TF-1877 Fix error TextEditingController was used after being disposed on some screen
(cherry picked from commit 50e4c6ec55eea21a45a5a8dd31cd239245248df3)
This commit is contained in:
@@ -104,8 +104,4 @@ class DestinationPickerBindings extends BaseBindings {
|
||||
Get.find<StateDataSource>(),
|
||||
));
|
||||
}
|
||||
|
||||
void dispose() {
|
||||
Get.delete<DestinationPickerController>();
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import 'package:core/presentation/state/failure.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/presentation/utils/app_toast.dart';
|
||||
import 'package:core/presentation/utils/keyboard_utils.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
@@ -41,8 +41,6 @@ import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
typedef OnSelectedMailboxCallback = Function(PresentationMailbox? destinationMailbox);
|
||||
|
||||
class DestinationPickerController extends BaseMailboxController {
|
||||
|
||||
final _uuid = Get.find<Uuid>();
|
||||
@@ -59,19 +57,16 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
final mailboxDestination = Rxn<PresentationMailbox>();
|
||||
final newNameMailbox = Rxn<String>();
|
||||
|
||||
FocusNode? nameInputFocusNode;
|
||||
TextEditingController? nameInputController;
|
||||
TextEditingController? searchInputController;
|
||||
FocusNode? searchFocus;
|
||||
DestinationPickerArguments? arguments;
|
||||
Session? _session;
|
||||
AccountId? accountId;
|
||||
MailboxId? mailboxIdSelected;
|
||||
OnSelectedMailboxCallback? onSelectedMailboxCallback;
|
||||
VoidCallback? onDismissDestinationPicker;
|
||||
|
||||
List<String> listMailboxNameAsStringExist = <String>[];
|
||||
|
||||
final FocusNode nameInputFocusNode = FocusNode();
|
||||
final FocusNode searchFocus = FocusNode();
|
||||
final TextEditingController nameInputController = TextEditingController();
|
||||
final TextEditingController searchInputController = TextEditingController();
|
||||
final destinationListScrollController = ScrollController();
|
||||
|
||||
DestinationPickerController(
|
||||
@@ -91,17 +86,14 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
nameInputFocusNode = FocusNode();
|
||||
nameInputController = TextEditingController();
|
||||
searchInputController = TextEditingController();
|
||||
searchFocus = FocusNode();
|
||||
searchFocus?.unfocus();
|
||||
nameInputFocusNode?.unfocus();
|
||||
log('DestinationPickerController::onInit():arguments: ${Get.arguments}');
|
||||
arguments = Get.arguments;
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
log('DestinationPickerController::onReady():');
|
||||
if (arguments != null) {
|
||||
mailboxAction.value = arguments!.mailboxAction;
|
||||
mailboxIdSelected = arguments!.mailboxIdSelected;
|
||||
@@ -143,7 +135,11 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
|
||||
@override
|
||||
void onClose() {
|
||||
_disposeWidget();
|
||||
log('DestinationPickerController::onClose():');
|
||||
nameInputFocusNode.dispose();
|
||||
nameInputController.dispose();
|
||||
searchFocus.dispose();
|
||||
searchInputController.dispose();
|
||||
destinationListScrollController.dispose();
|
||||
super.onClose();
|
||||
}
|
||||
@@ -199,7 +195,7 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
String? getErrorInputNameString(BuildContext context) {
|
||||
final nameMailbox = newNameMailbox.value;
|
||||
|
||||
if (nameInputFocusNode?.hasFocus == false && nameMailbox == null) {
|
||||
if (nameInputFocusNode.hasFocus == false && nameMailbox == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -224,7 +220,7 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
bool isCreateMailboxValidated(BuildContext context) {
|
||||
final nameValidated = getErrorInputNameString(context);
|
||||
|
||||
if (nameInputFocusNode?.hasFocus == false && newNameMailbox.value == null) {
|
||||
if (nameInputFocusNode.hasFocus == false && newNameMailbox.value == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -265,13 +261,13 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
listMailboxSearched.clear();
|
||||
searchState.value = searchState.value.disableSearchState();
|
||||
searchQuery.value = SearchQuery.initial();
|
||||
searchInputController?.clear();
|
||||
searchInputController.clear();
|
||||
KeyboardUtils.hideKeyboard(context);
|
||||
}
|
||||
|
||||
void clearSearchText() {
|
||||
searchQuery.value = SearchQuery.initial();
|
||||
searchFocus?.requestFocus();
|
||||
searchFocus.requestFocus();
|
||||
listMailboxSearched.clear();
|
||||
}
|
||||
|
||||
@@ -377,12 +373,7 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
AppLocalizations.of(context).toastMessageErrorNotSelectedFolderWhenCreateNewMailbox);
|
||||
return;
|
||||
}
|
||||
|
||||
if (PlatformInfo.isWeb) {
|
||||
onSelectedMailboxCallback?.call(mailboxDestination.value);
|
||||
} else {
|
||||
popBack(result: mailboxDestination.value);
|
||||
}
|
||||
popBack(result: mailboxDestination.value);
|
||||
}
|
||||
|
||||
void createNewMailboxAction(BuildContext context) {
|
||||
@@ -408,29 +399,13 @@ class DestinationPickerController extends BaseMailboxController {
|
||||
}
|
||||
|
||||
void backToDestinationScreen(BuildContext context) {
|
||||
nameInputController?.clear();
|
||||
nameInputController.clear();
|
||||
KeyboardUtils.hideKeyboard(context);
|
||||
destinationScreenType.value = DestinationScreenType.destinationPicker;
|
||||
}
|
||||
|
||||
void _disposeWidget() {
|
||||
nameInputFocusNode?.dispose();
|
||||
nameInputFocusNode = null;
|
||||
nameInputController?.dispose();
|
||||
nameInputController = null;
|
||||
searchFocus?.dispose();
|
||||
searchFocus = null;
|
||||
searchInputController?.dispose();
|
||||
searchInputController = null;
|
||||
}
|
||||
|
||||
void closeDestinationPicker(BuildContext context) {
|
||||
KeyboardUtils.hideKeyboard(context);
|
||||
|
||||
if (PlatformInfo.isWeb) {
|
||||
onDismissDestinationPicker?.call();
|
||||
} else {
|
||||
popBack();
|
||||
}
|
||||
popBack();
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,6 @@ import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart';
|
||||
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart';
|
||||
@@ -45,20 +44,7 @@ class DestinationPickerView extends GetWidget<DestinationPickerController>
|
||||
@override
|
||||
final controller = Get.find<DestinationPickerController>();
|
||||
|
||||
DestinationPickerView({Key? key}) : super(key: key) {
|
||||
controller.arguments = Get.arguments;
|
||||
}
|
||||
|
||||
DestinationPickerView.fromArguments(
|
||||
DestinationPickerArguments arguments, {
|
||||
Key? key,
|
||||
OnSelectedMailboxCallback? onSelectedMailboxCallback,
|
||||
VoidCallback? onDismissCallback
|
||||
}) : super(key: key) {
|
||||
controller.arguments = arguments;
|
||||
controller.onSelectedMailboxCallback = onSelectedMailboxCallback;
|
||||
controller.onDismissDestinationPicker = onDismissCallback;
|
||||
}
|
||||
DestinationPickerView({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
Reference in New Issue
Block a user