simple_sensor 0.1.7 copy "simple_sensor: ^0.1.7" to clipboard
simple_sensor: ^0.1.7 copied to clipboard

Flutter plugin for accessing the Android and iOS accelerometer, gyroscope, magnetometer, and orientation sensors.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:vector_math/vector_math_64.dart' hide Colors;
import 'package:simple_sensor/simple_sensor.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Vector3 _accelerometer = Vector3.zero();
  Vector3 _gyroscope = Vector3.zero();
  Vector3 _magnetometer = Vector3.zero();
  Vector3 _userAaccelerometer = Vector3.zero();
  Vector3 _orientation = Vector3.zero();
  Vector3 _absoluteOrientation = Vector3.zero();
  Vector3 _absoluteOrientation2 = Vector3.zero();
  double? _screenOrientation = 0;

  int? _groupValue = 0;

  @override
  void initState() {
    super.initState();
    simpleSensor.gyroscope.listen((GyroscopeEvent event) {
      setState(() {
        _gyroscope.setValues(event.x, event.y, event.z);
      });
    });
    simpleSensor.accelerometer.listen((AccelerometerEvent event) {
      setState(() {
        _accelerometer.setValues(event.x, event.y, event.z);
      });
    });
    simpleSensor.userAccelerometer.listen((UserAccelerometerEvent event) {
      setState(() {
        _userAaccelerometer.setValues(event.x, event.y, event.z);
      });
    });
    simpleSensor.magnetometer.listen((MagnetometerEvent event) {
      setState(() {
        _magnetometer.setValues(event.x, event.y, event.z);
        var matrix = simpleSensor.getRotationMatrix(_accelerometer, _magnetometer);
        _absoluteOrientation2.setFrom(simpleSensor.getOrientation(matrix));
      });
    });
    simpleSensor.isOrientationAvailable().then((available) {
      if (available) {
        simpleSensor.orientation.listen((OrientationEvent event) {
          setState(() {
            _orientation.setValues(event.yaw, event.pitch, event.roll);
          });
        });
      }
    });
    simpleSensor.absoluteOrientation.listen((AbsoluteOrientationEvent event) {
      setState(() {
        _absoluteOrientation.setValues(event.yaw, event.pitch, event.roll);
      });
    });
    simpleSensor.screenOrientation.listen((ScreenOrientationEvent event) {
      setState(() {
        _screenOrientation = event.angle;
      });
    });
  }

  void setUpdateInterval(int? groupValue, int interval) {
    simpleSensor.accelerometerUpdateInterval = interval;
    simpleSensor.userAccelerometerUpdateInterval = interval;
    simpleSensor.gyroscopeUpdateInterval = interval;
    simpleSensor.magnetometerUpdateInterval = interval;
    simpleSensor.orientationUpdateInterval = interval;
    simpleSensor.absoluteOrientationUpdateInterval = interval;
    setState(() {
      _groupValue = groupValue;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Simple Sensor'),
        ),
        body: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Update Interval'),
              Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Radio(
                    value: 1,
                    groupValue: _groupValue,
                    onChanged: (dynamic value) => setUpdateInterval(value, Duration.microsecondsPerSecond ~/ 1),
                  ),
                  Text("1 FPS"),
                  Radio(
                    value: 2,
                    groupValue: _groupValue,
                    onChanged: (dynamic value) => setUpdateInterval(value, Duration.microsecondsPerSecond ~/ 30),
                  ),
                  Text("30 FPS"),
                  Radio(
                    value: 3,
                    groupValue: _groupValue,
                    onChanged: (dynamic value) => setUpdateInterval(value, Duration.microsecondsPerSecond ~/ 60),
                  ),
                  Text("60 FPS"),
                ],
              ),
              Text('Accelerometer'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${_accelerometer.x.toStringAsFixed(4)}'),
                  Text('${_accelerometer.y.toStringAsFixed(4)}'),
                  Text('${_accelerometer.z.toStringAsFixed(4)}'),
                ],
              ),
              Text('Magnetometer'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${_magnetometer.x.toStringAsFixed(4)}'),
                  Text('${_magnetometer.y.toStringAsFixed(4)}'),
                  Text('${_magnetometer.z.toStringAsFixed(4)}'),
                ],
              ),
              Text('Gyroscope'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${_gyroscope.x.toStringAsFixed(4)}'),
                  Text('${_gyroscope.y.toStringAsFixed(4)}'),
                  Text('${_gyroscope.z.toStringAsFixed(4)}'),
                ],
              ),
              Text('User Accelerometer'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${_userAaccelerometer.x.toStringAsFixed(4)}'),
                  Text('${_userAaccelerometer.y.toStringAsFixed(4)}'),
                  Text('${_userAaccelerometer.z.toStringAsFixed(4)}'),
                ],
              ),
              Text('Orientation'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${degrees(_orientation.x).toStringAsFixed(4)}'),
                  Text('${degrees(_orientation.y).toStringAsFixed(4)}'),
                  Text('${degrees(_orientation.z).toStringAsFixed(4)}'),
                ],
              ),
              Text('Absolute Orientation'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${degrees(_absoluteOrientation.x).toStringAsFixed(4)}'),
                  Text('${degrees(_absoluteOrientation.y).toStringAsFixed(4)}'),
                  Text('${degrees(_absoluteOrientation.z).toStringAsFixed(4)}'),
                ],
              ),
              Text('Orientation (accelerometer + magnetometer)'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${degrees(_absoluteOrientation2.x).toStringAsFixed(4)}'),
                  Text('${degrees(_absoluteOrientation2.y).toStringAsFixed(4)}'),
                  Text('${degrees(_absoluteOrientation2.z).toStringAsFixed(4)}'),
                ],
              ),
              Text('Screen Orientation'),
              Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  Text('${_screenOrientation!.toStringAsFixed(4)}'),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
4
likes
150
points
105
downloads

Publisher

unverified uploader

Weekly Downloads

Flutter plugin for accessing the Android and iOS accelerometer, gyroscope, magnetometer, and orientation sensors.

Repository (GitHub)

Documentation

API reference

License

Apache-2.0 (license)

Dependencies

cupertino_icons, flutter, vector_math

More

Packages that depend on simple_sensor