mirror of
https://bitbucket.org/myhomie/myhomie_app.git
synced 2025-12-06 09:01:20 +00:00
137 lines
5.5 KiB
Dart
137 lines
5.5 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/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"),
|
|
],
|
|
),
|
|
//),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
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
|
|
),
|
|
],
|
|
);
|
|
} |