Show entity picture while camera stream loading
This commit is contained in:
parent
d727a29991
commit
1ba9106d0b
@ -3,9 +3,8 @@ part of '../../../main.dart';
|
||||
class CameraStreamView extends StatefulWidget {
|
||||
|
||||
final bool withControls;
|
||||
final CameraEntity entity;
|
||||
|
||||
CameraStreamView({Key key, this.withControls: true, this.entity}) : super(key: key);
|
||||
CameraStreamView({Key key, this.withControls: true}) : super(key: key);
|
||||
|
||||
@override
|
||||
_CameraStreamViewState createState() => _CameraStreamViewState();
|
||||
@ -35,7 +34,7 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
}
|
||||
Logger.d("[Camera Player] Loading resources");
|
||||
_loading = Completer();
|
||||
_entity = widget.entity ?? EntityModel
|
||||
_entity = EntityModel
|
||||
.of(context)
|
||||
.entityWrapper
|
||||
.entity;
|
||||
@ -106,14 +105,14 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
Widget screenWidget;
|
||||
if (!_isLoaded) {
|
||||
screenWidget = Center(
|
||||
child: CircularProgressIndicator()
|
||||
child: EntityPicture()
|
||||
);
|
||||
} else if (_entity.supportStream) {
|
||||
if (_videoPlayerController.value.initialized) {
|
||||
screenWidget = VideoPlayer(_videoPlayerController);
|
||||
} else {
|
||||
screenWidget = Center(
|
||||
child: CircularProgressIndicator()
|
||||
child: EntityPicture()
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@ -192,9 +191,14 @@ class _CameraStreamViewState extends State<CameraStreamView> {
|
||||
Navigator.of(context).push(
|
||||
MaterialPageRoute(
|
||||
builder: (conext) => FullScreenPage(
|
||||
child: CameraStreamView(
|
||||
withControls: false,
|
||||
entity: _entity,
|
||||
child: EntityModel(
|
||||
child: CameraStreamView(
|
||||
withControls: false
|
||||
),
|
||||
handleTap: false,
|
||||
entityWrapper: EntityWrapper(
|
||||
entity: _entity
|
||||
),
|
||||
),
|
||||
),
|
||||
fullscreenDialog: true
|
||||
|
68
lib/entities/entity_picture.widget.dart
Normal file
68
lib/entities/entity_picture.widget.dart
Normal file
@ -0,0 +1,68 @@
|
||||
part of '../main.dart';
|
||||
|
||||
class EntityPicture extends StatelessWidget {
|
||||
|
||||
final EdgeInsetsGeometry padding;
|
||||
|
||||
const EntityPicture({Key key, this.padding: const EdgeInsets.all(0.0)}) : super(key: key);
|
||||
|
||||
int getDefaultIconByEntityId(String entityId, String deviceClass, String state) {
|
||||
String domain = entityId.split(".")[0];
|
||||
String iconNameByDomain = MaterialDesignIcons.defaultIconsByDomains["$domain.$state"] ?? MaterialDesignIcons.defaultIconsByDomains["$domain"];
|
||||
String iconNameByDeviceClass;
|
||||
if (deviceClass != null) {
|
||||
iconNameByDeviceClass = MaterialDesignIcons.defaultIconsByDeviceClass["$domain.$deviceClass.$state"] ?? MaterialDesignIcons.defaultIconsByDeviceClass["$domain.$deviceClass"];
|
||||
}
|
||||
String iconName = iconNameByDeviceClass ?? iconNameByDomain;
|
||||
if (iconName != null) {
|
||||
return MaterialDesignIcons.iconsDataMap[iconName] ?? 0;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Widget buildIcon(EntityWrapper data) {
|
||||
if (data == null) {
|
||||
return null;
|
||||
}
|
||||
String iconName = data.icon;
|
||||
int iconCode = 0;
|
||||
if (iconName.length > 0) {
|
||||
iconCode = MaterialDesignIcons.getIconCodeByIconName(iconName);
|
||||
} else {
|
||||
iconCode = getDefaultIconByEntityId(data.entity.entityId,
|
||||
data.entity.deviceClass, data.entity.state); //
|
||||
}
|
||||
Widget iconPicture = Container(
|
||||
child: Center(
|
||||
child: Icon(
|
||||
IconData(iconCode, fontFamily: 'Material Design Icons'),
|
||||
size: Sizes.largeIconSize,
|
||||
color: EntityColor.defaultStateColor,
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
if (data.entityPicture != null) {
|
||||
return CachedNetworkImage(
|
||||
imageUrl: data.entityPicture,
|
||||
errorWidget: (context, _, __) => iconPicture,
|
||||
placeholder: (context, _) => iconPicture,
|
||||
);
|
||||
}
|
||||
|
||||
return iconPicture;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper;
|
||||
return Padding(
|
||||
padding: padding,
|
||||
child: buildIcon(
|
||||
entityWrapper
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -88,6 +88,7 @@ part 'entities/slider/widgets/slider_controls.dart';
|
||||
part 'entities/text/widgets/text_input_state.dart';
|
||||
part 'entities/select/widgets/select_state.dart';
|
||||
part 'entities/simple_state.widget.dart';
|
||||
part 'entities/entity_picture.widget.dart';
|
||||
part 'entities/timer/widgets/timer_state.dart';
|
||||
part 'entities/climate/widgets/climate_state.widget.dart';
|
||||
part 'entities/cover/widgets/cover_state.dart';
|
||||
|
Reference in New Issue
Block a user