// ignore_for_file: use_build_context_synchronously import 'dart:async'; 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(BuildContext context, String groupID) async { await apiServices.execute(context, () async { List warningDevices = []; GroupDetail group = await apiServices.getGroupDetail(groupID); sinkDetailGroup.add(group); if (group.devices != null) { for (var device in group.devices!) { if (device.state == 1) { warningDevices.add(device); } } sinkWarningDevice.add(warningDevices); } }); // try { // List warningDevices = []; // GroupDetail group = await apiServices.getGroupDetail(groupID); // sinkDetailGroup.add(group); // if (group.devices != null) { // for (var device in group.devices!) { // if (device.state == 1) { // warningDevices.add(device); // } // } // sinkWarningDevice.add(warningDevices); // } // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future approveUserToGroup(BuildContext context, String groupID, String userID, String userName) async { await apiServices.execute(context, () 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!"); }); // try { // 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!"); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future deleteOrUnapproveUser(BuildContext context, String groupID, String userID, String userName) async { await apiServices.execute(context, () 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"); }); // try { // 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"); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future deleteDevice(BuildContext context, String groupID, String thingID, String deviceName) async { await apiServices.execute(context, () 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"); }); // try { // 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"); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future leaveGroup( BuildContext context, String groupID, String userID) async { await apiServices.execute(context, () async { int statusCode = await apiServices.deleteUserInGroup(groupID, userID); showSnackBarResponseByStatusCode( context, statusCode, appLocalization(context).notification_leave_group_success, appLocalization(context).notification_leave_group_failed); }); // try { // int statusCode = await apiServices.deleteUserInGroup(groupID, userID); // showSnackBarResponseByStatusCode( // context, // statusCode, // appLocalization(context).notification_leave_group_success, // appLocalization(context).notification_leave_group_failed); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future updateDeviceNameInGroup( BuildContext context, String thingID, String newAlias) async { await apiServices.execute(context, () 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, ); }); // try { // 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, // ); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } Future> getOwnerDevices(BuildContext context) { return apiServices.execute(context, () async { final originalDevices = await apiServices.getOwnerDevices(); return originalDevices .where((device) => device.visibility == "PUBLIC") .toList(); }); } Future addDeviceToGroup( BuildContext context, String groupID, String thingID) async { Map body = { "thing_id": thingID, }; await apiServices.execute(context, () async { int statusCode = await apiServices.addDeviceToGroup(groupID, body); showSnackBarResponseByStatusCode( context, statusCode, appLocalization(context).notification_add_device_success, appLocalization(context).notification_add_device_failed, ); }); // try { // int statusCode = await apiServices.addDeviceToGroup(groupID, body); // showSnackBarResponseByStatusCode( // context, // statusCode, // appLocalization(context).notification_add_device_success, // appLocalization(context).notification_add_device_failed, // ); // } catch (e) { // if (!context.mounted) return; // showErrorTopSnackBarCustom(context, e.toString()); // } } }