import 'dart:async'; import 'dart:convert'; import '../feature/devices/device_model.dart'; import '../product/base/bloc/base_bloc.dart'; import '../product/constant/app/app_constants.dart'; import '../product/services/api_services.dart'; import '../product/utils/date_time_utils.dart'; import '../product/utils/device_utils.dart'; import '../feature/device_log/device_logs_model.dart'; class DeviceLogsBloc extends BlocBase { APIServices apiServices = APIServices(); final fromDate = StreamController.broadcast(); StreamSink get sinkFromDate => fromDate.sink; Stream get streamFromDate => fromDate.stream; final hasMore = StreamController.broadcast(); StreamSink get sinkHasMore => hasMore.sink; Stream get streamHasMore => hasMore.stream; final allDevices = StreamController>.broadcast(); StreamSink> get sinkAllDevices => allDevices.sink; Stream> get streamAllDevices => allDevices.stream; final sensors = StreamController>.broadcast(); StreamSink> get sinkSensors => sensors.sink; Stream> get streamSensors => sensors.stream; final message = StreamController.broadcast(); StreamSink get sinkmessage => message.sink; Stream get streammessage => message.stream; @override void dispose() {} void getAllDevices() async { String body = await apiServices.getOwnerDevices(); if (body != "") { final data = jsonDecode(body); List items = data['items']; List originalDevices = Device.fromJsonDynamicList(items); List devices = DeviceUtils.instance.sortDeviceByState(originalDevices); sinkAllDevices.add(devices); } } void getDeviceLogByThingID( int offset, String thingID, DateTime fromDate, List sensors, ) async { sinkmessage.add(ApplicationConstants.LOADING); String fromDateString = DateTimeUtils.instance.formatDateTimeToString(fromDate); String now = DateTimeUtils.instance.formatDateTimeToString(DateTime.now()); Map params = { 'thing_id': thingID, 'from': fromDateString, 'to': now, 'limit': '30', "offset": offset.toString(), "asc": "true" }; final body = await apiServices.getLogsOfDevice(thingID, params); if (body != "") { final data = jsonDecode(body); DeviceLog devicesListLog = DeviceLog.fromJson(data); if (devicesListLog.sensors!.isEmpty) { bool hasMore = false; sinkHasMore.add(hasMore); } if (devicesListLog.sensors!.isNotEmpty) { for (var sensor in devicesListLog.sensors!) { sensors.add(sensor); } } else { sinkmessage.add(ApplicationConstants.NO_DATA); } sinkSensors.add(sensors); } } }