Skip to content

Commit

Permalink
Merge branch 'main' into powersensor
Browse files Browse the repository at this point in the history
  • Loading branch information
oliviamiller committed Aug 2, 2023
2 parents a2baf28 + c36161b commit eb62f8d
Show file tree
Hide file tree
Showing 63 changed files with 2,134 additions and 329 deletions.
1 change: 1 addition & 0 deletions example/viam_example_app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.env
29 changes: 18 additions & 11 deletions example/viam_example_app/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:viam_example_app/screens/base.dart';
import 'package:viam_example_app/screens/board.dart';
Expand All @@ -8,8 +9,10 @@ import 'package:viam_example_app/screens/sensor.dart';
import 'package:viam_example_app/screens/servo.dart';
import 'package:viam_example_app/screens/stream.dart';
import 'package:viam_sdk/viam_sdk.dart';
import 'package:viam_sdk/widgets.dart';

void main() {
void main() async {
await dotenv.load();
runApp(const MyApp());
}

Expand Down Expand Up @@ -91,8 +94,8 @@ class _MyHomePageState extends State<MyHomePage> {
_loading = true;
});
final robotFut = RobotClient.atAddress(
'<URL>',
RobotClientOptions.withLocationSecret('<SECRET>'),
dotenv.env['ROBOT_LOCATION'] ?? '',
RobotClientOptions.withLocationSecret(dotenv.env['LOCATION_SECRET'] ?? ''),
);

robotFut.then((value) {
Expand Down Expand Up @@ -138,9 +141,9 @@ class _MyHomePageState extends State<MyHomePage> {
if (rname.subtype == Base.subtype.resourceSubtype && _cameraName != null) {
return BaseScreen(
base: Base.fromRobot(_robot, rname.name),
resourceName: rname,
camera: Camera.fromRobot(_robot, _cameraName!.name),
streamClient: _getStream(_cameraName!));
cameras:
_robot.resourceNames.where((e) => e.subtype == Camera.subtype.resourceSubtype).map((e) => Camera.fromRobot(_robot, e.name)),
robot: _robot);
}
if (rname.subtype == Board.subtype.resourceSubtype) {
return BoardScreen(board: Board.fromRobot(_robot, rname.name), resourceName: rname);
Expand Down Expand Up @@ -198,11 +201,15 @@ class _MyHomePageState extends State<MyHomePage> {
])
: _loading
? PlatformCircularProgressIndicator()
: PlatformElevatedButton(
onPressed: () {
_login();
},
child: const Text('Login')),
: Column(children: [
ViamButton(
onPressed: _login,
text: 'Login',
role: ViamButtonRole.inverse,
style: ViamButtonFillStyle.filled,
size: ViamButtonSizeClass.xl,
)
])
],
),
),
Expand Down
20 changes: 8 additions & 12 deletions example/viam_example_app/lib/screens/base.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import 'package:flutter/material.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:viam_sdk/viam_sdk.dart';
import 'package:viam_sdk/widgets.dart';

class BaseScreen extends StatelessWidget {
final Base base;
final ResourceName resourceName;
final Camera camera;
final StreamClient streamClient;
final Iterable<Camera> cameras;
final RobotClient robot;

// TODO change BaseScreen to accept camera ResourceName.
const BaseScreen({Key? key, required this.base, required this.resourceName, required this.camera, required this.streamClient})
: super(key: key);
const BaseScreen({Key? key, required this.base, required this.cameras, required this.robot}) : super(key: key);

@override
Widget build(BuildContext context) {
Expand All @@ -20,12 +18,10 @@ class BaseScreen extends StatelessWidget {
),
iosContentPadding: true,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
CameraStreamView(camera: camera, streamClient: streamClient),
BaseJoystick(base: base),
],
child: ViamBaseScreen(
base: base,
cameras: cameras,
robotClient: robot,
),
),
);
Expand Down
75 changes: 6 additions & 69 deletions example/viam_example_app/lib/screens/board.dart
Original file line number Diff line number Diff line change
@@ -1,94 +1,31 @@
import 'package:flutter/material.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:viam_sdk/viam_sdk.dart';
import 'package:viam_sdk/widgets/resources/board.dart';

class BoardScreen extends StatefulWidget {
class BoardScreen extends StatelessWidget {
final Board board;
final ResourceName resourceName;

const BoardScreen({Key? key, required this.board, required this.resourceName}) : super(key: key);

@override
State<BoardScreen> createState() {
return _BoardScreenState();
}
}

class _BoardScreenState extends State<BoardScreen> {
String getPin = '';
String setPin = '';
bool high = false;
late BoardStatus status = const BoardStatus(<String, int>{}, <String, int>{});

Future<void> _fetchStatus() async {
status = await widget.board.status();
setState(() {});
}

@override
void initState() {
super.initState();
_fetchStatus();
}

@override
Widget build(BuildContext context) {
Widget build(Object context) {
return PlatformScaffold(
appBar: PlatformAppBar(
title: Text(widget.resourceName.name.toUpperCase()),
title: Text(resourceName.name.toUpperCase()),
),
iosContentPadding: true,
body: Center(
child: Column(
children: [
const SizedBox(height: 16),
PlatformText(
'${widget.resourceName.namespace}:${widget.resourceName.type}:${widget.resourceName.subtype}/${widget.resourceName.name}',
'${resourceName.namespace}:${resourceName.type}:${resourceName.subtype}/${resourceName.name}',
style: const TextStyle(fontWeight: FontWeight.w300),
),
const SizedBox(height: 16),
PlatformText(
'Analogs: ${status.analogs}',
style: const TextStyle(fontWeight: FontWeight.w300),
),
const SizedBox(height: 16),
PlatformText(
'Digital Interrupts: ${status.digitalInterrupts}',
style: const TextStyle(fontWeight: FontWeight.w300),
),
const SizedBox(height: 16),
Text('GPIO', style: Theme.of(context).textTheme.headlineSmall),
Row(
children: [
const Spacer(),
Expanded(
child: TextFormField(
onChanged: (value) => setPin = value,
decoration: const InputDecoration(
border: UnderlineInputBorder(),
labelText: 'Pin',
),
),
),
const Spacer(),
DropdownButton(
value: high,
items: const [
DropdownMenuItem(value: true, child: Text('High')),
DropdownMenuItem(value: false, child: Text('Low')),
],
onChanged: ((value) => setState(() {
high = value!;
})),
),
const Spacer()
],
),
const SizedBox(height: 16),
PlatformElevatedButton(
child: const Text('Set Pin State'),
onPressed: () => widget.board.setGpioState(setPin, high),
)
ViamBoardWidget(board: board)
],
),
),
Expand Down
34 changes: 5 additions & 29 deletions example/viam_example_app/lib/screens/sensor.dart
Original file line number Diff line number Diff line change
@@ -1,55 +1,31 @@
import 'package:flutter/material.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:viam_sdk/viam_sdk.dart';
import 'package:viam_sdk/widgets.dart';

class SensorScreen extends StatefulWidget {
class SensorScreen extends StatelessWidget {
final Sensor sensor;
final ResourceName resourceName;

const SensorScreen({Key? key, required this.sensor, required this.resourceName}) : super(key: key);

@override
State<SensorScreen> createState() {
return _SensorScreenState();
}
}

class _SensorScreenState extends State<SensorScreen> {
Map<String, dynamic> readings = {};

void _getReadings() {
final readingsFut = widget.sensor.readings();
readingsFut.then((value) => setState(
() {
readings = value;
},
));
}

@override
Widget build(BuildContext context) {
return PlatformScaffold(
appBar: PlatformAppBar(
title: Text(widget.resourceName.name.toUpperCase()),
title: Text(resourceName.name.toUpperCase()),
),
iosContentPadding: true,
body: Center(
child: Column(
children: [
const Padding(padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0)),
PlatformText(
'${widget.resourceName.namespace}:${widget.resourceName.type}:${widget.resourceName.subtype}/${widget.resourceName.name}',
'${resourceName.namespace}:${resourceName.type}:${resourceName.subtype}/${resourceName.name}',
style: const TextStyle(fontWeight: FontWeight.w300),
),
const Padding(padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0)),
DataTable(
columns: const <DataColumn>[DataColumn(label: Text('Reading')), DataColumn(label: Text('Value'))],
rows: readings.keys.map((e) => DataRow(cells: [DataCell(Text(e)), DataCell(Text(readings[e].toString()))])).toList()),
const Padding(padding: EdgeInsets.symmetric(vertical: 8, horizontal: 0)),
PlatformElevatedButton(
child: const Text('Get readings'),
onPressed: () => _getReadings(),
)
ViamSensorWidget(sensor: sensor),
],
),
),
Expand Down
3 changes: 2 additions & 1 deletion example/viam_example_app/lib/screens/stream.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
import 'package:image/image.dart' as img;
import 'package:viam_sdk/viam_sdk.dart';
import 'package:viam_sdk/widgets.dart';

class StreamScreen extends StatefulWidget {
final Camera camera;
Expand Down Expand Up @@ -81,7 +82,7 @@ class _StreamScreenState extends State<StreamScreen> {
style: const TextStyle(fontWeight: FontWeight.w300),
),
const SizedBox(height: 16),
CameraStreamView(camera: widget.camera, streamClient: widget.client),
ViamCameraStreamView(camera: widget.camera, streamClient: widget.client),
const SizedBox(height: 16),
if (_imgLoaded) Image.memory(Uint8List.view(imageBytes!.buffer), scale: 3),
const SizedBox(height: 16),
Expand Down
7 changes: 5 additions & 2 deletions example/viam_example_app/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: viam_example_app
description: An example app using Viam's Flutter SDK
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
publish_to: "none" # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
sdk: '>=3.0.0 <4.0.0'
sdk: ">=3.0.0 <4.0.0"

dependencies:
flutter:
Expand All @@ -16,6 +16,7 @@ dependencies:
flutter_platform_widgets: ^3.2.1
flutter_webrtc: ^0.9.35
image: ^4.0.17
flutter_dotenv: ^5.1.0

dev_dependencies:
flutter_launcher_icons: ^0.13.1
Expand All @@ -25,6 +26,8 @@ dev_dependencies:

flutter:
uses-material-design: true
assets:
- .env

flutter_launcher_icons:
android: "launcher_icon"
Expand Down
4 changes: 2 additions & 2 deletions lib/protos/app/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.app;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/v1/app.pbenum.dart';
export '../../../src/gen/app/v1/app.pbjson.dart';
export '../../../src/gen/app/v1/app.pb.dart';
export '../../../src/gen/app/v1/app.pbenum.dart';
export '../../../src/gen/app/v1/app.pbgrpc.dart';
export '../../../src/gen/app/v1/app.pbjson.dart';
4 changes: 2 additions & 2 deletions lib/protos/app/billing.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.billing;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/v1/billing.pb.dart';
export '../../../src/gen/app/v1/billing.pbenum.dart';
export '../../../src/gen/app/v1/billing.pbjson.dart';
export '../../../src/gen/app/v1/billing.pbgrpc.dart';
export '../../../src/gen/app/v1/billing.pb.dart';
export '../../../src/gen/app/v1/billing.pbjson.dart';
4 changes: 2 additions & 2 deletions lib/protos/app/cloud_slam.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.cloud_slam;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pbjson.dart';
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pbgrpc.dart';
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pb.dart';
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pbenum.dart';
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pbgrpc.dart';
export '../../../src/gen/app/cloudslam/v1/cloud_slam.pbjson.dart';
4 changes: 2 additions & 2 deletions lib/protos/app/data.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.data;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/data/v1/data.pbenum.dart';
export '../../../src/gen/app/data/v1/data.pb.dart';
export '../../../src/gen/app/data/v1/data.pbjson.dart';
export '../../../src/gen/app/data/v1/data.pbenum.dart';
export '../../../src/gen/app/data/v1/data.pbgrpc.dart';
export '../../../src/gen/app/data/v1/data.pbjson.dart';
2 changes: 1 addition & 1 deletion lib/protos/app/data_sync.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.data_sync;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/datasync/v1/data_sync.pb.dart';
export '../../../src/gen/app/datasync/v1/data_sync.pbenum.dart';
export '../../../src/gen/app/datasync/v1/data_sync.pbgrpc.dart';
export '../../../src/gen/app/datasync/v1/data_sync.pbjson.dart';
export '../../../src/gen/app/datasync/v1/data_sync.pb.dart';
2 changes: 1 addition & 1 deletion lib/protos/app/ml_training.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.ml_training;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/mltraining/v1/ml_training.pb.dart';
export '../../../src/gen/app/mltraining/v1/ml_training.pbenum.dart';
export '../../../src/gen/app/mltraining/v1/ml_training.pbgrpc.dart';
export '../../../src/gen/app/mltraining/v1/ml_training.pb.dart';
export '../../../src/gen/app/mltraining/v1/ml_training.pbjson.dart';
4 changes: 2 additions & 2 deletions lib/protos/app/packages.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ library viam_protos.app.packages;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/packages/v1/packages.pbjson.dart';
export '../../../src/gen/app/packages/v1/packages.pb.dart';
export '../../../src/gen/app/packages/v1/packages.pbgrpc.dart';
export '../../../src/gen/app/packages/v1/packages.pbenum.dart';
export '../../../src/gen/app/packages/v1/packages.pbgrpc.dart';
export '../../../src/gen/app/packages/v1/packages.pbjson.dart';
4 changes: 2 additions & 2 deletions lib/protos/app/robot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ library viam_protos.app.robot;
// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/app/v1/robot.pb.dart';
export '../../../src/gen/app/v1/robot.pbjson.dart';
export '../../../src/gen/app/v1/robot.pbgrpc.dart';
export '../../../src/gen/app/v1/robot.pbenum.dart';
export '../../../src/gen/app/v1/robot.pbgrpc.dart';
export '../../../src/gen/app/v1/robot.pbjson.dart';
2 changes: 1 addition & 1 deletion lib/protos/common/common.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ library viam_protos.common.common;

// THIS FILE IS AUTOMATICALLY GENERATED
// DO NOT OVERWRITE
export '../../../src/gen/common/v1/common.pbenum.dart';
export '../../../src/gen/common/v1/common.pb.dart';
export '../../../src/gen/common/v1/common.pbenum.dart';
export '../../../src/gen/common/v1/common.pbjson.dart';
Loading

0 comments on commit eb62f8d

Please sign in to comment.