Skip to content

Commit

Permalink
fix: Add color to the trait builders
Browse files Browse the repository at this point in the history
  • Loading branch information
rlperez committed Apr 22, 2022
1 parent 74be08f commit cf07567
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 12 deletions.
16 changes: 11 additions & 5 deletions lib/traits/color_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import 'package:yonomi_platform_sdk/yonomi-sdk.dart';

class ColorWidget extends StatelessWidget {
final ColorProvider _colorProvider;
final Color _textColor = WidgetStyleConstants.darkTextColor;
final Color textColor;
final Color _iconColor = WidgetStyleConstants.deviceDetailIconColorActive;

ColorWidget(this._colorProvider, {Key? key}) : super(key: key);
ColorWidget(this._colorProvider,
{Key? key, this.textColor = WidgetStyleConstants.darkTextColor})
: super(key: key);

@override
Widget build(BuildContext context) {
Expand All @@ -25,7 +27,7 @@ class ColorWidget extends StatelessWidget {
style: Theme.of(context)
.textTheme
.headline6
?.copyWith(color: _textColor),
?.copyWith(color: textColor),
),
],
),
Expand All @@ -47,7 +49,11 @@ class ColorWidget extends StatelessWidget {
} else if (_colorProvider.isPerformingAction) {
return CircularProgressIndicator();
} else {
return UnknownItemIcon(size: 100, color: _iconColor);
return Icon(
BootstrapIcons.lightbulb,
size: 100,
color: _iconColor,
);
}
}

Expand All @@ -70,7 +76,7 @@ class ColorWidget extends StatelessWidget {
style: Theme.of(context)
.textTheme
.headline6
?.copyWith(color: _textColor),
?.copyWith(color: textColor),
),
IconButton(
onPressed: () {
Expand Down
14 changes: 14 additions & 0 deletions lib/traits/device_widget_factory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:yonomi_device_widgets/providers/battery_level_provider.dart';
import 'package:yonomi_device_widgets/providers/brightness_provider.dart';
import 'package:yonomi_device_widgets/providers/color_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/thermostat_provider.dart';
import 'package:yonomi_device_widgets/traits/battery_widget.dart';
import 'package:yonomi_device_widgets/traits/brightness_widget.dart';
import 'package:yonomi_device_widgets/traits/color_widget.dart';
import 'package:yonomi_device_widgets/traits/lock_widget.dart';
import 'package:yonomi_device_widgets/traits/power_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/battery_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/brightness_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/color_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/lock_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/power_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/thermostat_slim_widget.dart';
Expand Down Expand Up @@ -53,6 +56,10 @@ class DeviceWidgetFactory {
return BrightnessWidget(brightnessProvider, textColor: textColor);
},
);
case ColorTrait:
return Consumer<ColorProvider>(builder: (_, colorProvider, __) {
return ColorWidget(colorProvider, textColor: textColor);
});
default:
return UnknownWidget(name: trait.name, iconColor: iconColor);
}
Expand Down Expand Up @@ -98,6 +105,13 @@ class DeviceWidgetFactory {
backgroundColor: backgroundColor,
);
});
case ColorTrait:
return Consumer<ColorProvider>(builder: (_, colorTraitProvider, __) {
return ColorSlimWidget(
colorTraitProvider,
backgroundColor: backgroundColor,
);
});
default:
return UnknownSlimWidget(trait.name, backgroundColor: backgroundColor);
}
Expand Down
7 changes: 5 additions & 2 deletions lib/traits/slim/color_slim_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ import 'package:yonomi_platform_sdk/third_party/yonomi_graphql_schema/schema.doc
import 'package:yonomi_platform_sdk/yonomi-sdk.dart';

class ColorSlimWidget extends BaseSlimWidget {
ColorSlimWidget(ColorProvider _colorTraitProvider)
ColorSlimWidget(ColorProvider _colorTraitProvider,
{Key? key, Color backgroundColor = Colors.white70})
: super(
key: key,
backgroundColor: backgroundColor,
provider: _colorTraitProvider,
leftIcon: UnknownItemIcon(),
leftIcon: Icon(BootstrapIcons.lightbulb, color: WidgetStyleConstants.deviceIconColor,),
headerText: Text('Color'),
rightIcon: Builder(builder: ((context) {
return TextButton(
Expand Down
2 changes: 1 addition & 1 deletion test/traits/color_widget_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ main() {
final mockColorProvider = test.mockColorProvider(colorDevice);
await tester.pumpWidget(test.createMaterialApp(mockColorProvider));

expect(find.byIcon(BootstrapIcons.box), findsOneWidget);
expect(find.byIcon(BootstrapIcons.lightbulb), findsOneWidget);
expect(mockColorProvider.displayName, colorDevice.displayName);
expect(mockColorProvider.getColorTrait,
colorDevice.traits.firstWhere((t) => t is ColorTrait));
Expand Down
27 changes: 23 additions & 4 deletions test/traits/detail_screen_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:provider/provider.dart';
import 'package:yonomi_device_widgets/assets/traits/unknown_item_icon.dart';
import 'package:yonomi_device_widgets/providers/battery_level_provider.dart';
import 'package:yonomi_device_widgets/providers/brightness_provider.dart';
import 'package:yonomi_device_widgets/providers/color_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/thermostat_provider.dart';
Expand All @@ -18,6 +19,7 @@ import 'package:yonomi_device_widgets/traits/lock_widget.dart';
import 'package:yonomi_device_widgets/traits/power_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/battery_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/brightness_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/color_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/lock_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/power_slim_widget.dart';
import 'package:yonomi_device_widgets/traits/slim/thermostat_slim_widget.dart';
Expand All @@ -29,6 +31,8 @@ import 'package:yonomi_platform_sdk/yonomi-sdk.dart';
import '../components/modes_toolbar_test.mocks.dart';
import '../mixins/brightness_testing.dart';
import '../mixins/brightness_testing.mocks.dart';
import '../mixins/color_testing.dart';
import '../mixins/color_testing.mocks.dart';
import 'detail_screen_test.mocks.dart';
import '../mixins/battery_testing.dart';
import '../mixins/device_testing.dart';
Expand All @@ -43,7 +47,8 @@ class DetailScreenTest
LockTesting,
BatteryTesting,
ThermostatTesting,
BrightnessTesting {
BrightnessTesting,
ColorTesting {
Widget createDetailScreenWhenLoading(
Request req,
String deviceId,
Expand All @@ -59,7 +64,8 @@ class DetailScreenTest
MockPowerTraitProvider(),
MockBatteryLevelProvider(),
MockThermostatProvider(),
MockBrightnessProvider());
MockBrightnessProvider(),
MockColorProvider());
}

Widget createDetailScreenWidgetForTraits(
Expand Down Expand Up @@ -113,6 +119,12 @@ class DetailScreenTest
MockBrightnessProvider mockBrightnessProvider =
this.mockBrightnessProvider(brightnessDevice);

final colorDevice = devices.firstWhere(
(device) => device is TestColorDevice,
orElse: () => TestColorDevice(device,
colorTrait: ColorTrait(HSBColor(130, 50, 50)))) as TestColorDevice;
final mockColorProvider = this.mockColorProvider(colorDevice);

return createMaterialApp(
req,
deviceId,
Expand All @@ -121,7 +133,8 @@ class DetailScreenTest
mockPowerTraitProvider,
mockBatteryTraitProvider,
mockThermostatProvider,
mockBrightnessProvider);
mockBrightnessProvider,
mockColorProvider);
}

MaterialApp createMaterialApp(
Expand All @@ -132,7 +145,8 @@ class DetailScreenTest
PowerTraitProvider mockPowerTraitProvider,
BatteryLevelProvider mockBatteryLevelProvider,
ThermostatProvider mockThermostatProvider,
MockBrightnessProvider mockBrightnessProvider) {
BrightnessProvider mockBrightnessProvider,
ColorProvider mockColorProvider) {
return MaterialApp(
home: SingleChildScrollView(
child: Column(children: [
Expand All @@ -149,6 +163,8 @@ class DetailScreenTest
value: mockThermostatProvider),
ChangeNotifierProvider<BrightnessProvider>.value(
value: mockBrightnessProvider),
ChangeNotifierProvider<ColorProvider>.value(
value: mockColorProvider),
],
child: DetailScreenWidget(req, deviceId),
),
Expand All @@ -162,6 +178,7 @@ class DetailScreenTest
LockProvider,
PowerTraitProvider,
BatteryLevelProvider,
ColorProvider,
BuildContext
])
void main() {
Expand Down Expand Up @@ -301,6 +318,7 @@ void main() {
TestThermostatDevice(device,
targetTemperature: 99.0, ambientTemperature: 89.0),
TestBrightnessDevice(device, brightness: 50),
TestColorDevice(device, colorTrait: ColorTrait(HSBColor(150, 50, 50))),
], request, testedDeviceId));

expect(find.byType(LockWidget), findsOneWidget);
Expand All @@ -310,6 +328,7 @@ void main() {
expect(find.byType(PowerSlimWidget), findsOneWidget);
expect(find.byType(ThermostatSlimWidget), findsOneWidget);
expect(find.byType(BrightnessSlimWidget), findsOneWidget);
expect(find.byType(ColorSlimWidget), findsOneWidget);

expect(find.byType(MultiProvider), findsOneWidget);

Expand Down

0 comments on commit cf07567

Please sign in to comment.