This commit is contained in:
Yegor Vialov 2018-11-24 00:37:55 +02:00
parent 215871ce9e
commit 73398378c4
7 changed files with 111 additions and 129 deletions

View File

@ -10,18 +10,31 @@ class DefaultEntityContainer extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Row( final EntityModel entityModel = EntityModel.of(context);
mainAxisSize: MainAxisSize.max, return InkWell(
children: <Widget>[ onLongPress: () {
EntityIcon(), if (entityModel.handleTap) {
entityModel.entityWrapper.handleHold();
}
},
onTap: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleTap();
}
},
child: Row(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
EntityIcon(),
Flexible( Flexible(
fit: FlexFit.tight, fit: FlexFit.tight,
flex: 3, flex: 3,
child: EntityName(), child: EntityName(),
), ),
state state
], ],
),
); );
} }
} }

View File

@ -10,27 +10,14 @@ class EntityIcon extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final entityModel = EntityModel.of(context); final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper;
return InkWell( return Padding(
child: Padding( padding: padding,
padding: padding, child: MaterialDesignIcons.createIconWidgetFromEntityData(
child: MaterialDesignIcons.createIconWidgetFromEntityData( entityWrapper,
entityModel.entityWrapper, iconSize,
iconSize, EntityColor.stateColor(entityWrapper.entity.state)
EntityColor.stateColor(entityModel.entityWrapper.entity.state)
),
), ),
onLongPress: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleHold();
}
},
onTap: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleTap();
}
}
); );
} }
} }

View File

@ -12,28 +12,16 @@ class EntityName extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final entityModel = EntityModel.of(context); final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper;
return InkWell( return Padding(
child: Padding( padding: padding,
padding: padding, child: Text(
child: Text( "${entityWrapper.displayName}",
"${entityModel.entityWrapper.displayName}", overflow: textOverflow,
overflow: textOverflow, softWrap: wordsWrap,
softWrap: wordsWrap, style: TextStyle(fontSize: fontSize),
style: TextStyle(fontSize: fontSize), textAlign: textAlign,
textAlign: textAlign,
),
), ),
onLongPress: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleHold();
}
},
onTap: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleTap();
}
}
); );
} }
} }

View File

@ -11,6 +11,7 @@ class GlanceEntityContainer extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper;
List<Widget> result = []; List<Widget> result = [];
if (showName) { if (showName) {
result.add(EntityName( result.add(EntityName(
@ -21,10 +22,12 @@ class GlanceEntityContainer extends StatelessWidget {
fontSize: Sizes.smallFontSize, fontSize: Sizes.smallFontSize,
)); ));
} }
result.add(EntityIcon( result.add(
padding: EdgeInsets.all(0.0), EntityIcon(
iconSize: Sizes.iconSize, padding: EdgeInsets.all(0.0),
)); iconSize: Sizes.iconSize,
)
);
if (showState) { if (showState) {
result.add(SimpleEntityState( result.add(SimpleEntityState(
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -32,11 +35,20 @@ class GlanceEntityContainer extends StatelessWidget {
padding: EdgeInsets.only(top: Sizes.rowPadding), padding: EdgeInsets.only(top: Sizes.rowPadding),
)); ));
} }
return Column( return Center(
mainAxisSize: MainAxisSize.min, child: InkWell(
mainAxisAlignment: MainAxisAlignment.start, child: ConstrainedBox(
crossAxisAlignment: CrossAxisAlignment.center, constraints: BoxConstraints(minWidth: Sizes.iconSize*2),
children: result, child: Column(
mainAxisSize: MainAxisSize.min,
//mainAxisAlignment: MainAxisAlignment.start,
//crossAxisAlignment: CrossAxisAlignment.center,
children: result,
),
),
onTap: () => entityWrapper.handleTap(),
onLongPress: () => entityWrapper.handleHold(),
),
); );
} }
} }

View File

@ -19,39 +19,34 @@ class ClimateStateWidget extends StatelessWidget {
return Padding( return Padding(
padding: EdgeInsets.fromLTRB( padding: EdgeInsets.fromLTRB(
0.0, 0.0, Sizes.rightWidgetPadding, 0.0), 0.0, 0.0, Sizes.rightWidgetPadding, 0.0),
child: GestureDetector( child: Column(
child: Column( crossAxisAlignment: CrossAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
children: <Widget>[ Row(
Row( children: <Widget>[
children: <Widget>[ Text("${entity.state}",
Text("${entity.state}", textAlign: TextAlign.right,
textAlign: TextAlign.right, style: new TextStyle(
style: new TextStyle( fontWeight: FontWeight.bold,
fontWeight: FontWeight.bold,
fontSize: Sizes.stateFontSize,
)),
Text(" $targetTemp",
textAlign: TextAlign.right,
style: new TextStyle(
fontSize: Sizes.stateFontSize,
))
],
),
entity.attributes["current_temperature"] != null ?
Text("Currently: ${entity.attributes["current_temperature"]}",
textAlign: TextAlign.right,
style: new TextStyle(
fontSize: Sizes.stateFontSize, fontSize: Sizes.stateFontSize,
color: Colors.black45) )),
) : Text(" $targetTemp",
Container(height: 0.0,) textAlign: TextAlign.right,
], style: new TextStyle(
), fontSize: Sizes.stateFontSize,
onTap: () => entityModel.handleTap ))
? eventBus.fire(new ShowEntityPageEvent(entity)) ],
: null, ),
entity.attributes["current_temperature"] != null ?
Text("Currently: ${entity.attributes["current_temperature"]}",
textAlign: TextAlign.right,
style: new TextStyle(
fontSize: Sizes.stateFontSize,
color: Colors.black45)
) :
Container(height: 0.0,)
],
)); ));
} }
} }

View File

@ -12,28 +12,17 @@ class SimpleEntityState extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final entityModel = EntityModel.of(context); final entityModel = EntityModel.of(context);
Widget result = Padding( Widget result = Padding(
padding: padding, padding: padding,
child: InkWell( child: Text(
child: Text( "${entityModel.entityWrapper.entity.state} ${entityModel.entityWrapper.entity.unitOfMeasurement}",
"${entityModel.entityWrapper.entity.state}${entityModel.entityWrapper.entity.unitOfMeasurement}", textAlign: textAlign,
textAlign: textAlign, maxLines: 10,
maxLines: 10, overflow: TextOverflow.ellipsis,
overflow: TextOverflow.ellipsis, softWrap: true,
softWrap: true, style: new TextStyle(
style: new TextStyle( fontSize: Sizes.stateFontSize,
fontSize: Sizes.stateFontSize,
)),
onLongPress: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleHold();
}
},
onTap: () {
if (entityModel.handleTap) {
entityModel.entityWrapper.handleTap();
}
}
) )
)
); );
if (expanded) { if (expanded) {
return Flexible( return Flexible(

View File

@ -24,27 +24,25 @@ class GlanceCardWidget extends StatelessWidget {
Widget _buildRows(BuildContext context) { Widget _buildRows(BuildContext context) {
List<Widget> result = []; List<Widget> result = [];
double width = MediaQuery.of(context).size.width - Sizes.leftWidgetPadding - (2*Sizes.rightWidgetPadding);
List<EntityWrapper> toShow = card.entities.where((entity) {return !entity.entity.isHidden;}).toList(); List<EntityWrapper> toShow = card.entities.where((entity) {return !entity.entity.isHidden;}).toList();
int columnsCount = toShow.length >= card.columnsCount ? card.columnsCount : toShow.length; int columnsCount = toShow.length >= card.columnsCount ? card.columnsCount : toShow.length;
card.entities.forEach((EntityWrapper entity) {
if (!entity.entity.isHidden) { toShow.forEach((EntityWrapper entity) {
result.add( result.add(
SizedBox( FractionallySizedBox(
width: width / columnsCount, widthFactor: 1/columnsCount,
child: EntityModel( child: EntityModel(
entityWrapper: entity, entityWrapper: entity,
child: entity.entity.buildGlanceWidget(context, card.showName, card.showState), child: entity.entity.buildGlanceWidget(context, card.showName, card.showState),
handleTap: true handleTap: true
), ),
) )
); );
}
}); });
return Padding( return Padding(
padding: EdgeInsets.fromLTRB(0.0, Sizes.rowPadding, 0.0, 2*Sizes.rowPadding), padding: EdgeInsets.fromLTRB(0.0, Sizes.rowPadding, 0.0, 2*Sizes.rowPadding),
child: Wrap( child: Wrap(
alignment: WrapAlignment.spaceAround, //alignment: WrapAlignment.spaceAround,
runSpacing: Sizes.rowPadding*2, runSpacing: Sizes.rowPadding*2,
children: result, children: result,
), ),