Files
TubeCards/lib/widgets/import/analyze_file/analyze_file_bloc.dart
friebetill 80f218097d Initial commit
Add Space version 2.0.1
2022-03-28 14:56:00 +02:00

57 lines
1.5 KiB
Dart

import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:injectable/injectable.dart';
import 'package:rxdart/rxdart.dart';
import '../../../../widgets/component/component_build_context.dart';
import '../../component/component_life_cycle_listener.dart';
import 'analyze_file_component.dart';
import 'analyze_file_view_model.dart';
/// BLoC for the [AnalyzeFileComponent].
@injectable
class AnalyzeFileBloc with ComponentBuildContext, ComponentLifecycleListener {
Stream<AnalyzeFileViewModel>? _viewModel;
Stream<AnalyzeFileViewModel>? get viewModel => _viewModel;
final _errorText = BehaviorSubject<String?>.seeded(null);
final _onOpenEmailAppTap = BehaviorSubject<AsyncCallback?>.seeded(null);
Stream<AnalyzeFileViewModel> createViewModel(
AnalyzeFileErrorCallback analyzeFile,
) {
if (_viewModel != null) {
return _viewModel!;
}
analyzeFile((errorText, [handleOpenEmailAppTap]) {
_errorText.add(errorText);
_onOpenEmailAppTap.add(handleOpenEmailAppTap);
});
return _viewModel = Rx.combineLatest2(
_errorText,
_onOpenEmailAppTap,
_createViewModel,
);
}
AnalyzeFileViewModel _createViewModel(
String? errorText,
AsyncCallback? handleOpenEmailAppTap,
) {
return AnalyzeFileViewModel(
errorText: errorText,
onOpenEmailAppTap: handleOpenEmailAppTap,
);
}
@override
void dispose() {
_errorText.close();
_onOpenEmailAppTap.close();
super.dispose();
}
}