WIP #143 Camera support

This commit is contained in:
Yegor Vialov
2019-01-29 21:59:05 +02:00
parent 1094177a42
commit 7af92c2dc9
7 changed files with 98 additions and 13 deletions

View File

@ -0,0 +1,19 @@
part of '../main.dart';
class CameraEntity extends Entity {
static const SUPPORT_ON_OFF = 1;
CameraEntity(Map rawData) : super(rawData);
bool get supportOnOff => ((attributes["supported_features"] &
CameraEntity.SUPPORT_ON_OFF) ==
CameraEntity.SUPPORT_ON_OFF);
@override
Widget _buildAdditionalControlsForPage(BuildContext context) {
return CameraControlsWidget(
url: 'https://citadel.vynn.co:8123${this.entityPicture}',
);
}
}

View File

@ -86,6 +86,9 @@ class EntityCollection {
case "fan": {
return FanEntity(rawEntityData);
}
case "camera": {
return CameraEntity(rawEntityData);
}
case "alarm_control_panel": {
return AlarmControlPanelEntity(rawEntityData);
}

View File

@ -0,0 +1,46 @@
part of '../../main.dart';
class CameraControlsWidget extends StatefulWidget {
final String url;
CameraControlsWidget({Key key, @required this.url}) : super(key: key);
@override
_CameraControlsWidgetState createState() => _CameraControlsWidgetState();
}
class _CameraControlsWidgetState extends State<CameraControlsWidget> {
VideoPlayerController _controller;
@override
void initState() {
super.initState();
Logger.d("Camera source: ${widget.url}");
_controller = VideoPlayerController.network(widget.url)
..initialize().then((_) {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return Image.network(widget.url);
return Center(
child: _controller.value.initialized
? AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: VideoPlayer(_controller),
)
: Container(),
);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
}

View File

@ -15,6 +15,7 @@ import 'package:flutter_colorpicker/material_picker.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:progress_indicators/progress_indicators.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:video_player/video_player.dart';
part 'entity_class/const.dart';
part 'entity_class/entity.class.dart';
@ -34,6 +35,7 @@ part 'entity_class/lock_entity.class.dart';
part 'entity_class/group_entity.class.dart';
part 'entity_class/fan_entity.class.dart';
part 'entity_class/automation_entity.dart';
part 'entity_class/camera_entity.class.dart';
part 'entity_class/alarm_control_panel.class.dart';
part 'entity_widgets/common/badge.dart';
part 'entity_widgets/model_widgets.dart';
@ -70,7 +72,6 @@ part 'entity_widgets/controls/cover_controls.dart';
part 'entity_widgets/controls/light_controls.dart';
part 'entity_widgets/controls/media_player_widgets.dart';
part 'entity_widgets/controls/fan_controls.dart';
part 'entity_widgets/controls/alarm_control_panel_controls.dart';
part 'settings.page.dart';
part 'home_assistant.class.dart';
part 'log.page.dart';