У меня есть страница со списком (виджет с отслеживанием состояния), которая представляет собой список дочерних компаний фирмы и отдельную страницу редактирования (виджет с отслеживанием состояния) для редактирования и удаления определенной дочерней компании. Каждая строка списка представляет собой виджет, у которого есть кнопка, которая переводит пользователя на страницу редактирования, где он также может удалить соответствующую дочернюю компанию. Ниже приведен код этой кнопки
FlatButton(
onPressed: () => Navigator.of(context).push(MaterialPageRoute(
builder: (context) =>
BlocProvider<SubsidiaryEditBloc>(
builder: (BuildContext context) => SubsidiaryEditBloc(),
child: SubsidiaryEditPage(subsidiary: subsidiary)
)
)).then((value) {
subsidiaryListBloc.dispatch(Reset());
}),
child: Text(
"Edit",
),
)
Когда редактирование / удаление завершено, пользователь возвращается назад, и я хочу, чтобы список отражал обновление / удаление. Для этого я использую обратный вызов «then» для действия «push», при котором я отправляю событие «Reset» в блок, прикрепленный к странице списка, что заставляет блок извлекать дочерние компании из репозитория, как если бы они были запрошены в первый раз. Однако это не совсем так. Когда дочерняя компания редактируется, сохраняется и пользователь возвращается назад, ничего плохого не происходит, список успешно обновляется. Но когда дочерняя компания удаляется, переход назад приводит к ошибке, упомянутой в теме. Я новичок в трепетании и еще не знаю всех подводных камней и четко не понимаю хороших и плохих практик. Является ли этот обратный вызов явным источником этой ошибки? Я предполагаю, что он привязан к конкретному экземпляру дочернего виджета, поэтому при изменении элементов списка виджет и блок удаляются - это правильно? Или мне не разрешено отправлять какие-либо события блока в навигации по какой-то другой причине?