chore(ui): Split the request BLoC into three files

This commit is contained in:
PapaTutuWawa 2023-08-04 23:32:38 +02:00
parent 6225ac65d9
commit 4323561774
4 changed files with 33 additions and 46 deletions

View File

@ -1,7 +1,10 @@
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:moxxyv2/i18n/strings.g.dart';
// TODO: Split this up into multiple files.
part 'request_bloc.freezed.dart';
part 'request_event.dart';
part 'request_state.dart';
enum Request {
notifications,
@ -18,47 +21,8 @@ enum Request {
}
}
abstract class RequestBlocEvent {}
class RequestsSetEvent extends RequestBlocEvent {
RequestsSetEvent(this.requests);
final List<Request> requests;
}
class NextRequestEvent extends RequestBlocEvent {}
class ResetRequestEvent extends RequestBlocEvent {}
class RequestBlocState {
const RequestBlocState({
required this.requests,
required this.currentIndex,
required this.shouldShow,
});
factory RequestBlocState.initial() =>
const RequestBlocState(requests: [], currentIndex: 0, shouldShow: false);
final bool shouldShow;
final List<Request> requests;
final int currentIndex;
RequestBlocState copyWith({
List<Request>? requests,
int? currentIndex,
bool? shouldShow,
}) {
return RequestBlocState(
requests: requests ?? this.requests,
currentIndex: currentIndex ?? this.currentIndex,
shouldShow: shouldShow ?? this.shouldShow,
);
}
}
class RequestBloc extends Bloc<RequestBlocEvent, RequestBlocState> {
RequestBloc() : super(RequestBlocState.initial()) {
class RequestBloc extends Bloc<RequestEvent, RequestState> {
RequestBloc() : super(const RequestState()) {
on<RequestsSetEvent>(_onRequestsSet);
on<NextRequestEvent>(_onNextRequest);
on<ResetRequestEvent>(_onReset);
@ -66,7 +30,7 @@ class RequestBloc extends Bloc<RequestBlocEvent, RequestBlocState> {
Future<void> _onRequestsSet(
RequestsSetEvent event,
Emitter<RequestBlocState> emit,
Emitter<RequestState> emit,
) async {
emit(
state.copyWith(
@ -79,7 +43,7 @@ class RequestBloc extends Bloc<RequestBlocEvent, RequestBlocState> {
Future<void> _onNextRequest(
NextRequestEvent event,
Emitter<RequestBlocState> emit,
Emitter<RequestState> emit,
) async {
if (state.currentIndex + 1 >= state.requests.length) {
return _onReset(ResetRequestEvent(), emit);
@ -94,7 +58,7 @@ class RequestBloc extends Bloc<RequestBlocEvent, RequestBlocState> {
Future<void> _onReset(
ResetRequestEvent event,
Emitter<RequestBlocState> emit,
Emitter<RequestState> emit,
) async {
emit(
state.copyWith(

View File

@ -0,0 +1,13 @@
part of 'request_bloc.dart';
abstract class RequestEvent {}
class RequestsSetEvent extends RequestEvent {
RequestsSetEvent(this.requests);
final List<Request> requests;
}
class NextRequestEvent extends RequestEvent {}
class ResetRequestEvent extends RequestEvent {}

View File

@ -0,0 +1,10 @@
part of 'request_bloc.dart';
@freezed
class RequestState with _$RequestState {
const factory RequestState({
@Default([]) List<Request> requests,
@Default(0) int currentIndex,
@Default(false) bool shouldShow,
}) = _RequestState;
}

View File

@ -14,7 +14,7 @@ class RequestDialog extends StatelessWidget {
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(textfieldRadiusRegular),
),
child: BlocConsumer<RequestBloc, RequestBlocState>(
child: BlocConsumer<RequestBloc, RequestState>(
listener: (_, state) {
// Automatically dismiss the dialog when we're done
if (!state.shouldShow) {