disconnect real-time to some devices

This commit is contained in:
mohammad
2025-02-25 12:41:49 +03:00
parent 2dc4e16a75
commit 0a97a4867d
18 changed files with 293 additions and 559 deletions

View File

@ -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();
} }

View File

@ -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));

View File

@ -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;

View File

@ -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) {

View File

@ -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();
}
} }

View File

@ -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 (_) {}
}
} }

View File

@ -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"},

View File

@ -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));

View File

@ -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 {

View File

@ -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;

View File

@ -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();
}
} }

View File

@ -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());

View File

@ -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));

View File

@ -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));

View File

@ -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));
} }

View File

@ -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;

View File

@ -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());

View File

@ -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();
// }
} }