WIP #302 simple SVG support

This commit is contained in:
estevez-dev 2019-02-20 17:55:56 +02:00
parent 538d3603dc
commit 76057e8797
4 changed files with 65 additions and 15 deletions

View File

@ -20,10 +20,10 @@ class _CameraStreamViewState extends State<CameraStreamView> {
http.Client client; http.Client client;
http.StreamedResponse response; http.StreamedResponse response;
List<int> binaryImage = []; List<int> binaryImage = [];
String cameraState = "Connecting...";
bool timeToStop = false; bool timeToStop = false;
Completer streamCompleter; Completer streamCompleter;
bool started = false; bool started = false;
bool useSVG = false;
void _connect() async { void _connect() async {
started = true; started = true;
@ -31,11 +31,8 @@ class _CameraStreamViewState extends State<CameraStreamView> {
String streamUrl = '$homeAssistantWebHost/api/camera_proxy_stream/${_entity.entityId}?token=${_entity.attributes['access_token']}'; 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 client = new http.Client(); // create a client to make api calls
http.Request request = new http.Request("GET", Uri.parse(streamUrl)); // create get request http.Request request = new http.Request("GET", Uri.parse(streamUrl)); // create get request
Logger.d("[Sending] ==> ${streamUrl}"); Logger.d("[Sending] ==> $streamUrl");
response = await client.send(request); response = await client.send(request);
setState(() {
cameraState = "Starting...";
});
Logger.d("[Received] <== ${response.headers}"); Logger.d("[Received] <== ${response.headers}");
String frameBoundary = response.headers['content-type'].split('boundary=')[1]; String frameBoundary = response.headers['content-type'].split('boundary=')[1];
final int frameBoundarySize = frameBoundary.length; final int frameBoundarySize = frameBoundary.length;
@ -56,7 +53,7 @@ class _CameraStreamViewState extends State<CameraStreamView> {
if (primaryBuffer.length >= imageSizeStart + 10) { if (primaryBuffer.length >= imageSizeStart + 10) {
contentType = utf8.decode( contentType = utf8.decode(
primaryBuffer.sublist(frameBoundarySize+16, imageSizeStart + 10), allowMalformed: true).split("\r\n")[0]; primaryBuffer.sublist(frameBoundarySize+16, imageSizeStart + 10), allowMalformed: true).split("\r\n")[0];
//Logger.d("$contentType"); useSVG = contentType == "image/svg+xml";
imageSizeStart = frameBoundarySize + 16 + contentType.length + 18; imageSizeStart = frameBoundarySize + 16 + contentType.length + 18;
for (int i = imageSizeStart; i < primaryBuffer.length - 4; i++) { for (int i = imageSizeStart; i < primaryBuffer.length - 4; i++) {
strBuffer = utf8.decode( strBuffer = utf8.decode(
@ -139,17 +136,38 @@ class _CameraStreamViewState extends State<CameraStreamView> {
if (binaryImage.isEmpty) { if (binaryImage.isEmpty) {
return Column( return Column(
children: <Widget>[ children: <Widget>[
Text("$cameraState") Container(
padding: const EdgeInsets.all(20.0),
child: const CircularProgressIndicator()
)
],
);
} else {
if (useSVG) {
Logger.d("Camera with SVG source");
return Column(
children: <Widget>[
SvgPicture.memory(
Uint8List.fromList(binaryImage),
height: 200.0,
placeholderBuilder: (BuildContext context) =>
new Container(
padding: const EdgeInsets.all(20.0),
child: const CircularProgressIndicator()
),
)
], ],
); );
} else { } else {
return Column( return Column(
children: <Widget>[ children: <Widget>[
Image.memory(Uint8List.fromList(binaryImage), gaplessPlayback: true), Image.memory(
Uint8List.fromList(binaryImage), gaplessPlayback: true),
], ],
); );
} }
} }
}
@override @override
void dispose() { void dispose() {

View File

@ -15,6 +15,8 @@ import 'package:http/http.dart' as http;
import 'package:charts_flutter/flutter.dart' as charts; import 'package:charts_flutter/flutter.dart' as charts;
import 'package:progress_indicators/progress_indicators.dart'; import 'package:progress_indicators/progress_indicators.dart';
import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_markdown/flutter_markdown.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:webview_flutter/webview_flutter.dart';
part 'entity_class/const.dart'; part 'entity_class/const.dart';
part 'entity_class/entity.class.dart'; part 'entity_class/entity.class.dart';

View File

@ -127,6 +127,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0" version: "0.2.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.3"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -195,6 +202,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.6.2" version: "1.6.2"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.0"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
path_provider: path_provider:
dependency: transitive dependency: transitive
description: description:
@ -326,13 +347,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.9" version: "1.0.9"
webview_flutter:
dependency: "direct main"
description:
name: webview_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.3+1"
xml: xml:
dependency: transitive dependency: transitive
description: description:
name: xml name: xml
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.3.1" version: "3.2.5"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:
@ -341,5 +369,5 @@ packages:
source: hosted source: hosted
version: "2.1.15" version: "2.1.15"
sdks: sdks:
dart: ">=2.0.0 <3.0.0" dart: ">2.0.0 <3.0.0"
flutter: ">=0.5.6 <2.0.0" flutter: ">=0.11.9 <2.0.0"

View File

@ -18,6 +18,8 @@ dependencies:
date_format: any date_format: any
charts_flutter: any charts_flutter: any
flutter_markdown: any flutter_markdown: any
flutter_svg: ^0.10.3
webview_flutter: any
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: