Skip to content

Commit

Permalink
feat(detail_screen.dart,pubspec.yaml): Use accordions for subtraits
Browse files Browse the repository at this point in the history
  • Loading branch information
rlperez committed Dec 22, 2021
1 parent 27c059f commit e501169
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 22 deletions.
103 changes: 82 additions & 21 deletions lib/traits/detail_screen.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
import 'package:accordion/accordion.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:yonomi_device_widgets/assets/traits/unknown_item_icon.dart';
import 'package:yonomi_device_widgets/providers/battery_level_trait_provider.dart';
import 'package:yonomi_device_widgets/providers/lock_provider.dart';
import 'package:yonomi_device_widgets/providers/power_trait_provider.dart';
import 'package:yonomi_device_widgets/providers/trait_detail_provider.dart';
import 'package:yonomi_device_widgets/assets/traits/battery_level_icon.dart';
import 'package:yonomi_device_widgets/assets/traits/lock_item_icon.dart';
import 'package:yonomi_device_widgets/assets/traits/unknown_item_icon.dart';
import 'package:yonomi_device_widgets/assets/traits/power_item_icon.dart';
import 'package:yonomi_device_widgets/traits/lock.dart';
import 'package:yonomi_device_widgets/traits/power_widget.dart';
import 'package:yonomi_device_widgets/traits/battery_widget.dart';
import 'package:yonomi_platform_sdk/yonomi-sdk.dart';
import 'package:yonomi_device_widgets/ui/widget_style_constants.dart';

Expand Down Expand Up @@ -59,17 +63,25 @@ class DetailScreenWidget extends StatelessWidget {

Widget buildContainer(List<Trait> traits) {
return Container(
alignment: Alignment.center,
child: Center(
child: Column(
children: traits.map((element) {
return Row(children: [
SizedBox(width: 50),
createTraitWidget(element.name),
]);
}).toList()),
),
);
alignment: Alignment.center,
child: Center(
child: Column(children: [
createTraitWidget(traits.first.name),
Accordion(
maxOpenSections: 1,
headerPadding: EdgeInsets.symmetric(vertical: 8, horizontal: 15),
children: traits.skip(1).map((trait) {
return AccordionSection(
header: createTraitWidgetHeader(trait.name),
content: createTraitWidget(trait.name),
contentHorizontalPadding: 20,
contentBorderWidth: 1,
contentBorderColor: Colors.white,
headerBackgroundColor: Colors.white,
contentBackgroundColor: Color(0xFF2e2e2e),
);
}).toList())
])));
}

Widget createTraitWidget(String name) {
Expand All @@ -90,21 +102,70 @@ class DetailScreenWidget extends StatelessWidget {
});
case 'battery_level':
return Consumer<BatteryLevelTraitProvider>(
builder: (_, batteryLevelProvider, child) {
builder: (_, batteryLevelTraitProvider, child) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: BatteryWidget(batteryLevelTraitProvider),
);
});
default:
return Padding(
padding: const EdgeInsets.all(8.0),
child: UnknownItemIcon(color: Colors.white));
}
}

Widget createTraitWidgetHeader(String name) {
switch (name) {
case 'lock':
return Consumer<LockProvider>(builder: (_, lockProvider, child) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
LockIcon(lockProvider.isLocked, size: 20.0),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(lockProvider.getLockTrait().name,
style: TextStyle(fontSize: 20, color: Colors.black))),
],
));
});
case 'power':
return Consumer<PowerTraitProvider>(builder: (_, powerProvider, child) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
PowerItemIcon(powerProvider.getOnOffState, size: 20.0),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
(powerProvider.getPowerTrait()?.name ??
'Power Switch'),
style: TextStyle(fontSize: 20))),
],
));
});
case 'battery_level':
return Consumer<BatteryLevelTraitProvider>(
builder: (_, batteryLevelTraitProvider, child) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
BatteryLevelIcon(
batteryLevelProvider.getBatteryLevel,
batteryLevelTraitProvider.getBatteryLevel,
size: 20.0,
color: Colors.white,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Battery Level: ${batteryLevelProvider.getBatteryLevel}%',
style: TextStyle(fontSize: 20, color: _getBatteryLevelColor(batteryLevelProvider.getBatteryLevel))),
'Battery Level: ${batteryLevelTraitProvider.getBatteryLevel}%',
style: TextStyle(
fontSize: 20,
color: _getBatteryLevelColor(
batteryLevelTraitProvider.getBatteryLevel))),
),
],
),
Expand All @@ -117,25 +178,25 @@ class DetailScreenWidget extends StatelessWidget {
children: [
UnknownItemIcon(
size: 20.0,
color: Colors.white,
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(name, style: TextStyle(fontSize: 20)),
child: Text(name,
style: TextStyle(fontSize: 20, color: Colors.black)),
),
],
),
);
}
}

Color _getBatteryLevelColor(int batteryLevel) {
static Color _getBatteryLevelColor(int batteryLevel) {
if (batteryLevel >= WidgetStyleConstants.batteryFullMin) {
return WidgetStyleConstants.globalSuccessColor;
} else if (batteryLevel <= WidgetStyleConstants.batteryLowMax) {
return WidgetStyleConstants.globalWarningColor;
} else {
return Colors.white;
return Colors.black;
}
}
}
3 changes: 2 additions & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ dependencies:
flutter:
sdk: flutter
bootstrap_icons: ^1.5.0
yonomi_platform_sdk: ^2.2.0
yonomi_platform_sdk:
path: ../yonomi-sdk-dart

dev_dependencies:
mockito: ^5.0.15
Expand Down

0 comments on commit e501169

Please sign in to comment.