import 'dart:async'; import 'package:flutter/cupertino.dart'; 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/shared/shared_snack_bar.dart'; import '../product/utils/device_utils.dart'; class DevicesManagerBloc extends BlocBase { APIServices apiServices = APIServices(); final userRole = StreamController.broadcast(); StreamSink get sinkUserRole => userRole.sink; Stream get streamUserRole => userRole.stream; final allDevices = StreamController>.broadcast(); StreamSink> get sinkAllDevices => allDevices.sink; Stream> get streamAllDevices => allDevices.stream; final deviceByState = StreamController>>.broadcast(); StreamSink>> get sinkDeviceByState => deviceByState.sink; Stream>> get streamDeviceByState => deviceByState.stream; final tagStates = StreamController>.broadcast(); StreamSink> get sinkTagStates => tagStates.sink; Stream> get streamTagStates => tagStates.stream; @override void dispose() {} // void getDevice() async { // String body = await apiServices.getOwnerDevices(); // Map> deviceByState = { // ApplicationConstants.OFFLINE_STATE: [], // ApplicationConstants.NORMAL_STATE: [], // ApplicationConstants.WARNING_STATE: [], // ApplicationConstants.INPROGRESS_STATE: [], // ApplicationConstants.ERROR_STATE: [], // }; // if (body.isNotEmpty) { // final data = jsonDecode(body); // List items = data['items']; // List originalDevices = Device.fromJsonDynamicList(items); // List devices = // DeviceUtils.instance.sortDeviceByState(originalDevices); // for (var device in devices) { // String stateKey; // switch (device.state) { // case -1: // stateKey = ApplicationConstants.OFFLINE_STATE; // break; // case 0: // stateKey = ApplicationConstants.NORMAL_STATE; // break; // case 1: // stateKey = ApplicationConstants.WARNING_STATE; // break; // case 2: // stateKey = ApplicationConstants.INPROGRESS_STATE; // break; // default: // stateKey = ApplicationConstants.ERROR_STATE; // break; // } // deviceByState[stateKey]!.add(device); // } // sinkAllDevices.add(devices); // sinkDeviceByState.add(deviceByState); // } // } void getDeviceByState(BuildContext context, int state) async { try { sinkTagStates.add([state]); Map> deviceByState = { ApplicationConstants.OFFLINE_STATE: [], ApplicationConstants.NORMAL_STATE: [], ApplicationConstants.WARNING_STATE: [], ApplicationConstants.INPROGRESS_STATE: [], ApplicationConstants.ERROR_STATE: [], }; List devices = []; List originalDevices = []; if (state != -2) { originalDevices = await apiServices .getOwnerDeviceByState({"state": state.toString()}); } else { originalDevices = await apiServices.getOwnerDevices(); } List publicDevices = []; for (var device in originalDevices) { if (device.visibility == "PUBLIC") { publicDevices.add(device); } } devices = (state != -2) ? DeviceUtils.instance.sortDeviceAZByName(publicDevices) : DeviceUtils.instance.sortDeviceByState(publicDevices); if (state == -2) { for (var device in publicDevices) { String stateKey = _getStateKey(device.state!); deviceByState[stateKey]!.add(device); } sinkDeviceByState.add(deviceByState); } sinkAllDevices.add(devices); } catch (e) { if (!context.mounted) return; showErrorTopSnackBarCustom(context, e.toString()); } } String _getStateKey(int state) { switch (state) { case -1: return ApplicationConstants.OFFLINE_STATE; case 0: return ApplicationConstants.NORMAL_STATE; case 1: return ApplicationConstants.WARNING_STATE; case 2: return ApplicationConstants.INPROGRESS_STATE; default: return ApplicationConstants.ERROR_STATE; } } }