Bug fixes 3

This commit is contained in:
mohammad
2024-09-23 16:33:02 +03:00
parent 429009aefa
commit dfae04076f
14 changed files with 593 additions and 307 deletions

View File

@ -35,10 +35,12 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
on<OnClose>(_onClose); on<OnClose>(_onClose);
on<ToggleDaySelectionEvent>(toggleDaySelection); on<ToggleDaySelectionEvent>(toggleDaySelection);
on<ThreeGangSave>(saveSchedule); on<ScheduleSave>(saveSchedule);
on<GetScheduleEvent>(getSchedule); on<GetScheduleEvent>(getSchedule);
on<ToggleScheduleEvent>(toggleChange); on<ToggleScheduleEvent>(toggleChange);
on<DeleteScheduleEvent>(deleteSchedule); on<DeleteScheduleEvent>(deleteSchedule);
on<ToggleSelectedEvent>(toggleSelectedIndex);
on<ToggleCreateScheduleEvent>(toggleCreateSchedule);
} }
void _fetchOneGangStatus(InitialEvent event, Emitter<OneGangState> emit) async { void _fetchOneGangStatus(InitialEvent event, Emitter<OneGangState> emit) async {
@ -196,7 +198,7 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
]; ];
Future<void> saveSchedule( Future<void> saveSchedule(
ThreeGangSave event, ScheduleSave event,
Emitter<OneGangState> emit, Emitter<OneGangState> emit,
) async { ) async {
try { try {
@ -211,8 +213,9 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
days: selectedDays); days: selectedDays);
CustomSnackBar.displaySnackBar('Save Successfully'); CustomSnackBar.displaySnackBar('Save Successfully');
add(GetScheduleEvent()); add(GetScheduleEvent());
emit(ThreeGangSaveSchedule()); emit(SaveSchedule());
toggleCreateSchedule();
add(const ToggleCreateScheduleEvent(index:1 ));
} else { } else {
CustomSnackBar.displaySnackBar('Please select days'); CustomSnackBar.displaySnackBar('Please select days');
} }
@ -287,14 +290,23 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
} }
} }
void toggleCreateSchedule() { // void toggleCreateSchedule() {
emit(LoadingInitialState()); // emit(LoadingInitialState());
createSchedule = !createSchedule; // createSchedule = !createSchedule;
selectedDays.clear(); // selectedDays.clear();
selectedTime = DateTime.now(); // selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule)); // emit(UpdateCreateScheduleState(createSchedule));
emit(ChangeSlidingSegmentState(value: 1)); // emit(ChangeSlidingSegmentState(value: 1));
} // }
void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter<OneGangState> emit) {
emit(LoadingInitialState());
createSchedule = !createSchedule;
selectedDays.clear();
selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule));
}
bool toggleSchedule = true; bool toggleSchedule = true;
List<String> selectedDays = []; List<String> selectedDays = [];
@ -317,9 +329,9 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
int selectedTabIndex = 0; int selectedTabIndex = 0;
void toggleSelectedIndex(index) { void toggleSelectedIndex( ToggleSelectedEvent event, Emitter<OneGangState> emit) {
emit(LoadingInitialState()); emit(LoadingInitialState());
selectedTabIndex = index; selectedTabIndex =event.index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex)); emit(ChangeSlidingSegmentState(value: selectedTabIndex));
} }
} }

View File

@ -92,7 +92,7 @@ class OnClose extends OneGangEvent {}
//------------------- Schedule ----------=--------- //------------------- Schedule ----------=---------
class GetScheduleEvent extends OneGangEvent {} class GetScheduleEvent extends OneGangEvent {}
class ThreeGangSave extends OneGangEvent {} class ScheduleSave extends OneGangEvent {}
class ToggleScheduleEvent extends OneGangEvent { class ToggleScheduleEvent extends OneGangEvent {
final String id; final String id;
final bool toggle; final bool toggle;
@ -114,3 +114,19 @@ class DeleteScheduleEvent extends OneGangEvent {
@override @override
List<Object> get props => [id]; List<Object> get props => [id];
} }
class ToggleSelectedEvent extends OneGangEvent {
final int index;
const ToggleSelectedEvent({required this.index});
@override
List<Object> get props => [index];
}
class ToggleCreateScheduleEvent extends OneGangEvent {
final int index;
const ToggleCreateScheduleEvent({required this.index});
@override
List<Object> get props => [index];
}

View File

@ -77,7 +77,7 @@ class TimerRunInProgress extends OneGangState {
class TimerRunComplete extends OneGangState {} class TimerRunComplete extends OneGangState {}
class ThreeGangSaveSchedule extends OneGangState {} class SaveSchedule extends OneGangState {}
class IsToggleState extends OneGangState { class IsToggleState extends OneGangState {
final bool? onOff; final bool? onOff;

View File

@ -55,6 +55,9 @@ class ThreeGangBloc extends Bloc<ThreeGangEvent, ThreeGangState> {
on<GetScheduleEvent>(getSchedule); on<GetScheduleEvent>(getSchedule);
on<ToggleScheduleEvent>(toggleChange); on<ToggleScheduleEvent>(toggleChange);
on<DeleteScheduleEvent>(deleteSchedule); on<DeleteScheduleEvent>(deleteSchedule);
on<ToggleSelectedEvent>(toggleSelectedIndex);
on<ToggleCreateScheduleEvent>(toggleCreateSchedule);
} }
void _fetchThreeGangStatus(InitialEvent event, Emitter<ThreeGangState> emit) async { void _fetchThreeGangStatus(InitialEvent event, Emitter<ThreeGangState> emit) async {
@ -528,7 +531,7 @@ class ThreeGangBloc extends Bloc<ThreeGangEvent, ThreeGangState> {
CustomSnackBar.displaySnackBar('Save Successfully'); CustomSnackBar.displaySnackBar('Save Successfully');
add(GetScheduleEvent()); add(GetScheduleEvent());
emit(ThreeGangSaveSchedule()); emit(ThreeGangSaveSchedule());
toggleCreateSchedule(); add(const ToggleCreateScheduleEvent(index:1 ));
} else { } else {
CustomSnackBar.displaySnackBar('Please select days'); CustomSnackBar.displaySnackBar('Please select days');
} }
@ -603,23 +606,40 @@ class ThreeGangBloc extends Bloc<ThreeGangEvent, ThreeGangState> {
} }
} }
void toggleCreateSchedule() { // void toggleCreateSchedule() {
emit(LoadingInitialState()); // emit(LoadingInitialState());
createSchedule = !createSchedule; // createSchedule = !createSchedule;
selectedDays.clear(); // selectedDays.clear();
selectedTime = DateTime.now(); // selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule)); // emit(UpdateCreateScheduleState(createSchedule));
emit(ChangeSlidingSegmentState(value: 1)); // emit(ChangeSlidingSegmentState(value: 1));
} // }
int selectedTabIndex = 0;
void toggleSelectedIndex(index) {
// void toggleSelectedIndex(index) {
// emit(LoadingInitialState());
// selectedTabIndex = index;
// emit(ChangeSlidingSegmentState(value: selectedTabIndex));
// }
void toggleSelectedIndex( ToggleSelectedEvent event, Emitter<ThreeGangState> emit) {
emit(LoadingInitialState()); emit(LoadingInitialState());
selectedTabIndex = index; selectedTabIndex =event.index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex)); emit(ChangeSlidingSegmentState(value: selectedTabIndex));
} }
void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter<ThreeGangState> emit) {
emit(LoadingInitialState());
createSchedule = !createSchedule;
selectedDays.clear();
selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule));
}
int selectedTabIndex = 0;
bool toggleSchedule = true; bool toggleSchedule = true;
List<String> selectedDays = []; List<String> selectedDays = [];
bool createSchedule = false; bool createSchedule = false;

View File

@ -119,3 +119,20 @@ class DeleteScheduleEvent extends ThreeGangEvent {
@override @override
List<Object> get props => [id]; List<Object> get props => [id];
} }
class ToggleSelectedEvent extends ThreeGangEvent {
final int index;
const ToggleSelectedEvent({required this.index});
@override
List<Object> get props => [index];
}
class ToggleCreateScheduleEvent extends ThreeGangEvent {
final int index;
const ToggleCreateScheduleEvent({required this.index});
@override
List<Object> get props => [index];
}

View File

@ -35,7 +35,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
bool createSchedule = false; bool createSchedule = false;
List<ScheduleModel> listSchedule = []; List<ScheduleModel> listSchedule = [];
TwoGangBloc({required this.twoGangId, required this.switchCode}) : super(InitialState()) { TwoGangBloc({required this.twoGangId, required this.switchCode})
: super(InitialState()) {
on<InitialEvent>(_fetchTwoGangStatus); on<InitialEvent>(_fetchTwoGangStatus);
on<TwoGangUpdated>(_twoGangUpdated); on<TwoGangUpdated>(_twoGangUpdated);
on<ChangeFirstSwitchStatusEvent>(_changeFirstSwitch); on<ChangeFirstSwitchStatusEvent>(_changeFirstSwitch);
@ -54,28 +55,47 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
on<GetScheduleEvent>(getSchedule); on<GetScheduleEvent>(getSchedule);
on<ToggleScheduleEvent>(toggleRepeat); on<ToggleScheduleEvent>(toggleRepeat);
on<DeleteScheduleEvent>(deleteSchedule); on<DeleteScheduleEvent>(deleteSchedule);
on<ToggleSelectedEvent>(toggleSelectedIndex);
on<ToggleCreateScheduleEvent>(toggleCreateSchedule);
} }
DateTime? selectedTime = DateTime.now(); DateTime? selectedTime = DateTime.now();
void toggleCreateSchedule() { // void toggleCreateSchedule() {
// emit(LoadingInitialState());
// createSchedule = !createSchedule;
// selectedDays.clear();
// selectedTime = DateTime.now();
// emit(UpdateCreateScheduleState(createSchedule));
// emit(ChangeSlidingSegmentState(value: 1));
// }
int selectedTabIndex = 0;
// void toggleSelectedIndex(index) {
// emit(LoadingInitialState());
// selectedTabIndex = index;
// emit(ChangeSlidingSegmentState(value: selectedTabIndex));
// }
void toggleSelectedIndex(
ToggleSelectedEvent event, Emitter<TwoGangState> emit) {
emit(LoadingInitialState());
selectedTabIndex = event.index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
}
void toggleCreateSchedule(
ToggleCreateScheduleEvent event, Emitter<TwoGangState> emit) {
emit(LoadingInitialState()); emit(LoadingInitialState());
createSchedule = !createSchedule; createSchedule = !createSchedule;
selectedDays.clear(); selectedDays.clear();
selectedTime = DateTime.now(); selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule)); emit(UpdateCreateScheduleState(createSchedule));
emit(ChangeSlidingSegmentState(value: 1));
} }
int selectedTabIndex = 0; void _fetchTwoGangStatus(
InitialEvent event, Emitter<TwoGangState> emit) async {
void toggleSelectedIndex(index) {
emit(LoadingInitialState());
selectedTabIndex = index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
}
void _fetchTwoGangStatus(InitialEvent event, Emitter<TwoGangState> emit) async {
emit(LoadingInitialState()); emit(LoadingInitialState());
try { try {
twoGangGroup = event.groupScreen; twoGangGroup = event.groupScreen;
@ -87,7 +107,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
HomeCubit.getInstance().selectedSpace?.id ?? '', '2G'); HomeCubit.getInstance().selectedSpace?.id ?? '', '2G');
for (int i = 0; i < devicesList.length; i++) { for (int i = 0; i < devicesList.length; i++) {
var response = await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? ''); var response =
await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? '');
List<StatusModel> statusModelList = []; List<StatusModel> statusModelList = [];
for (var status in response['status']) { for (var status in response['status']) {
statusModelList.add(StatusModel.fromJson(status)); statusModelList.add(StatusModel.fromJson(status));
@ -110,7 +131,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
return true; return true;
}); });
} }
emit(UpdateGroupState(twoGangList: groupTwoGangList, allSwitches: allSwitchesOn)); emit(UpdateGroupState(
twoGangList: groupTwoGangList, allSwitches: allSwitchesOn));
} else { } else {
var response = await DevicesAPI.getDeviceStatus(twoGangId); var response = await DevicesAPI.getDeviceStatus(twoGangId);
List<StatusModel> statusModelList = []; List<StatusModel> statusModelList = [];
@ -129,18 +151,21 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
_listenToChanges() { _listenToChanges() {
try { try {
DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$twoGangId'); DatabaseReference ref =
FirebaseDatabase.instance.ref('device-status/$twoGangId');
Stream<DatabaseEvent> stream = ref.onValue; Stream<DatabaseEvent> stream = ref.onValue;
stream.listen((DatabaseEvent event) async { stream.listen((DatabaseEvent event) async {
if (_timer != null) { if (_timer != null) {
await Future.delayed(const Duration(seconds: 2)); await Future.delayed(const Duration(seconds: 2));
} }
Map<dynamic, dynamic> usersMap = event.snapshot.value as Map<dynamic, dynamic>; Map<dynamic, dynamic> usersMap =
event.snapshot.value as Map<dynamic, dynamic>;
List<StatusModel> statusList = []; List<StatusModel> statusList = [];
usersMap['status'].forEach((element) { usersMap['status'].forEach((element) {
statusList.add(StatusModel(code: element['code'], value: element['value'])); statusList
.add(StatusModel(code: element['code'], value: element['value']));
}); });
deviceStatus = TwoGangModel.fromJson(statusList); deviceStatus = TwoGangModel.fromJson(statusList);
@ -155,7 +180,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
emit(UpdateState(twoGangModel: deviceStatus)); emit(UpdateState(twoGangModel: deviceStatus));
} }
void _changeFirstSwitch(ChangeFirstSwitchStatusEvent event, Emitter<TwoGangState> emit) async { void _changeFirstSwitch(
ChangeFirstSwitchStatusEvent event, Emitter<TwoGangState> emit) async {
emit(LoadingNewSate(twoGangModel: deviceStatus)); emit(LoadingNewSate(twoGangModel: deviceStatus));
try { try {
deviceStatus.firstSwitch = !event.value; deviceStatus.firstSwitch = !event.value;
@ -181,7 +207,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
} }
} }
void _changeSecondSwitch(ChangeSecondSwitchStatusEvent event, Emitter<TwoGangState> emit) async { void _changeSecondSwitch(
ChangeSecondSwitchStatusEvent event, Emitter<TwoGangState> emit) async {
emit(LoadingNewSate(twoGangModel: deviceStatus)); emit(LoadingNewSate(twoGangModel: deviceStatus));
try { try {
deviceStatus.secondSwitch = !event.value; deviceStatus.secondSwitch = !event.value;
@ -217,11 +244,15 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
final response = await Future.wait([ final response = await Future.wait([
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: twoGangId, code: 'switch_1', value: deviceStatus.firstSwitch), deviceId: twoGangId,
code: 'switch_1',
value: deviceStatus.firstSwitch),
twoGangId), twoGangId),
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: twoGangId, code: 'switch_2', value: deviceStatus.secondSwitch), deviceId: twoGangId,
code: 'switch_2',
value: deviceStatus.secondSwitch),
twoGangId), twoGangId),
]); ]);
@ -244,11 +275,15 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
final response = await Future.wait([ final response = await Future.wait([
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: twoGangId, code: 'switch_1', value: deviceStatus.firstSwitch), deviceId: twoGangId,
code: 'switch_1',
value: deviceStatus.firstSwitch),
twoGangId), twoGangId),
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: twoGangId, code: 'switch_2', value: deviceStatus.secondSwitch), deviceId: twoGangId,
code: 'switch_2',
value: deviceStatus.secondSwitch),
twoGangId), twoGangId),
]); ]);
if (response.every((element) => !element['success'])) { if (response.every((element) => !element['success'])) {
@ -274,11 +309,15 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
final response = await Future.wait([ final response = await Future.wait([
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: groupTwoGangList[i].deviceId, code: 'switch_1', value: true), deviceId: groupTwoGangList[i].deviceId,
code: 'switch_1',
value: true),
groupTwoGangList[i].deviceId), groupTwoGangList[i].deviceId),
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: groupTwoGangList[i].deviceId, code: 'switch_2', value: true), deviceId: groupTwoGangList[i].deviceId,
code: 'switch_2',
value: true),
groupTwoGangList[i].deviceId), groupTwoGangList[i].deviceId),
]); ]);
@ -307,11 +346,15 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
final response = await Future.wait([ final response = await Future.wait([
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: groupTwoGangList[i].deviceId, code: 'switch_1', value: false), deviceId: groupTwoGangList[i].deviceId,
code: 'switch_1',
value: false),
groupTwoGangList[i].deviceId), groupTwoGangList[i].deviceId),
DevicesAPI.controlDevice( DevicesAPI.controlDevice(
DeviceControlModel( DeviceControlModel(
deviceId: groupTwoGangList[i].deviceId, code: 'switch_2', value: false), deviceId: groupTwoGangList[i].deviceId,
code: 'switch_2',
value: false),
groupTwoGangList[i].deviceId), groupTwoGangList[i].deviceId),
]); ]);
@ -327,17 +370,20 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
} }
} }
void _changeSliding(ChangeSlidingSegment event, Emitter<TwoGangState> emit) async { void _changeSliding(
ChangeSlidingSegment event, Emitter<TwoGangState> emit) async {
emit(ChangeSlidingSegmentState(value: event.value)); emit(ChangeSlidingSegmentState(value: event.value));
} }
void _setCounterValue(SetCounterValue event, Emitter<TwoGangState> emit) async { void _setCounterValue(
SetCounterValue event, Emitter<TwoGangState> emit) async {
emit(LoadingNewSate(twoGangModel: deviceStatus)); emit(LoadingNewSate(twoGangModel: deviceStatus));
int seconds = 0; int seconds = 0;
try { try {
seconds = event.duration.inSeconds; seconds = event.duration.inSeconds;
final response = await DevicesAPI.controlDevice( final response = await DevicesAPI.controlDevice(
DeviceControlModel(deviceId: twoGangId, code: event.deviceCode, value: seconds), DeviceControlModel(
deviceId: twoGangId, code: event.deviceCode, value: seconds),
twoGangId); twoGangId);
if (response['success'] ?? false) { if (response['success'] ?? false) {
@ -362,7 +408,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
} }
} }
void _getCounterValue(GetCounterEvent event, Emitter<TwoGangState> emit) async { void _getCounterValue(
GetCounterEvent event, Emitter<TwoGangState> emit) async {
emit(LoadingInitialState()); emit(LoadingInitialState());
try { try {
add(GetScheduleEvent()); add(GetScheduleEvent());
@ -449,7 +496,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
CustomSnackBar.displaySnackBar('Save Successfully'); CustomSnackBar.displaySnackBar('Save Successfully');
add(GetScheduleEvent()); add(GetScheduleEvent());
emit(TwoGangSaveSchedule()); emit(TwoGangSaveSchedule());
toggleCreateSchedule(); add(const ToggleCreateScheduleEvent(index: 1));
// toggleCreateSchedule();
} else { } else {
CustomSnackBar.displaySnackBar('Please select days'); CustomSnackBar.displaySnackBar('Please select days');
} }
@ -469,7 +517,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
deviceId: twoGangId, deviceId: twoGangId,
); );
List<dynamic> jsonData = response; List<dynamic> jsonData = response;
listSchedule = jsonData.map((item) => ScheduleModel.fromJson(item)).toList(); listSchedule =
jsonData.map((item) => ScheduleModel.fromJson(item)).toList();
emit(InitialState()); emit(InitialState());
} on DioException catch (e) { } on DioException catch (e) {
final errorData = e.response!.data; final errorData = e.response!.data;
@ -480,12 +529,13 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
int? getTimeStampWithoutSeconds(DateTime? dateTime) { int? getTimeStampWithoutSeconds(DateTime? dateTime) {
if (dateTime == null) return null; if (dateTime == null) return null;
DateTime dateTimeWithoutSeconds = DateTime dateTimeWithoutSeconds = DateTime(dateTime.year, dateTime.month,
DateTime(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute); dateTime.day, dateTime.hour, dateTime.minute);
return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000; return dateTimeWithoutSeconds.millisecondsSinceEpoch ~/ 1000;
} }
Future toggleRepeat(ToggleScheduleEvent event, Emitter<TwoGangState> emit) async { Future toggleRepeat(
ToggleScheduleEvent event, Emitter<TwoGangState> emit) async {
try { try {
emit(LoadingInitialState()); emit(LoadingInitialState());
final response = await DevicesAPI.changeSchedule( final response = await DevicesAPI.changeSchedule(
@ -504,7 +554,8 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
} }
} }
Future deleteSchedule(DeleteScheduleEvent event, Emitter<TwoGangState> emit) async { Future deleteSchedule(
DeleteScheduleEvent event, Emitter<TwoGangState> emit) async {
try { try {
emit(LoadingInitialState()); emit(LoadingInitialState());
final response = await DevicesAPI.deleteSchedule( final response = await DevicesAPI.deleteSchedule(

View File

@ -62,7 +62,7 @@ class GroupAllOffEvent extends TwoGangEvent {}
// two_gang_event.dart // two_gang_event.dart
class ToggleCreateScheduleEvent extends TwoGangEvent {} // class ToggleCreateScheduleEvent extends TwoGangEvent {}
@ -125,6 +125,20 @@ class TabChangedEvent extends TwoGangEvent {
} }
class ToggleSelectedEvent extends TwoGangEvent {
final int index;
const ToggleSelectedEvent({required this.index});
@override
List<Object> get props => [index];
}
class ToggleCreateScheduleEvent extends TwoGangEvent {
final int index;
const ToggleCreateScheduleEvent({required this.index});
@override
List<Object> get props => [index];
}

View File

@ -48,6 +48,9 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
on<TickTimer>(_onTickTimer); on<TickTimer>(_onTickTimer);
on<OnClose>(_onClose); on<OnClose>(_onClose);
on<SelectTimeEvent>(showTime); on<SelectTimeEvent>(showTime);
on<ToggleSelectedEvent>(toggleSelectedIndex);
on<ToggleCreateScheduleEvent>(toggleCreateSchedule);
} }
void _fetchWaterHeaterStatus(WaterHeaterInitial event, Emitter<WaterHeaterState> emit) async { void _fetchWaterHeaterStatus(WaterHeaterInitial event, Emitter<WaterHeaterState> emit) async {
@ -201,7 +204,7 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
CustomSnackBar.displaySnackBar('Save Successfully'); CustomSnackBar.displaySnackBar('Save Successfully');
add(GetScheduleEvent()); add(GetScheduleEvent());
emit(SaveSchedule()); emit(SaveSchedule());
toggleCreateSchedule(); add(const ToggleCreateScheduleEvent(index:1 ));
}else{ }else{
CustomSnackBar.displaySnackBar('Please select days'); CustomSnackBar.displaySnackBar('Please select days');
} }
@ -272,22 +275,43 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
} }
} }
void toggleCreateSchedule() { // void toggleCreateSchedule() {
emit(WHLoadingState()); // emit(WHLoadingState());
createSchedule = !createSchedule; // createSchedule = !createSchedule;
selectedDays.clear(); // selectedDays.clear();
selectedTime=DateTime.now(); // selectedTime=DateTime.now();
emit(UpdateCreateScheduleState(createSchedule)); // emit(UpdateCreateScheduleState(createSchedule));
} // }
void toggleCreateCirculate() { void toggleCreateCirculate() {
emit(WHLoadingState()); emit(WHLoadingState());
createCirculate = !createCirculate; createCirculate = !createCirculate;
selectedDays.clear(); selectedDays.clear();
selectedTime=DateTime.now(); selectedTime=DateTime.now();
emit(UpdateCreateScheduleState(createCirculate)); emit(UpdateCreateScheduleState(createCirculate));
} }
// void toggleSelectedIndex(index) {
// emit(WHLoadingState());
// selectedTabIndex = index;
// emit(ChangeSlidingSegmentState(value: selectedTabIndex));
// }
void toggleSelectedIndex( ToggleSelectedEvent event, Emitter<WaterHeaterState> emit) {
emit(WHLoadingState());
selectedTabIndex =event.index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
}
void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter<WaterHeaterState> emit) {
emit(WHLoadingState());
createSchedule = !createSchedule;
selectedDays.clear();
selectedTime = DateTime.now();
emit(UpdateCreateScheduleState(createSchedule));
}
Future<void> toggleDaySelection( Future<void> toggleDaySelection(
ToggleDaySelectionEvent event, ToggleDaySelectionEvent event,
Emitter<WaterHeaterState> emit, Emitter<WaterHeaterState> emit,
@ -303,11 +327,6 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
int selectedTabIndex = 0; int selectedTabIndex = 0;
void toggleSelectedIndex(index) {
emit(WHLoadingState());
selectedTabIndex = index;
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
}
showTime(SelectTimeEvent event, Emitter<WaterHeaterState> emit) async { showTime(SelectTimeEvent event, Emitter<WaterHeaterState> emit) async {
final TimeOfDay? timePicked = await showTimePicker( final TimeOfDay? timePicked = await showTimePicker(

View File

@ -98,4 +98,28 @@ class SelectTimeEvent extends WaterHeaterEvent {
const SelectTimeEvent({required this.context, required this.isEffective}); const SelectTimeEvent({required this.context, required this.isEffective});
@override @override
List<Object> get props => [context, isEffective]; List<Object> get props => [context, isEffective];
} }
class ToggleSelectedEvent extends WaterHeaterEvent {
final int index;
const ToggleSelectedEvent({required this.index});
@override
List<Object> get props => [index];
}
class ToggleCreateScheduleEvent extends WaterHeaterEvent {
final int index;
const ToggleCreateScheduleEvent({required this.index});
@override
List<Object> get props => [index];
}
class ToggleCreateCirculateEvent extends WaterHeaterEvent {
final int index;
const ToggleCreateCirculateEvent({required this.index});
@override
List<Object> get props => [index];
}

View File

@ -22,8 +22,9 @@ class OneGangScreen extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return BlocProvider( return BlocProvider(
create: (context) => OneGangBloc(switchCode: 'switch_1', oneGangId: device?.uuid ?? '') create: (context) =>
..add(const InitialEvent(groupScreen: false)), OneGangBloc(switchCode: 'switch_1', oneGangId: device?.uuid ?? '')
..add(const InitialEvent(groupScreen: false)),
child: BlocBuilder<OneGangBloc, OneGangState>( child: BlocBuilder<OneGangBloc, OneGangState>(
builder: (context, state) { builder: (context, state) {
OneGangModel oneGangModel = OneGangModel( OneGangModel oneGangModel = OneGangModel(
@ -44,15 +45,19 @@ class OneGangScreen extends StatelessWidget {
} }
return state is LoadingInitialState return state is LoadingInitialState
? const Center( ? const Center(
child: child: DefaultContainer(
DefaultContainer(width: 50, height: 50, child: CircularProgressIndicator()), width: 50,
height: 50,
child: CircularProgressIndicator()),
) )
: device == null : device == null
? OneGangList(oneGangList: groupOneGangModel, allSwitches: allSwitchesOn) ? OneGangList(
oneGangList: groupOneGangModel,
allSwitches: allSwitchesOn)
: RefreshIndicator( : RefreshIndicator(
onRefresh: () async { onRefresh: () async {
BlocProvider.of<OneGangBloc>(context) BlocProvider.of<OneGangBloc>(context).add(InitialEvent(
.add(InitialEvent(groupScreen: device != null ? false : true)); groupScreen: device != null ? false : true));
}, },
child: ListView( child: ListView(
children: [ children: [
@ -65,8 +70,10 @@ class OneGangScreen extends StatelessWidget {
const Expanded(child: SizedBox.shrink()), const Expanded(child: SizedBox.shrink()),
Expanded( Expanded(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment:
crossAxisAlignment: CrossAxisAlignment.center, MainAxisAlignment.spaceAround,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [ children: [
Column( Column(
children: [ children: [
@ -74,9 +81,12 @@ class OneGangScreen extends StatelessWidget {
threeGangSwitch: device!, threeGangSwitch: device!,
value: oneGangModel.firstSwitch, value: oneGangModel.firstSwitch,
action: () { action: () {
BlocProvider.of<OneGangBloc>(context).add( BlocProvider.of<OneGangBloc>(
ChangeFirstSwitchStatusEvent( context)
value: oneGangModel.firstSwitch)); .add(
ChangeFirstSwitchStatusEvent(
value: oneGangModel
.firstSwitch));
}, },
), ),
const SizedBox(height: 20), const SizedBox(height: 20),
@ -84,7 +94,8 @@ class OneGangScreen extends StatelessWidget {
width: 70, width: 70,
child: BodySmall( child: BodySmall(
text: " Entrance Light", text: " Entrance Light",
fontColor: ColorsManager.textPrimaryColor, fontColor: ColorsManager
.textPrimaryColor,
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
), ),
@ -96,31 +107,33 @@ class OneGangScreen extends StatelessWidget {
Center( Center(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment:
CrossAxisAlignment.center,
children: [ children: [
const SizedBox(
width: 20,
),
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Card( Card(
elevation: 3, elevation: 3,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(100), borderRadius:
BorderRadius.circular(100),
), ),
child: GestureDetector( child: GestureDetector(
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
PageRouteBuilder( PageRouteBuilder(
pageBuilder: pageBuilder: (context,
(context, animation1, animation2) => animation1,
TimerScheduleScreen( animation2) =>
switchCode: 'switch_1', TimerScheduleScreen(
device: device!, switchCode:
deviceCode: 'countdown_1', 'switch_1',
))); device: device!,
deviceCode:
'countdown_1',
)));
}, },
child: Stack( child: Stack(
alignment: Alignment.center, alignment: Alignment.center,
@ -130,7 +143,9 @@ class OneGangScreen extends StatelessWidget {
height: 60, height: 60,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.grey[300], color: Colors.grey[300],
borderRadius: BorderRadius.circular(100), borderRadius:
BorderRadius.circular(
100),
), ),
), ),
Container( Container(
@ -138,13 +153,15 @@ class OneGangScreen extends StatelessWidget {
height: 40, height: 40,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: Colors.white,
borderRadius: BorderRadius.circular(100), borderRadius:
BorderRadius.circular(
100),
), ),
child: Center( child: Center(
child: Icon( child: Icon(
Icons.access_time, Icons.access_time,
color: color: ColorsManager
ColorsManager.primaryColorWithOpacity, .primaryColorWithOpacity,
size: 25, size: 25,
), ),
), ),
@ -157,7 +174,8 @@ class OneGangScreen extends StatelessWidget {
BodySmall( BodySmall(
text: "Timer", text: "Timer",
style: context.bodyMedium.copyWith( style: context.bodyMedium.copyWith(
color: ColorsManager.textPrimaryColor, color: ColorsManager
.textPrimaryColor,
), ),
), ),
], ],

View File

@ -17,16 +17,15 @@ import 'package:syncrow_app/utils/context_extension.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart'; import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
import 'package:syncrow_app/utils/resource_manager/font_manager.dart'; import 'package:syncrow_app/utils/resource_manager/font_manager.dart';
class TimerScheduleScreen extends StatelessWidget { class TimerScheduleScreen extends StatelessWidget {
final DeviceModel device; final DeviceModel device;
final String deviceCode; final String deviceCode;
final String switchCode; final String switchCode;
const TimerScheduleScreen( const TimerScheduleScreen(
{required this.device, {required this.device,
required this.deviceCode, required this.deviceCode,
required this.switchCode, required this.switchCode,
super.key}); super.key});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -37,9 +36,9 @@ class TimerScheduleScreen extends StatelessWidget {
), ),
child: BlocProvider( child: BlocProvider(
create: (context) => create: (context) =>
OneGangBloc(switchCode: switchCode, oneGangId: device.uuid ?? '') OneGangBloc(switchCode: switchCode, oneGangId: device.uuid ?? '')
..add(GetCounterEvent(deviceCode: deviceCode)) ..add(GetCounterEvent(deviceCode: deviceCode))
..add(GetScheduleEvent()), ..add(GetScheduleEvent()),
child: BlocBuilder<OneGangBloc, OneGangState>( child: BlocBuilder<OneGangBloc, OneGangState>(
builder: (context, state) { builder: (context, state) {
final oneGangBloc = BlocProvider.of<OneGangBloc>(context); final oneGangBloc = BlocProvider.of<OneGangBloc>(context);
@ -64,7 +63,7 @@ class TimerScheduleScreen extends StatelessWidget {
}, },
child: DefaultTabController( child: DefaultTabController(
length: 2, length: 2,
child: DefaultScaffold( child: DefaultScaffold(
appBar: AppBar( appBar: AppBar(
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
centerTitle: true, centerTitle: true,
@ -74,175 +73,211 @@ class TimerScheduleScreen extends StatelessWidget {
fontWeight: FontsManager.bold, fontWeight: FontsManager.bold,
), ),
actions: [ actions: [
oneGangBloc.createSchedule == true ? oneGangBloc.createSchedule == true
TextButton( ? TextButton(
onPressed: () { onPressed: () {
oneGangBloc.add(ThreeGangSave()); oneGangBloc.add(ScheduleSave());
}, },
child: const Text('Save') child: const Text('Save'))
) : : oneGangBloc.selectedTabIndex == 1
oneGangBloc.selectedTabIndex==1? IconButton( ? IconButton(
onPressed: () { onPressed: () {
oneGangBloc.toggleCreateSchedule(); // oneGangBloc.toggleCreateSchedule();
}, oneGangBloc.add(
icon: const Icon(Icons.add), const ToggleCreateScheduleEvent(
):SizedBox(), index: 1));
},
icon: const Icon(Icons.add),
)
: const SizedBox(),
], ],
), ),
child: child: state is LoadingInitialState
state is LoadingInitialState? ? const Center(child: CircularProgressIndicator())
const Center(child: CircularProgressIndicator()): : Column(
Column(
children: [
Container(
width: MediaQuery.of(context).size.width,
decoration: const ShapeDecoration(
color: ColorsManager.onPrimaryColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(30)),
),
),
child: TabBar(
onTap: (value) {
if(value==0){
if(oneGangBloc.createSchedule == true){
oneGangBloc.toggleCreateSchedule();
}
oneGangBloc.toggleSelectedIndex(0);
}else{
oneGangBloc.toggleSelectedIndex(1);
}
},
indicatorColor: Colors.white, // Customize the indicator
dividerHeight: 0,
indicatorSize: TabBarIndicatorSize.tab,
indicator: const ShapeDecoration(
color: ColorsManager.slidingBlueColor,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.all(Radius.circular(20)),
),
),
tabs: [
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: BodySmall(
text: 'Countdown',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
Tab(
child: Container(
padding: const EdgeInsets.symmetric(vertical: 10),
child: Text(
'Schedule',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
],
),
),
Expanded(
child: TabBarView(
children: [ children: [
Center( Container(
child: Container( width: MediaQuery.of(context).size.width,
child: Column( decoration: const ShapeDecoration(
mainAxisAlignment: MainAxisAlignment.center, color: ColorsManager.onPrimaryColor,
children: [ shape: RoundedRectangleBorder(
countNum > 0 borderRadius:
? BodyLarge( BorderRadius.all(Radius.circular(30)),
text: _formatDuration(countNum),
fontColor:
ColorsManager.slidingBlueColor,
fontSize: 40,
)
: CupertinoTimerPicker(
mode: CupertinoTimerPickerMode.hm,
onTimerDurationChanged:
(Duration newDuration) {
duration = newDuration;
},
),
GestureDetector(
onTap: () {
if (state is LoadingNewSate) {
return;
}
if (countNum > 0) {
oneGangBloc.add(SetCounterValue(
deviceCode: deviceCode,
duration: Duration.zero));
} else if (duration != Duration.zero) {
oneGangBloc.add(SetCounterValue(
deviceCode: deviceCode,
duration: duration));
}
},
child: SvgPicture.asset(countNum > 0
? Assets.pauseIcon
: Assets.playIcon)),
],
), ),
), ),
), child: TabBar(
Column( onTap: (value) {
mainAxisAlignment:oneGangBloc.listSchedule.isNotEmpty? if (value == 0) {
MainAxisAlignment.start:MainAxisAlignment.center, if (oneGangBloc.createSchedule ==
children: [ true) {
SizedBox( // oneGangBloc.toggleCreateSchedule();
child: oneGangBloc.createSchedule == true ? oneGangBloc.add(
CreateSchedule( const ToggleCreateScheduleEvent(
onToggleChanged: (bool isOn) { index: 0));
oneGangBloc.toggleSchedule = isOn; }
}, oneGangBloc.add(
onDateTimeChanged: (DateTime dateTime) { const ToggleSelectedEvent(
oneGangBloc.selectedTime=dateTime; index: 0));
}, } else {
days: oneGangBloc.days, oneGangBloc.add(
selectDays: (List<String> selectedDays) { const ToggleSelectedEvent(
oneGangBloc.selectedDays = selectedDays; index: 1));
}, }
) },
: indicatorColor:
Padding( Colors.white, // Customize the indicator
padding: const EdgeInsets.only(top: 10), dividerHeight: 0,
child: ScheduleListView( indicatorSize: TabBarIndicatorSize.tab,
listSchedule: oneGangBloc.listSchedule, // Pass the schedule list here indicator: const ShapeDecoration(
onDismissed: (scheduleId) { color: ColorsManager.slidingBlueColor,
oneGangBloc.listSchedule.removeWhere((schedule) => schedule.scheduleId == scheduleId); shape: RoundedRectangleBorder(
oneGangBloc.add(DeleteScheduleEvent(id: scheduleId)); borderRadius: BorderRadius.all(
}, Radius.circular(20)),
onToggleSchedule: (scheduleId, isEnabled) {
oneGangBloc.add(ToggleScheduleEvent(
id: scheduleId,
toggle: isEnabled,
));
},
),
), ),
), ),
], tabs: [
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: BodySmall(
text: 'Countdown',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
Tab(
child: Container(
padding: const EdgeInsets.symmetric(
vertical: 10),
child: Text(
'Schedule',
style: context.bodySmall.copyWith(
color: ColorsManager.blackColor,
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
),
),
],
),
),
Expanded(
child: TabBarView(
children: [
Center(
child: Container(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
countNum > 0
? BodyLarge(
text: _formatDuration(
countNum),
fontColor: ColorsManager
.slidingBlueColor,
fontSize: 40,
)
: CupertinoTimerPicker(
mode:
CupertinoTimerPickerMode
.hm,
onTimerDurationChanged:
(Duration
newDuration) {
duration = newDuration;
},
),
GestureDetector(
onTap: () {
if (state
is LoadingNewSate) {
return;
}
if (countNum > 0) {
oneGangBloc.add(
SetCounterValue(
deviceCode:
deviceCode,
duration: Duration
.zero));
} else if (duration !=
Duration.zero) {
oneGangBloc.add(
SetCounterValue(
deviceCode:
deviceCode,
duration:
duration));
}
},
child: SvgPicture.asset(
countNum > 0
? Assets.pauseIcon
: Assets.playIcon)),
],
),
),
),
SizedBox(
child: oneGangBloc.createSchedule ==
true
? CreateSchedule(
onToggleChanged: (bool isOn) {
oneGangBloc.toggleSchedule =
isOn;
},
onDateTimeChanged:
(DateTime dateTime) {
oneGangBloc.selectedTime =
dateTime;
},
days: oneGangBloc.days,
selectDays: (List<String>
selectedDays) {
oneGangBloc.selectedDays =
selectedDays;
},
)
: Padding(
padding: const EdgeInsets.only(
top: 10),
child: ScheduleListView(
listSchedule: oneGangBloc
.listSchedule, // Pass the schedule list here
onDismissed: (scheduleId) {
oneGangBloc.listSchedule
.removeWhere((schedule) =>
schedule
.scheduleId ==
scheduleId);
oneGangBloc.add(
DeleteScheduleEvent(
id: scheduleId));
},
onToggleSchedule:
(scheduleId, isEnabled) {
oneGangBloc.add(
ToggleScheduleEvent(
id: scheduleId,
toggle: isEnabled,
));
},
),
),
),
],
),
), ),
], ],
), ),
), )));
],
),
))
);
}, },
), ),
), ),

View File

@ -82,11 +82,14 @@ class TimerScheduleScreen extends StatelessWidget {
: threeGangBloc.selectedTabIndex == 1 : threeGangBloc.selectedTabIndex == 1
? IconButton( ? IconButton(
onPressed: () { onPressed: () {
threeGangBloc.toggleCreateSchedule(); // oneGangBloc.toggleCreateSchedule();
threeGangBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
}, },
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
) )
: SizedBox(), : const SizedBox(),
], ],
), ),
child: state is LoadingInitialState child: state is LoadingInitialState
@ -103,15 +106,34 @@ class TimerScheduleScreen extends StatelessWidget {
), ),
), ),
child: TabBar( child: TabBar(
// onTap: (value) {
// if (value == 0) {
// if (threeGangBloc.createSchedule ==
// true) {
// threeGangBloc.toggleCreateSchedule();
// }
// threeGangBloc.toggleSelectedIndex(0);
// } else {
// threeGangBloc.toggleSelectedIndex(1);
// }
// },
onTap: (value) { onTap: (value) {
if (value == 0) { if (value == 0) {
if (threeGangBloc.createSchedule == if (threeGangBloc.createSchedule ==
true) { true) {
threeGangBloc.toggleCreateSchedule(); // oneGangBloc.toggleCreateSchedule();
threeGangBloc.add(
const ToggleCreateScheduleEvent(
index: 0));
} }
threeGangBloc.toggleSelectedIndex(0); threeGangBloc.add(
const ToggleSelectedEvent(
index: 0));
} else { } else {
threeGangBloc.toggleSelectedIndex(1); threeGangBloc.add(
const ToggleSelectedEvent(
index: 1));
} }
}, },
indicatorColor: Colors.white, indicatorColor: Colors.white,

View File

@ -82,11 +82,14 @@ class TimerScheduleScreen extends StatelessWidget {
: twoGangBloc.selectedTabIndex == 1 : twoGangBloc.selectedTabIndex == 1
? IconButton( ? IconButton(
onPressed: () { onPressed: () {
twoGangBloc.toggleCreateSchedule(); // oneGangBloc.toggleCreateSchedule();
twoGangBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
}, },
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
) )
: SizedBox(), : const SizedBox(),
], ],
), ),
child: state is LoadingInitialState child: state is LoadingInitialState
@ -104,15 +107,21 @@ class TimerScheduleScreen extends StatelessWidget {
), ),
child: TabBar( child: TabBar(
onTap: (value) { onTap: (value) {
print(value);
if (value == 0) { if (value == 0) {
if (twoGangBloc.createSchedule == if (twoGangBloc.createSchedule ==
true) { true) {
twoGangBloc.toggleCreateSchedule(); // oneGangBloc.toggleCreateSchedule();
twoGangBloc.add(
const ToggleCreateScheduleEvent(
index: 0));
} }
twoGangBloc.toggleSelectedIndex(0); twoGangBloc.add(
const ToggleSelectedEvent(
index: 0));
} else { } else {
twoGangBloc.toggleSelectedIndex(1); twoGangBloc.add(
const ToggleSelectedEvent(
index: 1));
} }
}, },
indicatorColor: indicatorColor:
@ -243,12 +252,20 @@ class TimerScheduleScreen extends StatelessWidget {
children: [ children: [
Expanded( Expanded(
child: ScheduleListView( child: ScheduleListView(
listSchedule: twoGangBloc.listSchedule, // Pass the schedule list here listSchedule: twoGangBloc
onDismissed:(scheduleId) { .listSchedule, // Pass the schedule list here
twoGangBloc .listSchedule onDismissed:
.removeWhere( (schedule) => schedule .scheduleId == scheduleId); (scheduleId) {
twoGangBloc
.listSchedule
.removeWhere(
(schedule) =>
schedule
.scheduleId ==
scheduleId);
twoGangBloc.add( twoGangBloc.add(
DeleteScheduleEvent( id: scheduleId)); DeleteScheduleEvent(
id: scheduleId));
}, },
onToggleSchedule: onToggleSchedule:
(scheduleId, (scheduleId,

View File

@ -86,7 +86,10 @@ class WHTimerScheduleScreen extends StatelessWidget {
: waterHeaterBloc.selectedTabIndex == 1 : waterHeaterBloc.selectedTabIndex == 1
? IconButton( ? IconButton(
onPressed: () { onPressed: () {
waterHeaterBloc.toggleCreateSchedule(); // waterHeaterBloc.toggleCreateSchedule();
waterHeaterBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
}, },
icon: const Icon(Icons.add), icon: const Icon(Icons.add),
) )
@ -129,27 +132,45 @@ class WHTimerScheduleScreen extends StatelessWidget {
if (value == 0) { if (value == 0) {
if (waterHeaterBloc.createSchedule == if (waterHeaterBloc.createSchedule ==
true) { true) {
waterHeaterBloc // waterHeaterBloc
.toggleCreateSchedule(); // .toggleCreateSchedule();
waterHeaterBloc.add(
const ToggleCreateScheduleEvent(
index: 1));
} }
waterHeaterBloc waterHeaterBloc.add(
.toggleSelectedIndex(value); ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
} else if (value == 2) { } else if (value == 2) {
if (waterHeaterBloc.createCirculate == if (waterHeaterBloc.createCirculate ==
true) { true) {
waterHeaterBloc waterHeaterBloc.add(
.toggleCreateCirculate(); ToggleCreateCirculateEvent(
index: value));
// waterHeaterBloc
// .toggleCreateCirculate();
} }
waterHeaterBloc waterHeaterBloc.add(
.toggleSelectedIndex(value); ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
} else { } else {
if (waterHeaterBloc.createSchedule == if (waterHeaterBloc.createSchedule ==
true) { true) {
waterHeaterBloc waterHeaterBloc.add(
.toggleCreateSchedule(); ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleCreateSchedule();
} }
waterHeaterBloc waterHeaterBloc.add(
.toggleSelectedIndex(value); ToggleSelectedEvent(
index: value));
// waterHeaterBloc
// .toggleSelectedIndex(value);
} }
}, },
indicatorColor: Colors.white, indicatorColor: Colors.white,