Skip to content

Commit 6b6840f

Browse files
authored
add PowerSensor Screen (#142)
1 parent 0261ff6 commit 6b6840f

File tree

5 files changed

+79
-8
lines changed

5 files changed

+79
-8
lines changed

example/viam_robot_example_app/lib/main.dart

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,7 @@ import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
55
import 'package:viam_sdk/viam_sdk.dart';
66
import 'package:viam_sdk/widgets.dart';
77

8-
import 'screens/base.dart';
9-
import 'screens/board.dart';
10-
import 'screens/gripper.dart';
11-
import 'screens/motor.dart';
12-
import 'screens/movement_sensor.dart';
13-
import 'screens/sensor.dart';
14-
import 'screens/servo.dart';
15-
import 'screens/stream.dart';
8+
import 'screens/screens.dart';
169

1710
void main() async {
1811
await dotenv.load();
@@ -148,6 +141,7 @@ class _MyHomePageState extends State<MyHomePage> {
148141
Gripper.subtype.resourceSubtype,
149142
Motor.subtype.resourceSubtype,
150143
MovementSensor.subtype.resourceSubtype,
144+
PowerSensor.subtype.resourceSubtype,
151145
Sensor.subtype.resourceSubtype,
152146
Servo.subtype.resourceSubtype,
153147
].contains(rname.subtype);
@@ -180,6 +174,9 @@ class _MyHomePageState extends State<MyHomePage> {
180174
if (rname.subtype == Motor.subtype.resourceSubtype) {
181175
return MotorScreen(motor: Motor.fromRobot(_robot, rname.name), resourceName: rname);
182176
}
177+
if (rname.subtype == PowerSensor.subtype.resourceSubtype) {
178+
return PowerSensorScreen(powerSensor: PowerSensor.fromRobot(_robot, rname.name), resourceName: rname);
179+
}
183180
if (rname.subtype == Servo.subtype.resourceSubtype) {
184181
return ServoScreen(servo: Servo.fromRobot(_robot, rname.name), resourceName: rname);
185182
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
3+
import 'package:viam_sdk/viam_sdk.dart';
4+
import 'package:viam_sdk/widgets.dart';
5+
6+
class PowerSensorScreen extends StatelessWidget {
7+
final PowerSensor powerSensor;
8+
final ResourceName resourceName;
9+
10+
const PowerSensorScreen({super.key, required this.powerSensor, required this.resourceName});
11+
12+
Future<Map<String, dynamic>> _getReadings({Map<String, dynamic>? extra}) async {
13+
final Map<String, dynamic> readings = {};
14+
try {
15+
final voltage = await powerSensor.voltage();
16+
readings['voltage (volts)'] = voltage.volts;
17+
} catch (exception) {
18+
// Do nothing on error
19+
}
20+
21+
try {
22+
final power = await powerSensor.power();
23+
readings['power (watts)'] = power;
24+
} catch (exception) {
25+
// Do nothing on error
26+
}
27+
28+
try {
29+
final current = await powerSensor.current();
30+
readings['current (amps)'] = current.amperes;
31+
} catch (exception) {
32+
// Do nothing on error
33+
}
34+
35+
return readings;
36+
}
37+
38+
@override
39+
Widget build(BuildContext context) {
40+
return PlatformScaffold(
41+
appBar: PlatformAppBar(
42+
title: Text(resourceName.name.toUpperCase()),
43+
),
44+
iosContentPadding: true,
45+
body: Center(
46+
child: Column(
47+
children: [
48+
const Padding(padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0)),
49+
PlatformText(
50+
'${resourceName.namespace}:${resourceName.type}:${resourceName.subtype}/${resourceName.name}',
51+
style: const TextStyle(fontWeight: FontWeight.w300),
52+
),
53+
const Padding(padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0)),
54+
ViamRefreshableDataTable(getData: _getReadings),
55+
],
56+
),
57+
),
58+
);
59+
}
60+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export 'base.dart';
2+
export 'board.dart';
3+
export 'gripper.dart';
4+
export 'motor.dart';
5+
export 'movement_sensor.dart';
6+
export 'power_sensor.dart';
7+
export 'sensor.dart';
8+
export 'servo.dart';
9+
export 'stream.dart';

lib/src/resource/registry.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import '../components/motor/client.dart';
1616
import '../components/motor/motor.dart';
1717
import '../components/movement_sensor/client.dart';
1818
import '../components/movement_sensor/movement_sensor.dart';
19+
import '../components/power_sensor/client.dart';
20+
import '../components/power_sensor/power_sensor.dart';
1921
import '../components/sensor/client.dart';
2022
import '../components/sensor/sensor.dart';
2123
import '../components/servo/client.dart';
@@ -57,6 +59,7 @@ class Registry {
5759
registerSubtype(ResourceRegistration(Gripper.subtype, (name, channel) => GripperClient(name, channel)));
5860
registerSubtype(ResourceRegistration(Motor.subtype, (name, channel) => MotorClient(name, channel)));
5961
registerSubtype(ResourceRegistration(MovementSensor.subtype, (name, channel) => MovementSensorClient(name, channel)));
62+
registerSubtype(ResourceRegistration(PowerSensor.subtype, (name, channel) => PowerSensorClient(name, channel)));
6063
registerSubtype(ResourceRegistration(Sensor.subtype, (name, channel) => SensorClient(name, channel)));
6164
registerSubtype(ResourceRegistration(Servo.subtype, (name, channel) => ServoClient(name, channel)));
6265
}

lib/viam_sdk.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export 'src/components/motor/client.dart';
2222
export 'src/components/motor/motor.dart';
2323
export 'src/components/movement_sensor/client.dart';
2424
export 'src/components/movement_sensor/movement_sensor.dart';
25+
export 'src/components/power_sensor/client.dart';
26+
export 'src/components/power_sensor/power_sensor.dart';
2527
export 'src/components/sensor/client.dart';
2628
export 'src/components/sensor/sensor.dart';
2729
export 'src/components/servo/client.dart';

0 commit comments

Comments
 (0)