myhomie_app/lib/Screens/Main/Security/alarmDetailPage.dart
2024-01-24 16:00:41 +01:00

210 lines
7.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:mycore_api/api.dart';
import 'package:mycore_api/api.dart' as API;
import 'package:myhomie_app/Components/Alarms/getCurrentAlarmModeIcon.dart';
import 'package:myhomie_app/Components/Custom_Navigation_Bar/CustomAppBar.dart';
import 'package:myhomie_app/Components/check_input_container.dart';
import 'package:myhomie_app/Components/loading_common.dart';
import 'package:myhomie_app/Components/string_input_container.dart';
import 'package:myhomie_app/Models/homieContext.dart';
import 'package:myhomie_app/app_context.dart';
import 'package:myhomie_app/constants.dart';
import 'package:provider/provider.dart';
class AlarmDetailPage extends StatefulWidget {
const AlarmDetailPage({Key? key, required this.alarmMode}) : super(key: key);
final AlarmModeDTO alarmMode;
@override
State<AlarmDetailPage> createState() => _AlarmDetailPageState();
}
class _AlarmDetailPageState extends State<AlarmDetailPage> {
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
AlarmModeDetailDTO? alarmModeDetailDTO;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
final appContext = Provider.of<AppContext>(context);
Size size = MediaQuery.of(context).size;
//final notchInset = MediaQuery.of(context).padding;
HomieAppContext homieAppContext = appContext.getContext();
return Scaffold(
key: _scaffoldKey,
appBar: CustomAppBar(
title: widget.alarmMode.name!,
titleIcon: getAlarmModeIcon(widget.alarmMode),
isTextSizeButton: true,
),
body: FutureBuilder(
future: homieAppContext.clientAPI.alarmApi!.alarmGetDetail(widget.alarmMode.id!),
builder: (context, AsyncSnapshot<AlarmModeDetailDTO?> snapshot) {
if(snapshot.data != null ) {
alarmModeDetailDTO = snapshot.data;
return SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if(!alarmModeDetailDTO!.isDefault!)
SizedBox(
width: size.width *1.1,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: StringInputContainer(
label: "Nom:",
color: kMainColor,
textColor: Colors.white,
initialValue: alarmModeDetailDTO!.name,
onChanged: (String value) {
setState(() {
alarmModeDetailDTO!.name = value;
// TODO SAVE or not
});
},
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: CheckInputContainer(
icon: Icons.notifications_active,
label: "Notification :",
fontSize: 20,
isChecked: alarmModeDetailDTO!.notification!,
onChanged: (bool value) {
alarmModeDetailDTO!.notification = value;
},
),
),
ExpansionTile(
title: Text(
"Triggers",
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold
),
),
children: [
for(var trigger in alarmModeDetailDTO!.triggers!)
if(alarmModeDetailDTO!.devices!.where((d) => d.id == trigger.deviceId).isNotEmpty)
ExpansionTile(
title: Text(alarmModeDetailDTO!.devices!.firstWhere((d) => d.id == trigger.deviceId).name!),
children: <Widget>[
ListTile(
title: Text("name: "+trigger.stateName! + " - " + "value: "+ trigger.stateValue!),
)
],
),
ListTile(
title: Text("Ajouter +", style: TextStyle(), textAlign: TextAlign.center),
tileColor: Colors.lightGreen,
onTap: () {
// Show popup ajout
debugPrint("Add device to trigger popup");
},
)
],
),
ExpansionTile(
title: Text(
"Actions",
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold
),
),
children: [
for(var action in alarmModeDetailDTO!.actions!)
actionTile(action),
ListTile(
title: Text("Ajouter +", style: TextStyle(), textAlign: TextAlign.center),
tileColor: Colors.lightGreen,
onTap: () {
// Show popup ajout
debugPrint("Add device to trigger popup");
},
)
],
),
Text("Actions"),
for(var device in alarmModeDetailDTO!.devices!.where((d) => alarmModeDetailDTO!.actions!.map((t)=> t.deviceId).contains(d.id)))
Text(device.name!),
Text(alarmModeDetailDTO!.actions!.toString()),
],
),
);
} else {
return const LoadingCommon();
}
}
)
);
}
actionTile(API.Action action) {
switch(action.type) {
case ActionType.DELAY:
return ListTile(
title: Text(action.type.toString()),
);
case ActionType.DEVICE:
return ExpansionTile(
title: Text(action.type.toString()),
children: [
if(alarmModeDetailDTO!.devices!.where((d) => d.id == action.deviceId).isNotEmpty)
ExpansionTile(
title: Text(alarmModeDetailDTO!.devices!.firstWhere((d) => d.id == action.deviceId).name!),
children: [
ListTile(
title: Text(action.states.toString())
),
],
)
],
);
case ActionType.GROUP:
return ListTile(
title: Text(action.type.toString()),
);
case ActionType.HTTP:
return ListTile(
title: Text(action.type.toString()),
);
case ActionType.MQTT:
return ExpansionTile(
title: Text(action.type.toString()),
children: [
ListTile(
title: Text(action.rawRequest!),
)
],
);
case ActionType.zIGBEE2MQTT:
return ListTile(
title: Text(action.type.toString()),
);
}
}
}