Flutter GetXController: «Необработанное исключение: '! IsClosed': вы не можете добавить событие в закрытый поток»
Пару часов я боролся с этим вопросом. Есть некоторые решения для BLoC и StreamController, но нет подходящего решения для GetX.
Как их предложение из ответа BloC, я подумал, что это может быть связано с удалением GetXController . Затем я применяю метод 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)
Заранее спасибо
5 ответов
Попробуйте добавить это сразу после объявления контроллера в виджете без состояния:
controller.onInit();
Вы пытаетесь добавить событие после того, как контроллер был удален. Удаление контроллера может произойти при удалении виджета. Вам нужно отслеживать, когда вызывается этот метод.
У меня была аналогичная ошибка всего несколько минут назад. И начал искать ошибку. Я нашел это на GitHub . Это был ответ для меня.
Не уверен, что это помогает, но у меня такая же проблема, и проблема решается, если я перезапускаю приложение без горячей перезагрузки.
Я думаю, что нет конкретного решения для этой конкретной проблемы. Я долго сталкивался с той же проблемой. Потом я узнаю, что было
Я сам никогда не использовал эту библиотеку, но думаю, это даст вам некоторое представление.
StreamController controller = ...;
if (!controller.isClosed) {
controller.sink.add(event); // Only add the event if the stream isn't closed.
}