diff --git a/lib/entity_class/camera_entity.class.dart b/lib/entity_class/camera_entity.class.dart index 2e64536..f05538e 100644 --- a/lib/entity_class/camera_entity.class.dart +++ b/lib/entity_class/camera_entity.class.dart @@ -12,8 +12,6 @@ class CameraEntity extends Entity { @override Widget _buildAdditionalControlsForPage(BuildContext context) { - return CameraControlsWidget( - url: '$homeAssistantWebHost/api/camera_proxy_stream/$entityId?token=${this.attributes['access_token']}', - ); + return CameraStreamView(); } } \ No newline at end of file diff --git a/lib/entity_widgets/controls/camera_controls.dart b/lib/entity_widgets/common/camera_stream_view.dart similarity index 84% rename from lib/entity_widgets/controls/camera_controls.dart rename to lib/entity_widgets/common/camera_stream_view.dart index e93bfd5..5065a55 100644 --- a/lib/entity_widgets/controls/camera_controls.dart +++ b/lib/entity_widgets/common/camera_stream_view.dart @@ -1,35 +1,37 @@ part of '../../main.dart'; -class CameraControlsWidget extends StatefulWidget { +class CameraStreamView extends StatefulWidget { - final String url; - - CameraControlsWidget({Key key, @required this.url}) : super(key: key); + CameraStreamView({Key key}) : super(key: key); @override - _CameraControlsWidgetState createState() => _CameraControlsWidgetState(); + _CameraStreamViewState createState() => _CameraStreamViewState(); } -class _CameraControlsWidgetState extends State { +class _CameraStreamViewState extends State { @override void initState() { super.initState(); - _connect(); } + CameraEntity _entity; + http.Client client; http.StreamedResponse response; List binaryImage = []; String cameraState = "Connecting..."; bool timeToStop = false; Completer streamCompleter; + bool started = false; void _connect() async { + started = true; timeToStop = false; + String streamUrl = '$homeAssistantWebHost/api/camera_proxy_stream/${_entity.entityId}?token=${_entity.attributes['access_token']}'; client = new http.Client(); // create a client to make api calls - http.Request request = new http.Request("GET", Uri.parse(widget.url)); // create get request - Logger.d("[Sending] ==> ${widget.url}"); + http.Request request = new http.Request("GET", Uri.parse(streamUrl)); // create get request + Logger.d("[Sending] ==> ${streamUrl}"); response = await client.send(request); setState(() { cameraState = "Starting..."; @@ -126,6 +128,14 @@ class _CameraControlsWidgetState extends State { @override Widget build(BuildContext context) { + if (!started) { + _entity = EntityModel + .of(context) + .entityWrapper + .entity; + _connect(); + } + if (binaryImage.isEmpty) { return Column( children: [ diff --git a/lib/main.dart b/lib/main.dart index be5d346..cabfe0f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -50,6 +50,7 @@ part 'entity_widgets/common/mode_selector.dart'; part 'entity_widgets/common/universal_slider.dart'; part 'entity_widgets/common/flat_service_button.dart'; part 'entity_widgets/common/light_color_picker.dart'; +part 'entity_widgets/common/camera_stream_view.dart'; part 'entity_widgets/entity_colors.class.dart'; part 'entity_widgets/entity_page_container.dart'; part 'entity_widgets/history_chart/entity_history.dart'; @@ -73,7 +74,6 @@ 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 'entity_widgets/controls/camera_controls.dart'; part 'settings.page.dart'; part 'configuration.page.dart'; part 'home_assistant.class.dart';