Flutter GetXController: необработанное исключение: '! IsClosed': вы не можете добавить событие в закрытый поток

Пару часов боролся с этим вопросом. Есть некоторые решения для BLoC и StreamController, но нет подходящего решения для GetX.

Как их предложение из ответа BloC, я подумал, что это может быть связано с GetXController dispose. Затем я применяю метод dispose () для контроллера на своей странице, где я инициализировал user_controller. Но все еще есть ошибка, как показано ниже

Unhandled Exception: 'package:get/get_rx/src/rx_stream/get_stream.dart': Failed assertion: line 90 pos 12: '!isClosed': You cannot add event to closed Stream
E/flutter (21576): #0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
E/flutter (21576): #1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
E/flutter (21576): #2      GetStream.add (package:get/get_rx/src/rx_stream/get_stream.dart:90:12)
E/flutter (21576): #3      NotifyManager.addListener.<anonymous closure> (package:get/get_rx/src/rx_types/rx_core/rx_impl.dart:139:15)
E/flutter (21576): #4      GetStream._notifyData (package:get/get_rx/src/rx_stream/get_stream.dart:47:21)
E/flutter (21576): #5      GetStream.add (package:get/get_rx/src/rx_stream/get_stream.dart:92:5)
E/flutter (21576): #6      RxObjectMixin.value= (package:get/get_rx/src/rx_types/rx_core/rx_impl.dart:101:13)
E/flutter (21576): #7      UserController.getUserData (package:hellobabybox/controllers/user_controller.dart:20:12)

Заранее спасибо


person Mimu Saha Tishan    schedule 05.02.2021    source источник


Ответы (3)


Вы пытаетесь добавить событие после того, как контроллер был удален. Удаление контроллера может произойти при удалении виджета. Вам нужно отслеживать, когда вызывается этот метод.

person Scott Godfrey    schedule 05.02.2021
comment
Спасибо за ваш ответ, я понял вашу точку зрения. Сначала я не вызывал метод dispose () ни в своем классе виджетов, ни в расширенном классе GetXController. кстати, позвольте мне попытаться отследить - person Mimu Saha Tishan; 05.02.2021
comment
Есть идеи, как это отследить? Я тоже получаю это сообщение, больше ничего! - person Anoop.P.A; 31.03.2021

Попробуйте добавить это сразу после объявления контроллера в виджете без состояния:

controller.onInit();
person Gabriel Brito    schedule 18.03.2021

Я сам никогда не использовал эту библиотеку, но думаю, это даст вам некоторое представление.

StreamController controller = ...;
if (!controller.isClosed) {
  controller.sink.add(event); // Only add the event if the stream isn't closed. 
}
person iDecode    schedule 05.02.2021
comment
Спасибо за ваш быстрый ответ. Но я видел этот ответ там, где он был опубликован, а затем применил dispose (). bcz нет метода стока в классе контроллера в библиотеке GetX - person Mimu Saha Tishan; 05.02.2021
comment
@MimuSahaTishan Вы можете игнорировать sink, если в нем есть какой-либо add метод. Здесь? - person iDecode; 05.02.2021
comment
Я тоже пробовал, но метод добавления недоступен - person Mimu Saha Tishan; 05.02.2021