WIP #302 simple SVG support
This commit is contained in:
parent
538d3603dc
commit
76057e8797
@ -20,10 +20,10 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
http.Client client;
|
||||
http.StreamedResponse response;
|
||||
List<int> binaryImage = [];
|
||||
String cameraState = "Connecting...";
|
||||
bool timeToStop = false;
|
||||
Completer streamCompleter;
|
||||
bool started = false;
|
||||
bool useSVG = false;
|
||||
|
||||
void _connect() async {
|
||||
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']}';
|
||||
client = new http.Client(); // create a client to make api calls
|
||||
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);
|
||||
setState(() {
|
||||
cameraState = "Starting...";
|
||||
});
|
||||
Logger.d("[Received] <== ${response.headers}");
|
||||
String frameBoundary = response.headers['content-type'].split('boundary=')[1];
|
||||
final int frameBoundarySize = frameBoundary.length;
|
||||
@ -56,7 +53,7 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
if (primaryBuffer.length >= imageSizeStart + 10) {
|
||||
contentType = utf8.decode(
|
||||
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;
|
||||
for (int i = imageSizeStart; i < primaryBuffer.length - 4; i++) {
|
||||
strBuffer = utf8.decode(
|
||||
@ -139,17 +136,38 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
if (binaryImage.isEmpty) {
|
||||
return Column(
|
||||
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 {
|
||||
return Column(
|
||||
children: <Widget>[
|
||||
Image.memory(Uint8List.fromList(binaryImage), gaplessPlayback: true),
|
||||
Image.memory(
|
||||
Uint8List.fromList(binaryImage), gaplessPlayback: true),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
|
@ -15,6 +15,8 @@ import 'package:http/http.dart' as http;
|
||||
import 'package:charts_flutter/flutter.dart' as charts;
|
||||
import 'package:progress_indicators/progress_indicators.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/entity.class.dart';
|
||||
|
34
pubspec.lock
34
pubspec.lock
@ -127,6 +127,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@ -195,6 +202,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -326,13 +347,20 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xml
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.3.1"
|
||||
version: "3.2.5"
|
||||
yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -341,5 +369,5 @@ packages:
|
||||
source: hosted
|
||||
version: "2.1.15"
|
||||
sdks:
|
||||
dart: ">=2.0.0 <3.0.0"
|
||||
flutter: ">=0.5.6 <2.0.0"
|
||||
dart: ">2.0.0 <3.0.0"
|
||||
flutter: ">=0.11.9 <2.0.0"
|
||||
|
@ -18,6 +18,8 @@ dependencies:
|
||||
date_format: any
|
||||
charts_flutter: any
|
||||
flutter_markdown: any
|
||||
flutter_svg: ^0.10.3
|
||||
webview_flutter: any
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
Reference in New Issue
Block a user