import 'dart:async'; import 'dart:convert'; import 'dart:developer'; import 'package:sfm_app/feature/devices/device_model.dart'; import 'package:sfm_app/product/base/bloc/base_bloc.dart'; import 'package:sfm_app/product/services/api_services.dart'; import 'package:sfm_app/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; @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 { log("SensorLength: ${sensors.length}"); String fromDateString = DateTimeUtils.instance.formatDateTimeToString(fromDate); String now = DateTimeUtils.instance.formatDateTimeToString(DateTime.now()); // List sensors = []; 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); } } sinkSensors.add(sensors); } } }