2023-08-31 16:55:21 +02:00

149 lines
5.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:mycore_api/api.dart';
import 'package:myhomie_app/Components/Alarms/getCurrentAlarmModeIcon.dart';
import 'package:myhomie_app/Components/loading_common.dart';
import 'package:myhomie_app/Models/homieContext.dart';
import 'package:myhomie_app/Screens/Main/Security/alarmDetailPage.dart';
import 'package:myhomie_app/Screens/Main/Security/changeAlarmMode.dart';
import 'package:myhomie_app/Screens/Main/Security/streamWidget.dart';
import 'package:myhomie_app/app_context.dart';
import 'package:myhomie_app/constants.dart';
import 'package:provider/provider.dart';
class SecurityScreen extends StatefulWidget {
SecurityScreen({Key? key}) : super(key: key);
@override
_SecurityScreenState createState() => _SecurityScreenState();
}
class _SecurityScreenState extends State<SecurityScreen> {
bool isLoading = true;
List<AlarmModeDTO>? allAlarmModes;
AlarmModeDTO? currentAlarmMode;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
final appContext = Provider.of<AppContext>(context);
HomieAppContext homieAppContext = appContext.getContext();
return RefreshIndicator(
color: Theme.of(context).primaryColor,
displacement: 20,
onRefresh: () async {
print("TODO refresh");
//await Message.getMessages(this.messages, appContext, true, true);
},
child: Container(
height: size.height * 0.842,
//child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
FutureBuilder(
future: homieAppContext.clientAPI.alarmApi!.alarmGetAll(homieAppContext.homeId!),
builder: (context, AsyncSnapshot<List<AlarmModeDTO>?> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
allAlarmModes = snapshot.data;
currentAlarmMode = allAlarmModes!.where((am) => am.activated!).first;
return Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Container(
width: size.width * 0.6,
height: size.height * 0.1,
decoration: alarmDecoration(currentAlarmMode!),
child: InkWell(
onTap: () async {
var result = await showChangeAlarmModePopup(allAlarmModes!, homieAppContext, context, size);
if(result != null && currentAlarmMode!.id != result) {
// update current alarmMode
try{
var resultId = await homieAppContext.clientAPI.alarmApi!.alarmActivate(result);
if(resultId != null) {
//allAlarmModes!.firstWhere((alarmMode) => alarmMode.id == resultId);
setState(() {
});
}
} catch(e) {
debugPrint("An error occured during alarm mode activation - " + e.toString());
}
}
},
onLongPress: () {
if(currentAlarmMode!.type! != AlarmType.desarmed) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AlarmDetailPage(
alarmMode: currentAlarmMode!,
),
),
);
}
},
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Text(currentAlarmMode!.name!),
Icon(getAlarmModeIcon(currentAlarmMode!)),
],
),
),
),
),
);
} else if (snapshot.connectionState == ConnectionState.none) {
print('ConnectionState.none');
return Text("No data");
} else {
return Container(height: size.height * 0.2, child: LoadingCommon());
}
}
),
Text("TODO Cameras"),
Container(
height: size.height * 0.3,
width: size.width * 0.9,
child: ImageStreamWidget(
initialImageUrl: "http://192.168.31.140:8765/picture/4/current",
) /*VideoPlayerWidget(
videoUrl: "http://192.168.31.140:8084/", //"http://192.168.31.140:8084/",
)*/,
),
Text("Test ?"),
],
),
//),
),
);
}
}
alarmDecoration(AlarmModeDTO alarmModeDTO) {
return BoxDecoration(
color: alarmModeDTO.activated! && alarmModeDTO.type == AlarmType.desarmed ? Colors.white : Colors.red.withOpacity(0.6),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.circular(20.0),
border: Border.all(
color: kBackgroundSecondGrey.withOpacity(0.35),
width: 0.2,
),
boxShadow: [
BoxShadow(
color: kMainColor.withOpacity(0.35),
//spreadRadius: 0.15,
blurRadius: 5,
offset: const Offset(0, 15), // changes position of shadow
),
],
);
}