// ignore_for_file: use_build_context_synchronously import 'dart:async'; import 'dart:convert'; import 'package:flutter/widgets.dart'; import '../feature/devices/device_model.dart'; import '../product/base/bloc/base_bloc.dart'; import '../product/services/api_services.dart'; import '../product/services/language_services.dart'; import '../product/utils/response_status_utils.dart'; import '../feature/inter_family/group_detail/group_detail_model.dart'; class DetailGroupBloc extends BlocBase { APIServices apiServices = APIServices(); final detailGroup = StreamController.broadcast(); StreamSink get sinkDetailGroup => detailGroup.sink; Stream get streamDetailGroup => detailGroup.stream; final warningDevice = StreamController>.broadcast(); StreamSink> get sinkWarningDevice => warningDevice.sink; Stream> get streamWarningDevice => warningDevice.stream; final message = StreamController.broadcast(); StreamSink get sinkMessage => message.sink; Stream get streamMessage => message.stream; @override void dispose() {} Future getGroupDetail(String groupID) async { final body = await apiServices.getGroupDetail(groupID); final data = jsonDecode(body); List warningDevices = []; if (data != null) { GroupDetail group = GroupDetail.fromJson(data); sinkDetailGroup.add(group); if (group.devices != null) { for (var device in group.devices!) { if (device.state == 1) { warningDevices.add(device); } } sinkWarningDevice.add(warningDevices); } } } Future approveUserToGroup(BuildContext context, String groupID, String userID, String userName) async { Map body = {"group_id": groupID, "user_id": userID}; int statusCode = await apiServices.approveGroup(body); showSnackBarResponseByStatusCode(context, statusCode, "Đã duyệt $userName vào nhóm!", "Duyệt $userName thất bại!"); } Future deleteOrUnapproveUser(BuildContext context, String groupID, String userID, String userName) async { int statusCode = await apiServices.deleteUserInGroup(groupID, userID); showSnackBarResponseByStatusCode(context, statusCode, "Đã xóa người dùng $userName", "Xóa người dùng $userName thất bại"); } Future deleteDevice(BuildContext context, String groupID, String thingID, String deviceName) async { int statusCode = await apiServices.deleteDeviceInGroup(groupID, thingID); showSnackBarResponseByStatusCode(context, statusCode, "Đã xóa thiết bị $deviceName", "Xóa thiết bị $deviceName thất bại"); } Future leaveGroup( BuildContext context, String groupID, String userID) async { int statusCode = await apiServices.deleteUserInGroup(groupID, userID); showSnackBarResponseByStatusCode( context, statusCode, appLocalization(context).notification_leave_group_success, appLocalization(context).notification_leave_group_failed); } Future updateDeviceNameInGroup( BuildContext context, String thingID, String newAlias) async { Map body = {"thing_id": thingID, "alias": newAlias}; int statusCode = await apiServices.updateDeviceAlias(body); showSnackBarResponseByStatusCode( context, statusCode, appLocalization(context).notification_update_device_success, appLocalization(context).notification_update_device_failed, ); } Future> getOwnerDevices() async { List allDevices = []; String body = await apiServices.getOwnerDevices(); if (body != "") { final data = jsonDecode(body); List items = data['items']; allDevices = Device.fromJsonDynamicList(items); } return allDevices; } Future addDeviceToGroup( BuildContext context, String groupID, String thingID) async { Map body = { "thing_id": thingID, }; int statusCode = await apiServices.addDeviceToGroup(groupID, body); showSnackBarResponseByStatusCode( context, statusCode, appLocalization(context).notification_add_device_success, appLocalization(context).notification_add_device_failed, ); } }