finished select period dialog design

This commit is contained in:
ashrafzarkanisala
2024-07-27 22:35:53 +03:00
parent 0cad30557d
commit 0783f8dacd
8 changed files with 541 additions and 53 deletions
@@ -0,0 +1,30 @@
import 'package:bloc/bloc.dart';
import 'package:syncrow_app/features/scene/bloc/effective_period/effect_period_event.dart';
import 'package:syncrow_app/features/scene/bloc/effective_period/effect_period_state.dart';
class EffectPeriodBloc extends Bloc<EffectPeriodEvent, EffectPeriodState> {
EffectPeriodBloc() : super(EffectPeriodState.initial()) {
on<SetPeriod>(_onSetPeriod);
on<ToggleDay>(_onToggleDay);
on<SetCustomTime>(_onSetCustomTime);
}
void _onSetPeriod(SetPeriod event, Emitter<EffectPeriodState> emit) {
emit(state.copyWith(selectedPeriod: event.period));
}
void _onToggleDay(ToggleDay event, Emitter<EffectPeriodState> emit) {
final days = List.of(state.selectedDays);
if (days.contains(event.day)) {
days.remove(event.day);
} else {
days.add(event.day);
}
emit(state.copyWith(selectedDays: days));
}
void _onSetCustomTime(SetCustomTime event, Emitter<EffectPeriodState> emit) {
emit(state.copyWith(
customStartTime: event.startTime, customEndTime: event.endTime));
}
}
@@ -0,0 +1,36 @@
import 'package:equatable/equatable.dart';
abstract class EffectPeriodEvent extends Equatable {
const EffectPeriodEvent();
@override
List<Object> get props => [];
}
class SetPeriod extends EffectPeriodEvent {
final String period;
const SetPeriod(this.period);
@override
List<Object> get props => [period];
}
class ToggleDay extends EffectPeriodEvent {
final String day;
const ToggleDay(this.day);
@override
List<Object> get props => [day];
}
class SetCustomTime extends EffectPeriodEvent {
final String startTime;
final String endTime;
const SetCustomTime(this.startTime, this.endTime);
@override
List<Object> get props => [startTime, endTime];
}
@@ -0,0 +1,42 @@
import 'package:equatable/equatable.dart';
class EffectPeriodState extends Equatable {
final String selectedPeriod;
final List<String> selectedDays;
final String? customStartTime;
final String? customEndTime;
const EffectPeriodState({
required this.selectedPeriod,
required this.selectedDays,
this.customStartTime,
this.customEndTime,
});
factory EffectPeriodState.initial() {
return const EffectPeriodState(
selectedPeriod: 'All Day',
selectedDays: [],
customStartTime: null,
customEndTime: null,
);
}
EffectPeriodState copyWith({
String? selectedPeriod,
List<String>? selectedDays,
String? customStartTime,
String? customEndTime,
}) {
return EffectPeriodState(
selectedPeriod: selectedPeriod ?? this.selectedPeriod,
selectedDays: selectedDays ?? this.selectedDays,
customStartTime: customStartTime ?? this.customStartTime,
customEndTime: customEndTime ?? this.customEndTime,
);
}
@override
List<Object?> get props =>
[selectedPeriod, selectedDays, customStartTime, customEndTime];
}