Skip to content

Commit

Permalink
Fix Bad state: Cannot emit new states
Browse files Browse the repository at this point in the history
  • Loading branch information
proninyaroslav committed Sep 27, 2024
1 parent a2035dd commit 23e4754
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
14 changes: 8 additions & 6 deletions lib/ui/home/model/ref_images_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -53,12 +54,13 @@ class RefImagesCubit extends Cubit<RefImagesState> {
),
]);
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;
Expand Down
10 changes: 10 additions & 0 deletions lib/ui/model/utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
// along with Blink Comparison. If not, see <http://www.gnu.org/licenses/>.

import 'package:blink_comparison/core/settings/model.dart';
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';

import '../../locale.dart';
Expand Down Expand Up @@ -66,3 +67,12 @@ extension EncryptionPreferenceExtension on EncryptionPreference {
Never neverCase(Object type) {
throw ArgumentError('Unexpected case: $type');
}

extension CubitExt<T> on Cubit<T> {
void safeEmit(T state) {
if (!isClosed) {
// ignore: invalid_use_of_visible_for_testing_member, invalid_use_of_protected_member
emit(state);
}
}
}

0 comments on commit 23e4754

Please sign in to comment.