From 23e475477dcda585836aab01ec3fd996e1ab6ff3 Mon Sep 17 00:00:00 2001 From: Yaroslav Pronin Date: Fri, 27 Sep 2024 10:41:02 +0300 Subject: [PATCH] Fix Bad state: Cannot emit new states --- lib/ui/home/model/ref_images_cubit.dart | 14 ++++++++------ lib/ui/model/utils.dart | 10 ++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/ui/home/model/ref_images_cubit.dart b/lib/ui/home/model/ref_images_cubit.dart index 983e66f..a35e91c 100644 --- a/lib/ui/home/model/ref_images_cubit.dart +++ b/lib/ui/home/model/ref_images_cubit.dart @@ -22,6 +22,7 @@ import 'package:blink_comparison/core/storage/ref_image_status_repository.dart'; import 'package:blink_comparison/core/storage/storage_result.dart'; import 'package:blink_comparison/ui/home/model/ref_images_actions_state.dart'; import 'package:blink_comparison/ui/home/model/ref_images_state.dart'; +import 'package:blink_comparison/ui/model/utils.dart'; import 'package:bloc/bloc.dart'; // ignore: unnecessary_import import 'package:flutter/foundation.dart'; @@ -53,12 +54,13 @@ class RefImagesCubit extends Cubit { ), ]); await for (final res in group) { - switch (res) { - case _BuildResultData(:final entries): - emit(RefImagesState.loaded(entries: entries)); - case _BuildResultFailed(:final error): - emit(RefImagesState.loadingFailed(error: error)); - } + final newState = switch (res) { + _BuildResultData(:final entries) => + RefImagesState.loaded(entries: entries), + _BuildResultFailed(:final error) => + RefImagesState.loadingFailed(error: error), + }; + safeEmit(newState); if (res is _BuildResultFailed) { break; diff --git a/lib/ui/model/utils.dart b/lib/ui/model/utils.dart index c13e949..ed1cd85 100644 --- a/lib/ui/model/utils.dart +++ b/lib/ui/model/utils.dart @@ -16,6 +16,7 @@ // along with Blink Comparison. If not, see . import 'package:blink_comparison/core/settings/model.dart'; +import 'package:bloc/bloc.dart'; import 'package:flutter/material.dart'; import '../../locale.dart'; @@ -66,3 +67,12 @@ extension EncryptionPreferenceExtension on EncryptionPreference { Never neverCase(Object type) { throw ArgumentError('Unexpected case: $type'); } + +extension CubitExt on Cubit { + void safeEmit(T state) { + if (!isClosed) { + // ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member + emit(state); + } + } +}