WIP: Cards build optimization

This commit is contained in:
Yegor Vialov
2020-04-25 15:59:07 +00:00
parent 8dbfb91234
commit f488c0810b
11 changed files with 371 additions and 455 deletions

View File

@ -48,7 +48,7 @@ class CardWidget extends StatelessWidget {
}
case CardType.GLANCE: {
return _buildGlanceCard(context);
return GlanceCard(card: card);
}
case CardType.MEDIA_CONTROL: {
@ -56,15 +56,15 @@ class CardWidget extends StatelessWidget {
}
case CardType.ENTITY_BUTTON: {
return _buildEntityButtonCard(context);
return EntityButtonCard(card: card);
}
case CardType.BUTTON: {
return _buildEntityButtonCard(context);
return EntityButtonCard(card: card);
}
case CardType.GAUGE: {
return _buildGaugeCard(context);
return GaugeCard(card: card);
}
/* case CardType.LIGHT: {
@ -167,9 +167,13 @@ class CardWidget extends StatelessWidget {
);
})
);
return LovelaceCard(
return CardWrapper(
child: Padding(
padding: EdgeInsets.only(right: Sizes.rightWidgetPadding, left: Sizes.leftWidgetPadding),
padding: EdgeInsets.only(
right: Sizes.rightWidgetPadding,
left: Sizes.leftWidgetPadding,
bottom: Sizes.rowPadding,
),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.start,
@ -186,7 +190,7 @@ class CardWidget extends StatelessWidget {
List<Widget> body = [];
body.add(CardHeader(name: card.name));
body.add(MarkdownBody(data: card.content));
return LovelaceCard(
return CardWrapper(
child: Padding(
padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, Sizes.rowPadding),
child: new Column(mainAxisSize: MainAxisSize.min, children: body),
@ -226,7 +230,7 @@ class CardWidget extends StatelessWidget {
states: card.states,
)
);
return LovelaceCard(
return CardWrapper(
child: EntityModel(
entityWrapper: card.linkedEntityWrapper,
handleTap: null,
@ -239,63 +243,8 @@ class CardWidget extends StatelessWidget {
);
}
Widget _buildGlanceCard(BuildContext context) {
List<EntityWrapper> entitiesToShow = card.getEntitiesToShow();
if (entitiesToShow.isEmpty && !card.showEmpty) {
return Container(height: 0.0, width: 0.0,);
}
int length = entitiesToShow.length;
int columnsCount = length >= card.columnsCount ? card.columnsCount : entitiesToShow.length;
int rowsCount = (length / columnsCount).round();
List<TableRow> rows = [];
for (int i = 0; i < rowsCount; i++) {
int start = i*columnsCount;
int end = start + math.min(columnsCount, length - start);
List<Widget> rowChildren = [];
rowChildren.addAll(entitiesToShow.sublist(
start, end
).map(
(EntityWrapper entity){
return EntityModel(
entityWrapper: entity,
child: GlanceCardEntityContainer(
showName: card.showName,
showState: card.showState,
),
handleTap: true
);
}
).toList()
);
while (rowChildren.length < columnsCount) {
rowChildren.add(
Container()
);
}
rows.add(
TableRow(
children: rowChildren
)
);
}
return LovelaceCard(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
CardHeader(name: card.name),
Padding(
padding: EdgeInsets.symmetric(vertical: Sizes.rowPadding),
child: Table(
children: rows
)
)
],
)
);
}
Widget _buildMediaControlsCard(BuildContext context) {
return LovelaceCard(
return CardWrapper(
child: EntityModel(
entityWrapper: card.linkedEntityWrapper,
handleTap: null,
@ -304,56 +253,6 @@ class CardWidget extends StatelessWidget {
);
}
Widget _buildEntityButtonCard(BuildContext context) {
card.linkedEntityWrapper.overrideName = card.name?.toUpperCase() ??
card.linkedEntityWrapper.displayName.toUpperCase();
return LovelaceCard(
child: EntityModel(
entityWrapper: card.linkedEntityWrapper,
child: EntityButtonCardBody(
depth: card.depth,
showName: card.showName,
),
handleTap: true
)
);
}
Widget _buildGaugeCard(BuildContext context) {
card.linkedEntityWrapper.overrideName = card.name ??
card.linkedEntityWrapper.displayName;
card.linkedEntityWrapper.unitOfMeasurementOverride = card.unit ??
card.linkedEntityWrapper.unitOfMeasurement;
return LovelaceCard(
child: EntityModel(
entityWrapper: card.linkedEntityWrapper,
child: GaugeCardBody(
min: card.min,
max: card.max,
depth: card.depth,
severity: card.severity,
),
handleTap: true
)
);
}
Widget _buildLightCard(BuildContext context) {
card.linkedEntityWrapper.overrideName = card.name ??
card.linkedEntityWrapper.displayName;
return LovelaceCard(
child: EntityModel(
entityWrapper: card.linkedEntityWrapper,
child: LightCardBody(
min: card.min,
max: card.max,
severity: card.severity,
),
handleTap: true
)
);
}
Widget _buildUnsupportedCard(BuildContext context) {
List<Widget> body = [];
body.add(
@ -382,7 +281,7 @@ class CardWidget extends StatelessWidget {
]);
}
body.addAll(result);
return LovelaceCard(
return CardWrapper(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,