mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-09 22:57:21 +00:00
73 lines
2.7 KiB
Dart
73 lines
2.7 KiB
Dart
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
import 'package:syncrow_web/pages/common/curtain_toggle.dart';
|
|
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_bloc.dart';
|
|
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_event.dart';
|
|
import 'package:syncrow_web/pages/device_managment/curtain/bloc/curtain_state.dart';
|
|
import 'package:syncrow_web/pages/device_managment/curtain/model/curtain_model.dart';
|
|
import 'package:syncrow_web/pages/device_managment/three_gang_switch/bloc/living_room_bloc.dart';
|
|
import 'package:syncrow_web/pages/device_managment/three_gang_switch/models/living_room_model.dart';
|
|
import 'package:syncrow_web/pages/device_managment/three_gang_switch/widgets/living_toggle_widget.dart';
|
|
import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart';
|
|
|
|
class CurtainControl extends StatelessWidget with HelperResponsiveLayout {
|
|
final String deviceId;
|
|
|
|
const CurtainControl({super.key, required this.deviceId});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return BlocProvider(
|
|
create: (context) =>
|
|
CurtainBloc(deviceId: deviceId)..add(CurtainFetchDeviceStatus(deviceId)),
|
|
child: BlocBuilder<CurtainBloc, CurtainState>(
|
|
builder: (context, state) {
|
|
if (state is CurtainStatusLoading) {
|
|
return const Center(child: CircularProgressIndicator());
|
|
} else if (state is CurtainStatusLoaded) {
|
|
return _buildStatusControls(context, state.status);
|
|
} else if (state is CurtainError || state is CurtainControlError) {
|
|
return const Center(child: Text('Error fetching status'));
|
|
} else {
|
|
return const Center(child: CircularProgressIndicator());
|
|
}
|
|
},
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _buildStatusControls(BuildContext context, bool status) {
|
|
final isExtraLarge = isExtraLargeScreenSize(context);
|
|
final isLarge = isLargeScreenSize(context);
|
|
final isMedium = isMediumScreenSize(context);
|
|
return Container(
|
|
child: GridView(
|
|
padding: const EdgeInsets.symmetric(horizontal: 50),
|
|
shrinkWrap: true,
|
|
physics: const NeverScrollableScrollPhysics(),
|
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
|
crossAxisCount: isLarge || isExtraLarge
|
|
? 3
|
|
: isMedium
|
|
? 2
|
|
: 1,
|
|
mainAxisExtent: 140,
|
|
crossAxisSpacing: 12,
|
|
mainAxisSpacing: 12,
|
|
),
|
|
children: [
|
|
CurtainToggle(
|
|
value: status,
|
|
code: 'Curtains',
|
|
deviceId: deviceId,
|
|
label: 'Curtains',
|
|
),
|
|
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|