Files
syncrow-app/lib/features/shared_widgets/custom_switch.dart
Mohammad Salameh 81242c69cb Update CustomSwitch widget to handle device status and control
Refactored CustomSwitch widget to properly handle device status and control
based on the device's status values. Added necessary checks and updated UI
accordingly.
2024-04-04 01:35:30 +03:00

90 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:syncrow_app/features/devices/bloc/devices_cubit.dart';
import 'package:syncrow_app/features/devices/model/device_category_model.dart';
import 'package:syncrow_app/features/devices/model/device_control_model.dart';
import 'package:syncrow_app/features/devices/model/device_model.dart';
import 'package:syncrow_app/utils/resource_manager/color_manager.dart';
import 'package:collection/collection.dart';
class CustomSwitch extends StatelessWidget {
const CustomSwitch({super.key, required this.device});
final DeviceModel device;
@override
Widget build(BuildContext context) {
return BlocBuilder<DevicesCubit, DevicesState>(
builder: (context, state) {
bool? status;
if (device.status.isNotEmpty) {
status = device.status
.firstWhereOrNull((status) => status.code == "switch")
?.value;
}
return status == null
? const SizedBox()
: GestureDetector(
onTap: () {
DevicesCubit.getInstance().deviceControl(
DeviceControlModel(
deviceId: device.id,
code: device.status
.firstWhere((status) => status.code == "switch")
.code,
value: !device.status
.firstWhere((status) => status.code == "switch")
.value!,
),
device.id!,
);
},
child: Container(
width: 45.0,
height: 28.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.0),
color: status != null
? status
? ColorsManager.primaryColor
: const Color(0xFFD9D9D9)
: const Color(0xFFD9D9D9),
),
child: Center(
child: Container(
width: 40.0,
height: 23.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(24.0),
color: Colors.white,
),
child: Padding(
padding: const EdgeInsets.all(2.0),
child: Container(
alignment: status != null
? status
? Alignment.centerRight
: Alignment.centerLeft
: Alignment.centerLeft,
child: Container(
width: 20.0,
height: 20.0,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: status != null
? status
? ColorsManager.primaryColor
: Colors.grey
: Colors.grey,
),
),
),
),
),
),
),
);
},
);
}
}