Вы можете использовать Api SchedulerBinding.instance Flutter, чтобы предотвратить это исключение. Ошибка возникает из-за того, что перед созданием метода построения вы вызвали диалоговое окно, которое предотвратит завершение восстановления.
Таким образом, ошибки нет:
Consumer<NotificationService>(
builder: (BuildContext context, NotificationService notificationNotifier, _) {
if (notificationNotifier.hasNotifications){
SchedulerBinding.instance.addPostFrameCallback((_) =>
_showNotification(context, notificationNotifier.popNotification()));
}
return Scaffold(
Однако в документации по Flutter рекомендуется что вы не выполняете функции в методе сборки. это может иметь побочные эффекты. Вы, вероятно, используете этот подход из-за контекста, требуемого диалогом. Я рекомендую взглянуть на этот плагин:
https://pub.dev/packages/get
С его помощью вы можете открывать диалоги из любого места в вашем коде, без необходимости в контексте, и его Диспетчер состояний проще, чем changeNotifier, но это не так уж плохо для производительности.
Согласно документации, changeNotifier должен использоваться для одного или максимум двух слушателей. Его производительность очень плохая, и у этого плагина очень похожи, но без использования changeNotifier, я считаю, что это заставит ваш проект развиваться немного больше.
https://api.flutter.dev/flutter/foundation/ChangeNotifier-class.html