25.12.04 잠금 해제, uv 살균, 건조팬 동작 기능 구현

This commit is contained in:
2025-12-04 00:00:37 +09:00
parent f8078e1b8b
commit 913ca9136a
4 changed files with 148 additions and 2 deletions

View File

@@ -4,6 +4,9 @@ import 'package:latlong2/latlong.dart';
import 'dart:ui' as ui;
import 'package:smarthelmet_app/widgets/custom_header.dart';
//25.12.03 지은 추가
import 'package:smarthelmet_app/services/locker_api.dart';
class HomeScreenContent extends StatefulWidget {
const HomeScreenContent({super.key});
@@ -23,6 +26,25 @@ class _HomeScreenContentState extends State<HomeScreenContent> {
final Color _toggleOffTrackColor = const Color(0xFFE0E0E0);
final Color _toggleOffKnobBorderColor = const Color(0xFFE0E0E0);
// 25.12.03 지은 추가 시작
final LockerApi _api = LockerApi();
bool _isLoading = false;
Future<void> _runLockerAction(String name, Future<bool> Function() action) async {
if (_isLoading) return;
setState(() => _isLoading = true);
// 실제 명령 전송
final success = await action();
setState(() => _isLoading = false);
if (!mounted) return;
}
// 25.12.03 지은 추가 끝
int _selectedImageIndex = 0;
static const BoxShadow _cleanShadow = BoxShadow(
@@ -329,7 +351,21 @@ class _HomeScreenContentState extends State<HomeScreenContent> {
child: _buildStyledToggleSwitch(
'UV LED',
_controlToggles['UV LED']!,
(val) => setState(() => _controlToggles['UV LED'] = val))),
// 25.12.03 지은 수정 시작
(val) {
_runLockerAction("UV 제어", () async {
bool success = await _api.setUV(val);
if (success) {
setState(() => _controlToggles['UV LED'] = val);
}
return success;
}
);
},
),
),
// 25.12.03 지은 수정 끝
VerticalDivider(color: _mainBlueColor.withOpacity(0.5), indent: 10, endIndent: 10),
Expanded(
child: _buildStyledToggleSwitch(
@@ -346,7 +382,22 @@ class _HomeScreenContentState extends State<HomeScreenContent> {
Expanded(
child: _buildStyledToggleSwitch('FAN',
_controlToggles['FAN']!,
(val) => setState(() => _controlToggles['FAN'] = val))),
// 25.12.03 지은 수정 시작
(val) {
print("👉 [디버깅] fan 눌림! 값: $val");
_runLockerAction("FAN 제어", () async {
print("👉 [디버깅] API 요청 시작...");
bool success = await _api.setFan(val);
if (success) {
setState(() => _controlToggles['FAN'] = val);
}
return success;
});
},
// 25.12.03 지은 수정 끝
),
),
],
),
)