mirror of
https://github.com/SyncrowIOT/syncrow-app.git
synced 2025-11-26 10:54:55 +00:00
disconnect real-time to some devices
This commit is contained in:
@ -73,7 +73,7 @@ class ACsBloc extends Bloc<AcsEvent, AcsState> {
|
|||||||
AcStatusModel.fromJson(response['productUuid'], statusModelList);
|
AcStatusModel.fromJson(response['productUuid'], statusModelList);
|
||||||
emit(GetAcStatusState(acStatusModel: deviceStatus));
|
emit(GetAcStatusState(acStatusModel: deviceStatus));
|
||||||
Future.delayed(const Duration(milliseconds: 500));
|
Future.delayed(const Duration(milliseconds: 500));
|
||||||
_listenToChanges();
|
_listenToChanges(acId);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(AcsFailedState(errorMessage: e.toString()));
|
emit(AcsFailedState(errorMessage: e.toString()));
|
||||||
@ -83,7 +83,7 @@ class ACsBloc extends Bloc<AcsEvent, AcsState> {
|
|||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
|
||||||
void _listenToChanges() {
|
void _listenToChanges(acId) {
|
||||||
try {
|
try {
|
||||||
_streamSubscription?.cancel();
|
_streamSubscription?.cancel();
|
||||||
DatabaseReference ref =
|
DatabaseReference ref =
|
||||||
@ -125,6 +125,7 @@ class ACsBloc extends Bloc<AcsEvent, AcsState> {
|
|||||||
HomeCubit.getInstance().selectedSpace?.id ?? '', 'AC');
|
HomeCubit.getInstance().selectedSpace?.id ?? '', 'AC');
|
||||||
|
|
||||||
for (int i = 0; i < devicesList.length; i++) {
|
for (int i = 0; i < devicesList.length; i++) {
|
||||||
|
_listenToChanges(devicesList[i].uuid);
|
||||||
var response =
|
var response =
|
||||||
await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? '');
|
await DevicesAPI.getDeviceStatus(devicesList[i].uuid ?? '');
|
||||||
List<StatusModel> statusModelList = [];
|
List<StatusModel> statusModelList = [];
|
||||||
@ -134,6 +135,7 @@ class ACsBloc extends Bloc<AcsEvent, AcsState> {
|
|||||||
deviceStatusList.add(
|
deviceStatusList.add(
|
||||||
AcStatusModel.fromJson(response['productUuid'], statusModelList));
|
AcStatusModel.fromJson(response['productUuid'], statusModelList));
|
||||||
}
|
}
|
||||||
|
|
||||||
_setAllAcsTempsAndSwitches();
|
_setAllAcsTempsAndSwitches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -79,28 +79,6 @@ class CeilingSensorBloc extends Bloc<CeilingSensorEvent, CeilingSensorState> {
|
|||||||
return super.close();
|
return super.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
|
||||||
// DatabaseReference ref =
|
|
||||||
// FirebaseDatabase.instance.ref('device-status/$deviceId');
|
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) {
|
|
||||||
// Map<dynamic, dynamic> usersMap =
|
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
// List<StatusModel> statusList = [];
|
|
||||||
|
|
||||||
// usersMap['status'].forEach((element) {
|
|
||||||
// statusList
|
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// deviceStatus = CeilingSensorModel.fromJson(statusList);
|
|
||||||
// add(CeilingSensorUpdated());
|
|
||||||
// });
|
|
||||||
// } catch (_) {}
|
|
||||||
// }
|
|
||||||
|
|
||||||
_onCeilingSensorUpdated(
|
_onCeilingSensorUpdated(
|
||||||
CeilingSensorUpdated event, Emitter<CeilingSensorState> emit) {
|
CeilingSensorUpdated event, Emitter<CeilingSensorState> emit) {
|
||||||
emit(UpdateState(ceilingSensorModel: deviceStatus));
|
emit(UpdateState(ceilingSensorModel: deviceStatus));
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/curtain_bloc/curtain_event.dart';
|
import 'package:syncrow_app/features/devices/bloc/curtain_bloc/curtain_event.dart';
|
||||||
@ -172,7 +170,7 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
|
|||||||
openPercentage = double.tryParse(statusModelList[1].value.toString())!;
|
openPercentage = double.tryParse(statusModelList[1].value.toString())!;
|
||||||
curtainWidth = 270 - (openPercentage / 100) * curtainOpeningSpace;
|
curtainWidth = 270 - (openPercentage / 100) * curtainOpeningSpace;
|
||||||
blindHeight = 310 - (openPercentage / 100) * blindOpeningSpace;
|
blindHeight = 310 - (openPercentage / 100) * blindOpeningSpace;
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
emit(CurtainsOpening(
|
emit(CurtainsOpening(
|
||||||
curtainWidth: curtainWidth,
|
curtainWidth: curtainWidth,
|
||||||
blindHeight: blindHeight,
|
blindHeight: blindHeight,
|
||||||
@ -183,61 +181,38 @@ class CurtainBloc extends Bloc<CurtainEvent, CurtainState> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Real-time Database
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
Timer? _timer;
|
// Timer? _timer;
|
||||||
|
// void _listenToChanges() {
|
||||||
void _listenToChanges() {
|
|
||||||
try {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$curtainId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = CurtainModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
// try {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
// DatabaseReference ref =
|
// DatabaseReference ref =
|
||||||
// FirebaseDatabase.instance.ref('device-status/$curtainId');
|
// FirebaseDatabase.instance.ref('device-status/$curtainId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) {
|
// _streamSubscription = stream.listen((DatabaseEvent event) async {
|
||||||
|
// if (_timer != null) {
|
||||||
|
// await Future.delayed(const Duration(seconds: 2));
|
||||||
|
// }
|
||||||
// Map<dynamic, dynamic> usersMap =
|
// Map<dynamic, dynamic> usersMap =
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
// event.snapshot.value as Map<dynamic, dynamic>;
|
||||||
// List<StatusModel> statusList = [];
|
// List<StatusModel> statusList = [];
|
||||||
|
|
||||||
// usersMap['status'].forEach((element) {
|
// usersMap['status'].forEach((element) {
|
||||||
// statusList
|
// statusList
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// deviceStatus = CurtainModel.fromJson(statusList);
|
// deviceStatus = CurtainModel.fromJson(statusList);
|
||||||
|
// if (!isClosed) {}
|
||||||
// });
|
// });
|
||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
|
// _streamSubscription = null;
|
||||||
|
// return super.close();
|
||||||
|
// }
|
||||||
|
|
||||||
List<GroupCurtainModel> groupList = [];
|
List<GroupCurtainModel> groupList = [];
|
||||||
bool allSwitchesOn = true;
|
bool allSwitchesOn = true;
|
||||||
|
|||||||
@ -84,7 +84,7 @@ class DevicesCubit extends Cubit<DevicesState> {
|
|||||||
}
|
}
|
||||||
Map<dynamic, dynamic> usersMap =
|
Map<dynamic, dynamic> usersMap =
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
event.snapshot.value as Map<dynamic, dynamic>;
|
||||||
print('object-----${usersMap['status']}');
|
//print('object-----${usersMap['status']}');
|
||||||
List<StatusModel> statusList = [];
|
List<StatusModel> statusList = [];
|
||||||
usersMap['status'].forEach((element) {
|
usersMap['status'].forEach((element) {
|
||||||
statusList
|
statusList
|
||||||
@ -456,8 +456,9 @@ class DevicesCubit extends Cubit<DevicesState> {
|
|||||||
);
|
);
|
||||||
allDevices = devices;
|
allDevices = devices;
|
||||||
for (var deviceId in allDevices) {
|
for (var deviceId in allDevices) {
|
||||||
|
if (deviceId.type == "3G" || deviceId.type == "AC") {
|
||||||
_listenToChanges(deviceId.uuid);
|
_listenToChanges(deviceId.uuid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
emitSafe(GetDevicesSuccess(allDevices));
|
emitSafe(GetDevicesSuccess(allDevices));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_event.dart';
|
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_event.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_state.dart';
|
import 'package:syncrow_app/features/devices/bloc/door_sensor_bloc/door_sensor_state.dart';
|
||||||
@ -21,7 +20,6 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
|
|||||||
on<ToggleClosingReminderEvent>(_toggleClosingReminder);
|
on<ToggleClosingReminderEvent>(_toggleClosingReminder);
|
||||||
on<ToggleDoorAlarmEvent>(_toggleDoorAlarm);
|
on<ToggleDoorAlarmEvent>(_toggleDoorAlarm);
|
||||||
}
|
}
|
||||||
Timer? _timer;
|
|
||||||
bool lowBattery = false;
|
bool lowBattery = false;
|
||||||
bool closingReminder = false;
|
bool closingReminder = false;
|
||||||
bool doorAlarm = false;
|
bool doorAlarm = false;
|
||||||
@ -42,7 +40,7 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
|
|||||||
);
|
);
|
||||||
emit(UpdateState(doorSensor: deviceStatus));
|
emit(UpdateState(doorSensor: deviceStatus));
|
||||||
Future.delayed(const Duration(milliseconds: 500));
|
Future.delayed(const Duration(milliseconds: 500));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(DoorSensorFailedState(errorMessage: e.toString()));
|
emit(DoorSensorFailedState(errorMessage: e.toString()));
|
||||||
return;
|
return;
|
||||||
@ -138,23 +136,27 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
|
|||||||
String errorMessage = errorData['message'];
|
String errorMessage = errorData['message'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// real-time database
|
||||||
// _listenToChanges() {
|
// Timer? _timer;
|
||||||
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
// void _listenToChanges() {
|
||||||
// try {
|
// try {
|
||||||
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$DSId');
|
// _streamSubscription?.cancel();
|
||||||
|
// DatabaseReference ref =
|
||||||
|
// FirebaseDatabase.instance.ref('device-status/$DSId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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: true));
|
// statusList
|
||||||
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// deviceStatus = DoorSensorModel.fromJson(statusList);
|
// deviceStatus = DoorSensorModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// if (!isClosed) {
|
||||||
// add(
|
// add(
|
||||||
@ -165,40 +167,10 @@ class DoorSensorBloc extends Bloc<DoorSensorEvent, DoorSensorState> {
|
|||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
void _listenToChanges() {
|
// _streamSubscription?.cancel();
|
||||||
try {
|
// _streamSubscription = null;
|
||||||
_streamSubscription?.cancel();
|
// return super.close();
|
||||||
DatabaseReference ref =
|
// }
|
||||||
FirebaseDatabase.instance.ref('device-status/$DSId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = DoorSensorModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {
|
|
||||||
add(
|
|
||||||
DoorSensorSwitch(switchD: deviceStatus.doorContactState),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -231,7 +231,7 @@ class FourSceneBloc extends Bloc<FourSceneEvent, FourSceneState> {
|
|||||||
deviceStatus = FourSceneModelState.fromJson(
|
deviceStatus = FourSceneModelState.fromJson(
|
||||||
statusModelList,
|
statusModelList,
|
||||||
);
|
);
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
add(const FourSceneSwitchInitial());
|
add(const FourSceneSwitchInitial());
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FourSceneFailedState(errorMessage: e.toString()));
|
emit(FourSceneFailedState(errorMessage: e.toString()));
|
||||||
@ -329,33 +329,33 @@ class FourSceneBloc extends Bloc<FourSceneEvent, FourSceneState> {
|
|||||||
}).toList();
|
}).toList();
|
||||||
emit(SearchResultsState());
|
emit(SearchResultsState());
|
||||||
}
|
}
|
||||||
|
// Real-time database
|
||||||
|
// Timer? _timer;
|
||||||
|
// _listenToChanges() {
|
||||||
|
// try {
|
||||||
|
// DatabaseReference ref =
|
||||||
|
// FirebaseDatabase.instance.ref('device-status/$fourSceneId');
|
||||||
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
Timer? _timer;
|
// stream.listen((DatabaseEvent event) async {
|
||||||
_listenToChanges() {
|
// if (_timer != null) {
|
||||||
try {
|
// await Future.delayed(const Duration(seconds: 2));
|
||||||
DatabaseReference ref =
|
// }
|
||||||
FirebaseDatabase.instance.ref('device-status/$fourSceneId');
|
// Map<dynamic, dynamic> usersMap =
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
// event.snapshot.value as Map<dynamic, dynamic>;
|
||||||
|
// List<StatusModel> statusList = [];
|
||||||
|
|
||||||
stream.listen((DatabaseEvent event) async {
|
// usersMap['status'].forEach((element) {
|
||||||
if (_timer != null) {
|
// statusList.add(StatusModel(code: element['code'], value: true));
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
// });
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
|
|
||||||
usersMap['status'].forEach((element) {
|
// deviceStatus = FourSceneModelState.fromJson(statusList);
|
||||||
statusList.add(StatusModel(code: element['code'], value: true));
|
// // if (!isClosed) {
|
||||||
});
|
// // add(
|
||||||
|
// // DoorSensorSwitch(switchD: deviceStatus.doorContactState),
|
||||||
deviceStatus = FourSceneModelState.fromJson(statusList);
|
// // );
|
||||||
// if (!isClosed) {
|
// // }
|
||||||
// add(
|
// });
|
||||||
// DoorSensorSwitch(switchD: deviceStatus.doorContactState),
|
// } catch (_) {}
|
||||||
// );
|
// }
|
||||||
// }
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/garage_door_bloc/garage_door_event.dart';
|
import 'package:syncrow_app/features/devices/bloc/garage_door_bloc/garage_door_event.dart';
|
||||||
@ -42,7 +41,6 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorSensorState> {
|
|||||||
on<ChangeFirstWizardSwitchStatusEvent>(_changeFirstWizardSwitch);
|
on<ChangeFirstWizardSwitchStatusEvent>(_changeFirstWizardSwitch);
|
||||||
on<ToggleAlarmEvent>(_toggleAlarmEvent);
|
on<ToggleAlarmEvent>(_toggleAlarmEvent);
|
||||||
on<DeleteScheduleEvent>(deleteSchedule);
|
on<DeleteScheduleEvent>(deleteSchedule);
|
||||||
//_toggleAlarmEvent
|
|
||||||
}
|
}
|
||||||
void _onClose(OnClose event, Emitter<GarageDoorSensorState> emit) {
|
void _onClose(OnClose event, Emitter<GarageDoorSensorState> emit) {
|
||||||
_timer?.cancel();
|
_timer?.cancel();
|
||||||
@ -81,7 +79,7 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorSensorState> {
|
|||||||
toggleDoor = deviceStatus.switch1;
|
toggleDoor = deviceStatus.switch1;
|
||||||
emit(UpdateState(garageSensor: deviceStatus));
|
emit(UpdateState(garageSensor: deviceStatus));
|
||||||
Future.delayed(const Duration(milliseconds: 500));
|
Future.delayed(const Duration(milliseconds: 500));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(GarageDoorFailedState(errorMessage: e.toString()));
|
emit(GarageDoorFailedState(errorMessage: e.toString()));
|
||||||
return;
|
return;
|
||||||
@ -180,47 +178,16 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorSensorState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// Real-time db
|
||||||
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
void _listenToChanges() {
|
// void _listenToChanges() {
|
||||||
try {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$GDId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = GarageDoorModel.fromJson(statusList);
|
|
||||||
// if (!isClosed) {
|
|
||||||
// add(ToggleSelectedEvent());
|
|
||||||
// }
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
// try {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
// DatabaseReference ref =
|
// DatabaseReference ref =
|
||||||
// FirebaseDatabase.instance.ref('device-status/$GDId');
|
// FirebaseDatabase.instance.ref('device-status/$GDId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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));
|
||||||
// }
|
// }
|
||||||
@ -228,19 +195,24 @@ class GarageDoorBloc extends Bloc<GarageDoorEvent, GarageDoorSensorState> {
|
|||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
// 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: true));
|
// statusList
|
||||||
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// deviceStatus = GarageDoorModel.fromJson(statusList);
|
// deviceStatus = GarageDoorModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// // if (!isClosed) {
|
||||||
// // add(
|
// // add(ToggleSelectedEvent());
|
||||||
// // DoorSensorSwitch(switchD: deviceStatus.doorContactState),
|
// // }
|
||||||
// // );
|
|
||||||
// }
|
|
||||||
// });
|
// });
|
||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
|
// _streamSubscription = null;
|
||||||
|
// return super.close();
|
||||||
|
// }
|
||||||
|
|
||||||
List<Map<String, String>> days = [
|
List<Map<String, String>> days = [
|
||||||
{"day": "Sun", "key": "Sun"},
|
{"day": "Sun", "key": "Sun"},
|
||||||
{"day": "Mon", "key": "Mon"},
|
{"day": "Mon", "key": "Mon"},
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/one_gang_bloc/one_gang_state.dart';
|
import 'package:syncrow_app/features/devices/bloc/one_gang_bloc/one_gang_state.dart';
|
||||||
@ -61,29 +60,32 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
|
|||||||
}
|
}
|
||||||
deviceStatus = OneGangModel.fromJson(statusModelList);
|
deviceStatus = OneGangModel.fromJson(statusModelList);
|
||||||
emit(UpdateState(oneGangModel: deviceStatus));
|
emit(UpdateState(oneGangModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Real-time db
|
||||||
// _listenToChanges() {
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
// void _listenToChanges() {
|
||||||
// try {
|
// try {
|
||||||
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$oneGangId');
|
// _streamSubscription?.cancel();
|
||||||
|
// DatabaseReference ref =
|
||||||
|
// FirebaseDatabase.instance.ref('device-status/$oneGangId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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 = OneGangModel.fromJson(statusList);
|
// deviceStatus = OneGangModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// if (!isClosed) {
|
||||||
// add(OneGangUpdated());
|
// add(OneGangUpdated());
|
||||||
@ -92,41 +94,12 @@ class OneGangBloc extends Bloc<OneGangEvent, OneGangState> {
|
|||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
void _listenToChanges() {
|
// _streamSubscription?.cancel();
|
||||||
try {
|
// _streamSubscription = null;
|
||||||
_streamSubscription?.cancel();
|
// return super.close();
|
||||||
DatabaseReference ref =
|
// }
|
||||||
FirebaseDatabase.instance.ref('device-status/$oneGangId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
print('=========${usersMap['status']}');
|
|
||||||
deviceStatus = OneGangModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {
|
|
||||||
add(OneGangUpdated());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
_oneGangUpdated(OneGangUpdated event, Emitter<OneGangState> emit) {
|
_oneGangUpdated(OneGangUpdated event, Emitter<OneGangState> emit) {
|
||||||
emit(UpdateState(oneGangModel: deviceStatus));
|
emit(UpdateState(oneGangModel: deviceStatus));
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
@ -30,7 +29,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
bool oneTouchGroup = false;
|
bool oneTouchGroup = false;
|
||||||
List<DeviceModel> devicesList = [];
|
List<DeviceModel> devicesList = [];
|
||||||
|
|
||||||
OneTouchBloc({required this.oneTouchId, required this.switchCode}) : super(InitialState()) {
|
OneTouchBloc({required this.oneTouchId, required this.switchCode})
|
||||||
|
: super(InitialState()) {
|
||||||
on<InitialEvent>(_fetchOneTouchStatus);
|
on<InitialEvent>(_fetchOneTouchStatus);
|
||||||
on<OneTouchUpdated>(_oneTouchUpdated);
|
on<OneTouchUpdated>(_oneTouchUpdated);
|
||||||
on<ChangeFirstSwitchStatusEvent>(_changeFirstSwitch);
|
on<ChangeFirstSwitchStatusEvent>(_changeFirstSwitch);
|
||||||
@ -53,7 +53,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
on<ChangeStatusEvent>(_changeStatus);
|
on<ChangeStatusEvent>(_changeStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _fetchOneTouchStatus(InitialEvent event, Emitter<OneTouchState> emit) async {
|
void _fetchOneTouchStatus(
|
||||||
|
InitialEvent event, Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
try {
|
try {
|
||||||
var response = await DevicesAPI.getDeviceStatus(oneTouchId);
|
var response = await DevicesAPI.getDeviceStatus(oneTouchId);
|
||||||
@ -63,42 +64,43 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
deviceStatus = OneTouchModel.fromJson(statusModelList);
|
deviceStatus = OneTouchModel.fromJson(statusModelList);
|
||||||
emit(UpdateState(oneTouchModel: deviceStatus));
|
emit(UpdateState(oneTouchModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Real-time db
|
||||||
|
// _listenToChanges() {
|
||||||
|
// try {
|
||||||
|
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$oneTouchId');
|
||||||
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
_listenToChanges() {
|
// stream.listen((DatabaseEvent event) async {
|
||||||
try {
|
// if (_timer != null) {
|
||||||
DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$oneTouchId');
|
// await Future.delayed(const Duration(seconds: 2));
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
// }
|
||||||
|
// Map<dynamic, dynamic> usersMap = event.snapshot.value as Map<dynamic, dynamic>;
|
||||||
|
// List<StatusModel> statusList = [];
|
||||||
|
|
||||||
stream.listen((DatabaseEvent event) async {
|
// usersMap['status'].forEach((element) {
|
||||||
if (_timer != null) {
|
// statusList.add(StatusModel(code: element['code'], value: element['value']));
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
// });
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap = event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
|
|
||||||
usersMap['status'].forEach((element) {
|
// deviceStatus = OneTouchModel.fromJson(statusList);
|
||||||
statusList.add(StatusModel(code: element['code'], value: element['value']));
|
// if (!isClosed) {
|
||||||
});
|
// add(OneTouchUpdated());
|
||||||
|
// }
|
||||||
deviceStatus = OneTouchModel.fromJson(statusList);
|
// });
|
||||||
if (!isClosed) {
|
// } catch (_) {}
|
||||||
add(OneTouchUpdated());
|
// }
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
_oneTouchUpdated(OneTouchUpdated event, Emitter<OneTouchState> emit) {
|
_oneTouchUpdated(OneTouchUpdated event, Emitter<OneTouchState> emit) {
|
||||||
emit(UpdateState(oneTouchModel: deviceStatus));
|
emit(UpdateState(oneTouchModel: deviceStatus));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _changeFirstSwitch(ChangeFirstSwitchStatusEvent event, Emitter<OneTouchState> emit) async {
|
void _changeFirstSwitch(
|
||||||
|
ChangeFirstSwitchStatusEvent event, Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingNewSate(oneTouchModel: deviceStatus));
|
emit(LoadingNewSate(oneTouchModel: deviceStatus));
|
||||||
try {
|
try {
|
||||||
deviceStatus.firstSwitch = !event.value;
|
deviceStatus.firstSwitch = !event.value;
|
||||||
@ -123,17 +125,20 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _changeSliding(ChangeSlidingSegment event, Emitter<OneTouchState> emit) async {
|
void _changeSliding(
|
||||||
|
ChangeSlidingSegment event, Emitter<OneTouchState> emit) async {
|
||||||
emit(ChangeSlidingSegmentState(value: event.value));
|
emit(ChangeSlidingSegmentState(value: event.value));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _setCounterValue(SetCounterValue event, Emitter<OneTouchState> emit) async {
|
void _setCounterValue(
|
||||||
|
SetCounterValue event, Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingNewSate(oneTouchModel: deviceStatus));
|
emit(LoadingNewSate(oneTouchModel: 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: oneTouchId, code: event.deviceCode, value: seconds),
|
DeviceControlModel(
|
||||||
|
deviceId: oneTouchId, code: event.deviceCode, value: seconds),
|
||||||
oneTouchId);
|
oneTouchId);
|
||||||
|
|
||||||
if (response['success'] ?? false) {
|
if (response['success'] ?? false) {
|
||||||
@ -156,7 +161,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getCounterValue(GetCounterEvent event, Emitter<OneTouchState> emit) async {
|
void _getCounterValue(
|
||||||
|
GetCounterEvent event, Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
try {
|
try {
|
||||||
var response = await DevicesAPI.getDeviceStatus(oneTouchId);
|
var response = await DevicesAPI.getDeviceStatus(oneTouchId);
|
||||||
@ -245,7 +251,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
deviceId: oneTouchId,
|
deviceId: oneTouchId,
|
||||||
);
|
);
|
||||||
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;
|
||||||
@ -256,12 +263,13 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
|
|
||||||
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 toggleChange(ToggleScheduleEvent event, Emitter<OneTouchState> emit) async {
|
Future toggleChange(
|
||||||
|
ToggleScheduleEvent event, Emitter<OneTouchState> emit) async {
|
||||||
try {
|
try {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
final response = await DevicesAPI.changeSchedule(
|
final response = await DevicesAPI.changeSchedule(
|
||||||
@ -280,7 +288,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future deleteSchedule(DeleteScheduleEvent event, Emitter<OneTouchState> emit) async {
|
Future deleteSchedule(
|
||||||
|
DeleteScheduleEvent event, Emitter<OneTouchState> emit) async {
|
||||||
try {
|
try {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
final response = await DevicesAPI.deleteSchedule(
|
final response = await DevicesAPI.deleteSchedule(
|
||||||
@ -300,7 +309,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void toggleCreateSchedule(ToggleCreateScheduleEvent event, Emitter<OneTouchState> emit) {
|
void toggleCreateSchedule(
|
||||||
|
ToggleCreateScheduleEvent event, Emitter<OneTouchState> emit) {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
createSchedule = !createSchedule;
|
createSchedule = !createSchedule;
|
||||||
selectedDays.clear();
|
selectedDays.clear();
|
||||||
@ -329,7 +339,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
|
|
||||||
int selectedTabIndex = 0;
|
int selectedTabIndex = 0;
|
||||||
|
|
||||||
void toggleSelectedIndex(ToggleSelectedEvent event, Emitter<OneTouchState> emit) {
|
void toggleSelectedIndex(
|
||||||
|
ToggleSelectedEvent event, Emitter<OneTouchState> emit) {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
selectedTabIndex = event.index;
|
selectedTabIndex = event.index;
|
||||||
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
|
emit(ChangeSlidingSegmentState(value: selectedTabIndex));
|
||||||
@ -338,7 +349,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
List<GroupOneTouchModel> groupOneTouchList = [];
|
List<GroupOneTouchModel> groupOneTouchList = [];
|
||||||
bool allSwitchesOn = true;
|
bool allSwitchesOn = true;
|
||||||
|
|
||||||
void _fetchOneTouchWizardStatus(InitialWizardEvent event, Emitter<OneTouchState> emit) async {
|
void _fetchOneTouchWizardStatus(
|
||||||
|
InitialWizardEvent event, Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
try {
|
try {
|
||||||
devicesList = [];
|
devicesList = [];
|
||||||
@ -348,7 +360,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
HomeCubit.getInstance().selectedSpace?.id ?? '', '1GT');
|
HomeCubit.getInstance().selectedSpace?.id ?? '', '1GT');
|
||||||
|
|
||||||
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));
|
||||||
@ -369,15 +382,16 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: allSwitchesOn));
|
emit(UpdateGroupState(
|
||||||
|
oneTouchList: groupOneTouchList, allSwitches: allSwitchesOn));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _changeFirstWizardSwitch(
|
void _changeFirstWizardSwitch(ChangeFirstWizardSwitchStatusEvent event,
|
||||||
ChangeFirstWizardSwitchStatusEvent event, Emitter<OneTouchState> emit) async {
|
Emitter<OneTouchState> emit) async {
|
||||||
emit(LoadingNewSate(oneTouchModel: deviceStatus));
|
emit(LoadingNewSate(oneTouchModel: deviceStatus));
|
||||||
try {
|
try {
|
||||||
bool allSwitchesValue = true;
|
bool allSwitchesValue = true;
|
||||||
@ -395,7 +409,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
value: !event.value,
|
value: !event.value,
|
||||||
);
|
);
|
||||||
|
|
||||||
emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: allSwitchesValue));
|
emit(UpdateGroupState(
|
||||||
|
oneTouchList: groupOneTouchList, allSwitches: allSwitchesValue));
|
||||||
if (response['success']) {
|
if (response['success']) {
|
||||||
add(InitialEvent(groupScreen: oneTouchGroup));
|
add(InitialEvent(groupScreen: oneTouchGroup));
|
||||||
}
|
}
|
||||||
@ -413,10 +428,12 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Emit the state with updated values
|
// Emit the state with updated values
|
||||||
emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: true));
|
emit(
|
||||||
|
UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: true));
|
||||||
|
|
||||||
// Get a list of all device IDs
|
// Get a list of all device IDs
|
||||||
List<String> allDeviceIds = groupOneTouchList.map((device) => device.deviceId).toList();
|
List<String> allDeviceIds =
|
||||||
|
groupOneTouchList.map((device) => device.deviceId).toList();
|
||||||
|
|
||||||
// First call for switch_1
|
// First call for switch_1
|
||||||
final response1 = await DevicesAPI.deviceBatchController(
|
final response1 = await DevicesAPI.deviceBatchController(
|
||||||
@ -445,10 +462,12 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Emit the state with updated values
|
// Emit the state with updated values
|
||||||
emit(UpdateGroupState(oneTouchList: groupOneTouchList, allSwitches: false));
|
emit(UpdateGroupState(
|
||||||
|
oneTouchList: groupOneTouchList, allSwitches: false));
|
||||||
|
|
||||||
// Get a list of all device IDs
|
// Get a list of all device IDs
|
||||||
List<String> allDeviceIds = groupOneTouchList.map((device) => device.deviceId).toList();
|
List<String> allDeviceIds =
|
||||||
|
groupOneTouchList.map((device) => device.deviceId).toList();
|
||||||
|
|
||||||
// First call for switch_1
|
// First call for switch_1
|
||||||
final response1 = await DevicesAPI.deviceBatchController(
|
final response1 = await DevicesAPI.deviceBatchController(
|
||||||
@ -472,7 +491,8 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
String statusSelected = '';
|
String statusSelected = '';
|
||||||
String optionSelected = '';
|
String optionSelected = '';
|
||||||
|
|
||||||
Future<void> _changeStatus(ChangeStatusEvent event, Emitter<OneTouchState> emit) async {
|
Future<void> _changeStatus(
|
||||||
|
ChangeStatusEvent event, Emitter<OneTouchState> emit) async {
|
||||||
try {
|
try {
|
||||||
emit(LoadingInitialState());
|
emit(LoadingInitialState());
|
||||||
|
|
||||||
@ -497,7 +517,10 @@ class OneTouchBloc extends Bloc<OneTouchEvent, OneTouchState> {
|
|||||||
final selectedControl = controlMap[optionSelected]?[statusSelected];
|
final selectedControl = controlMap[optionSelected]?[statusSelected];
|
||||||
if (selectedControl != null) {
|
if (selectedControl != null) {
|
||||||
await DevicesAPI.controlDevice(
|
await DevicesAPI.controlDevice(
|
||||||
DeviceControlModel(deviceId: oneTouchId, code: optionSelected, value: selectedControl),
|
DeviceControlModel(
|
||||||
|
deviceId: oneTouchId,
|
||||||
|
code: optionSelected,
|
||||||
|
value: selectedControl),
|
||||||
oneTouchId,
|
oneTouchId,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -149,24 +149,7 @@ class SmartDoorBloc extends Bloc<SmartDoorEvent, SmartDoorState> {
|
|||||||
_streamSubscription = null;
|
_streamSubscription = null;
|
||||||
return super.close();
|
return super.close();
|
||||||
}
|
}
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
|
||||||
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$deviceId');
|
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) {
|
|
||||||
// Map<dynamic, dynamic> usersMap = event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
// List<StatusModel> statusList = [];
|
|
||||||
|
|
||||||
// usersMap['status'].forEach((element) {
|
|
||||||
// statusList.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// deviceStatus = SmartDoorModel.fromJson(statusList);
|
|
||||||
// add(DoorLockUpdated());
|
|
||||||
// });
|
|
||||||
// } catch (_) {}
|
|
||||||
// }
|
|
||||||
|
|
||||||
_doorLockUpdated(DoorLockUpdated event, Emitter<SmartDoorState> emit) {
|
_doorLockUpdated(DoorLockUpdated event, Emitter<SmartDoorState> emit) {
|
||||||
unlockRequest = deviceStatus.unlockRequest;
|
unlockRequest = deviceStatus.unlockRequest;
|
||||||
|
|||||||
@ -172,7 +172,7 @@ class SosBloc extends Bloc<SosEvent, SosState> {
|
|||||||
);
|
);
|
||||||
emit(UpdateState(sensor: deviceStatus));
|
emit(UpdateState(sensor: deviceStatus));
|
||||||
Future.delayed(const Duration(milliseconds: 500));
|
Future.delayed(const Duration(milliseconds: 500));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(SosFailedState(errorMessage: e.toString()));
|
emit(SosFailedState(errorMessage: e.toString()));
|
||||||
return;
|
return;
|
||||||
@ -422,58 +422,38 @@ class SosBloc extends Bloc<SosEvent, SosState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
|
//real-time db
|
||||||
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
// Timer? _timer;
|
||||||
|
|
||||||
|
// void _listenToChanges() {
|
||||||
// try {
|
// try {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
// DatabaseReference ref =
|
// DatabaseReference ref =
|
||||||
// FirebaseDatabase.instance.ref('device-status/$sosId');
|
// FirebaseDatabase.instance.ref('device-status/$sosId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) {
|
// _streamSubscription = stream.listen((DatabaseEvent event) async {
|
||||||
|
// if (_timer != null) {
|
||||||
|
// await Future.delayed(const Duration(seconds: 2));
|
||||||
|
// }
|
||||||
// Map<dynamic, dynamic> usersMap =
|
// Map<dynamic, dynamic> usersMap =
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
// event.snapshot.value as Map<dynamic, dynamic>;
|
||||||
// List<StatusModel> statusList = [];
|
// List<StatusModel> statusList = [];
|
||||||
|
|
||||||
// usersMap['status'].forEach((element) {
|
// usersMap['status'].forEach((element) {
|
||||||
// statusList
|
// statusList
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// deviceStatus = SosModel.fromJson(statusList);
|
// deviceStatus = SosModel.fromJson(statusList);
|
||||||
// // add(DoorLockUpdated());
|
|
||||||
// });
|
// });
|
||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// @override
|
||||||
Timer? _timer;
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
void _listenToChanges() {
|
// _streamSubscription = null;
|
||||||
try {
|
// return super.close();
|
||||||
_streamSubscription?.cancel();
|
// }
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$sosId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = SosModel.fromJson(statusList);
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,32 +115,6 @@ class ThreeGangBloc extends Bloc<ThreeGangEvent, ThreeGangState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
|
||||||
// DatabaseReference ref =
|
|
||||||
// FirebaseDatabase.instance.ref('device-status/$threeGangId');
|
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
|
||||||
// if (_timer != null) {
|
|
||||||
// await Future.delayed(const Duration(seconds: 2));
|
|
||||||
// }
|
|
||||||
// Map<dynamic, dynamic> usersMap =
|
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
// List<StatusModel> statusList = [];
|
|
||||||
// usersMap['status'].forEach((element) {
|
|
||||||
// statusList
|
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
// });
|
|
||||||
// print('=========${usersMap['status']}');
|
|
||||||
|
|
||||||
// deviceStatus = ThreeGangModel.fromJson(statusList);
|
|
||||||
// if (!isClosed) {
|
|
||||||
// add(ThreeGangUpdated());
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// } catch (_) {}
|
|
||||||
// }
|
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
|
||||||
@ -162,8 +136,6 @@ class ThreeGangBloc extends Bloc<ThreeGangEvent, ThreeGangState> {
|
|||||||
statusList
|
statusList
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
.add(StatusModel(code: element['code'], value: element['value']));
|
||||||
});
|
});
|
||||||
print('=========${usersMap['status']}');
|
|
||||||
|
|
||||||
deviceStatus = ThreeGangModel.fromJson(statusList);
|
deviceStatus = ThreeGangModel.fromJson(statusList);
|
||||||
if (!isClosed) {
|
if (!isClosed) {
|
||||||
add(ThreeGangUpdated());
|
add(ThreeGangUpdated());
|
||||||
|
|||||||
@ -107,7 +107,7 @@ class ThreeTouchBloc extends Bloc<ThreeTouchEvent, ThreeTouchState> {
|
|||||||
}
|
}
|
||||||
deviceStatus = ThreeTouchModel.fromJson(statusModelList);
|
deviceStatus = ThreeTouchModel.fromJson(statusModelList);
|
||||||
emit(UpdateState(threeTouchModel: deviceStatus));
|
emit(UpdateState(threeTouchModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
@ -115,29 +115,29 @@ class ThreeTouchBloc extends Bloc<ThreeTouchEvent, ThreeTouchState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_listenToChanges() {
|
// _listenToChanges() {
|
||||||
try {
|
// try {
|
||||||
DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$threeTouchId');
|
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$threeTouchId');
|
||||||
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 = ThreeTouchModel.fromJson(statusList);
|
// deviceStatus = ThreeTouchModel.fromJson(statusList);
|
||||||
if (!isClosed) {
|
// if (!isClosed) {
|
||||||
add(ThreeTouchUpdated());
|
// add(ThreeTouchUpdated());
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
} catch (_) {}
|
// } catch (_) {}
|
||||||
}
|
// }
|
||||||
|
|
||||||
_threeTouchUpdated(ThreeTouchUpdated event, Emitter<ThreeTouchState> emit) {
|
_threeTouchUpdated(ThreeTouchUpdated event, Emitter<ThreeTouchState> emit) {
|
||||||
emit(UpdateState(threeTouchModel: deviceStatus));
|
emit(UpdateState(threeTouchModel: deviceStatus));
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
import 'package:syncrow_app/features/app_layout/bloc/home_cubit.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/two_gang_bloc/two_gang_event.dart';
|
import 'package:syncrow_app/features/devices/bloc/two_gang_bloc/two_gang_event.dart';
|
||||||
@ -89,36 +88,36 @@ class TwoGangBloc extends Bloc<TwoGangEvent, TwoGangState> {
|
|||||||
}
|
}
|
||||||
deviceStatus = TwoGangModel.fromJson(statusModelList);
|
deviceStatus = TwoGangModel.fromJson(statusModelList);
|
||||||
emit(UpdateState(twoGangModel: deviceStatus));
|
emit(UpdateState(twoGangModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_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);
|
||||||
if (!isClosed) {
|
// if (!isClosed) {
|
||||||
add(TwoGangUpdated());
|
// add(TwoGangUpdated());
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
} catch (_) {}
|
// } catch (_) {}
|
||||||
}
|
// }
|
||||||
|
|
||||||
_twoGangUpdated(TwoGangUpdated event, Emitter<TwoGangState> emit) {
|
_twoGangUpdated(TwoGangUpdated event, Emitter<TwoGangState> emit) {
|
||||||
emit(UpdateState(twoGangModel: deviceStatus));
|
emit(UpdateState(twoGangModel: deviceStatus));
|
||||||
|
|||||||
@ -99,56 +99,23 @@ class TwoTouchBloc extends Bloc<TwoTouchEvent, TwoTouchState> {
|
|||||||
}
|
}
|
||||||
deviceStatus = TwoTouchModel.fromJson(statusModelList);
|
deviceStatus = TwoTouchModel.fromJson(statusModelList);
|
||||||
emit(UpdateState(twoTouchModel: deviceStatus));
|
emit(UpdateState(twoTouchModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(FailedState(error: e.toString()));
|
emit(FailedState(error: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
|
||||||
void _listenToChanges() {
|
// void _listenToChanges() {
|
||||||
try {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$twoTouchId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
print('=========${usersMap['status']}');
|
|
||||||
deviceStatus = TwoTouchModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {
|
|
||||||
add(TwoTouchUpdated());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
// try {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
// DatabaseReference ref =
|
// DatabaseReference ref =
|
||||||
// FirebaseDatabase.instance.ref('device-status/$twoTouchId');
|
// FirebaseDatabase.instance.ref('device-status/$twoTouchId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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));
|
||||||
// }
|
// }
|
||||||
@ -159,7 +126,7 @@ class TwoTouchBloc extends Bloc<TwoTouchEvent, TwoTouchState> {
|
|||||||
// statusList
|
// statusList
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
// print('=========${usersMap['status']}');
|
||||||
// deviceStatus = TwoTouchModel.fromJson(statusList);
|
// deviceStatus = TwoTouchModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// if (!isClosed) {
|
||||||
// add(TwoTouchUpdated());
|
// add(TwoTouchUpdated());
|
||||||
@ -168,6 +135,15 @@ class TwoTouchBloc extends Bloc<TwoTouchEvent, TwoTouchState> {
|
|||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
|
// _streamSubscription = null;
|
||||||
|
// return super.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_twoTouchUpdated(TwoTouchUpdated event, Emitter<TwoTouchState> emit) {
|
_twoTouchUpdated(TwoTouchUpdated event, Emitter<TwoTouchState> emit) {
|
||||||
emit(UpdateState(twoTouchModel: deviceStatus));
|
emit(UpdateState(twoTouchModel: deviceStatus));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,27 +41,6 @@ class WallSensorBloc extends Bloc<WallSensorEvent, WallSensorState> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
|
||||||
// DatabaseReference ref =
|
|
||||||
// FirebaseDatabase.instance.ref('device-status/$deviceId');
|
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) {
|
|
||||||
// Map<dynamic, dynamic> usersMap =
|
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
// List<StatusModel> statusList = [];
|
|
||||||
|
|
||||||
// usersMap['status'].forEach((element) {
|
|
||||||
// statusList
|
|
||||||
// .add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// deviceStatus = WallSensorModel.fromJson(statusList);
|
|
||||||
// add(WallSensorUpdatedEvent());
|
|
||||||
// });
|
|
||||||
// } catch (_) {}
|
|
||||||
// }
|
|
||||||
Timer? _timer;
|
Timer? _timer;
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
|
||||||
|
|||||||
@ -74,64 +74,33 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
|
|||||||
statusModelList,
|
statusModelList,
|
||||||
);
|
);
|
||||||
emit(UpdateState(whModel: deviceStatus));
|
emit(UpdateState(whModel: deviceStatus));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(WHFailedState(errorMessage: e.toString()));
|
emit(WHFailedState(errorMessage: e.toString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
//real-time db
|
||||||
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
void _listenToChanges() {
|
// void _listenToChanges() {
|
||||||
try {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$whId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = WHModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {
|
|
||||||
add(WaterHeaterUpdated());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
// try {
|
||||||
// DatabaseReference ref = FirebaseDatabase.instance.ref('device-status/$whId');
|
// _streamSubscription?.cancel();
|
||||||
|
// DatabaseReference ref =
|
||||||
|
// FirebaseDatabase.instance.ref('device-status/$whId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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 = WHModel.fromJson(statusList);
|
// deviceStatus = WHModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// if (!isClosed) {
|
||||||
// add(WaterHeaterUpdated());
|
// add(WaterHeaterUpdated());
|
||||||
@ -140,6 +109,15 @@ class WaterHeaterBloc extends Bloc<WaterHeaterEvent, WaterHeaterState> {
|
|||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
|
// _streamSubscription = null;
|
||||||
|
// return super.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_waterHeaterUpdated(
|
_waterHeaterUpdated(
|
||||||
WaterHeaterUpdated event, Emitter<WaterHeaterState> emit) async {
|
WaterHeaterUpdated event, Emitter<WaterHeaterState> emit) async {
|
||||||
emit(WHLoadingState());
|
emit(WHLoadingState());
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:firebase_database/firebase_database.dart';
|
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/water_leak_bloc/water_leak_event.dart';
|
import 'package:syncrow_app/features/devices/bloc/water_leak_bloc/water_leak_event.dart';
|
||||||
import 'package:syncrow_app/features/devices/bloc/water_leak_bloc/water_leak_state.dart';
|
import 'package:syncrow_app/features/devices/bloc/water_leak_bloc/water_leak_state.dart';
|
||||||
@ -21,7 +20,6 @@ class WaterLeakBloc extends Bloc<WaterLeakEvent, WaterLeakState> {
|
|||||||
on<ToggleClosingReminderEvent>(_toggleClosingReminder);
|
on<ToggleClosingReminderEvent>(_toggleClosingReminder);
|
||||||
on<ToggleWaterLeakAlarmEvent>(_toggleWaterLeakAlarm);
|
on<ToggleWaterLeakAlarmEvent>(_toggleWaterLeakAlarm);
|
||||||
}
|
}
|
||||||
Timer? _timer;
|
|
||||||
bool lowBattery = false;
|
bool lowBattery = false;
|
||||||
bool closingReminder = false;
|
bool closingReminder = false;
|
||||||
bool waterAlarm = false;
|
bool waterAlarm = false;
|
||||||
@ -43,7 +41,7 @@ class WaterLeakBloc extends Bloc<WaterLeakEvent, WaterLeakState> {
|
|||||||
emit(UpdateState(waterSensor: deviceStatus));
|
emit(UpdateState(waterSensor: deviceStatus));
|
||||||
|
|
||||||
Future.delayed(const Duration(milliseconds: 500));
|
Future.delayed(const Duration(milliseconds: 500));
|
||||||
_listenToChanges();
|
// _listenToChanges();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
emit(WaterLeakFailedState(errorMessage: e.toString()));
|
emit(WaterLeakFailedState(errorMessage: e.toString()));
|
||||||
return;
|
return;
|
||||||
@ -134,62 +132,26 @@ class WaterLeakBloc extends Bloc<WaterLeakEvent, WaterLeakState> {
|
|||||||
emit(WaterLeakFailedState(errorMessage: errorMessage));
|
emit(WaterLeakFailedState(errorMessage: errorMessage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Timer? _timer;
|
||||||
StreamSubscription<DatabaseEvent>? _streamSubscription;
|
// StreamSubscription<DatabaseEvent>? _streamSubscription;
|
||||||
|
// void _listenToChanges() {
|
||||||
void _listenToChanges() {
|
|
||||||
try {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
DatabaseReference ref =
|
|
||||||
FirebaseDatabase.instance.ref('device-status/$WLId');
|
|
||||||
Stream<DatabaseEvent> stream = ref.onValue;
|
|
||||||
|
|
||||||
_streamSubscription = stream.listen((DatabaseEvent event) async {
|
|
||||||
if (_timer != null) {
|
|
||||||
await Future.delayed(const Duration(seconds: 2));
|
|
||||||
}
|
|
||||||
Map<dynamic, dynamic> usersMap =
|
|
||||||
event.snapshot.value as Map<dynamic, dynamic>;
|
|
||||||
List<StatusModel> statusList = [];
|
|
||||||
usersMap['status'].forEach((element) {
|
|
||||||
statusList
|
|
||||||
.add(StatusModel(code: element['code'], value: element['value']));
|
|
||||||
});
|
|
||||||
deviceStatus = WaterLeakModel.fromJson(statusList);
|
|
||||||
if (!isClosed) {
|
|
||||||
add(
|
|
||||||
WaterLeakSwitch(switchD: deviceStatus.waterContactState),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (_) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> close() async {
|
|
||||||
_streamSubscription?.cancel();
|
|
||||||
_streamSubscription = null;
|
|
||||||
return super.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
// _listenToChanges() {
|
|
||||||
// try {
|
// try {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
// DatabaseReference ref =
|
// DatabaseReference ref =
|
||||||
// FirebaseDatabase.instance.ref('device-status/$WLId');
|
// FirebaseDatabase.instance.ref('device-status/$WLId');
|
||||||
// Stream<DatabaseEvent> stream = ref.onValue;
|
// Stream<DatabaseEvent> stream = ref.onValue;
|
||||||
|
|
||||||
// stream.listen((DatabaseEvent event) async {
|
// _streamSubscription = 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 =
|
// Map<dynamic, dynamic> usersMap =
|
||||||
// event.snapshot.value as Map<dynamic, dynamic>;
|
// 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: true));
|
// statusList
|
||||||
|
// .add(StatusModel(code: element['code'], value: element['value']));
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// deviceStatus = WaterLeakModel.fromJson(statusList);
|
// deviceStatus = WaterLeakModel.fromJson(statusList);
|
||||||
// if (!isClosed) {
|
// if (!isClosed) {
|
||||||
// add(
|
// add(
|
||||||
@ -199,4 +161,13 @@ class WaterLeakBloc extends Bloc<WaterLeakEvent, WaterLeakState> {
|
|||||||
// });
|
// });
|
||||||
// } catch (_) {}
|
// } catch (_) {}
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
// @override
|
||||||
|
// Future<void> close() async {
|
||||||
|
// _streamSubscription?.cancel();
|
||||||
|
// _streamSubscription = null;
|
||||||
|
// return super.close();
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user