202 lines
7.8 KiB
Dart
202 lines
7.8 KiB
Dart
// 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<GroupDetail>.broadcast();
|
|
StreamSink<GroupDetail> get sinkDetailGroup => detailGroup.sink;
|
|
Stream<GroupDetail> get streamDetailGroup => detailGroup.stream;
|
|
|
|
final warningDevice = StreamController<List<DeviceOfGroup>>.broadcast();
|
|
StreamSink<List<DeviceOfGroup>> get sinkWarningDevice => warningDevice.sink;
|
|
Stream<List<DeviceOfGroup>> get streamWarningDevice => warningDevice.stream;
|
|
|
|
final message = StreamController<String>.broadcast();
|
|
StreamSink<String> get sinkMessage => message.sink;
|
|
Stream<String> get streamMessage => message.stream;
|
|
|
|
@override
|
|
void dispose() {}
|
|
|
|
Future<void> getGroupDetail(BuildContext context, String groupID) async {
|
|
await apiServices.execute(context, () async {
|
|
List<DeviceOfGroup> 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<DeviceOfGroup> 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<void> approveUserToGroup(BuildContext context, String groupID,
|
|
String userID, String userName) async {
|
|
await apiServices.execute(context, () async {
|
|
Map<String, dynamic> 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<String, dynamic> 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<void> 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<void> 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<void> 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<void> updateDeviceNameInGroup(
|
|
BuildContext context, String thingID, String newAlias) async {
|
|
await apiServices.execute(context, () async {
|
|
Map<String, dynamic> 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<String, dynamic> 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<List<Device>> getOwnerDevices(BuildContext context) {
|
|
return apiServices.execute(context, () async {
|
|
final originalDevices = await apiServices.getOwnerDevices();
|
|
return originalDevices
|
|
.where((device) => device.visibility == "PUBLIC")
|
|
.toList();
|
|
});
|
|
}
|
|
|
|
Future<void> addDeviceToGroup(
|
|
BuildContext context, String groupID, String thingID) async {
|
|
Map<String, dynamic> 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());
|
|
// }
|
|
}
|
|
}
|