From 8778d6cf554fce636c25d32b27c76926d11d176e Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Fri, 30 Jul 2021 23:58:24 -0500
Subject: [PATCH 1/9] feat(sensors_plus): add magnetometer support
Added necessary Android, iOS, and web API for magnetometer sensor.
Adds new `MagnetometerEvent` class
(and fixes small typo in constructor of other `FooEvent` classes).
Adds new `Stream` called `magnetometerEvents`.
---
.../sensors_plus/sensors_plus/CHANGELOG.md | 4 ++
packages/sensors_plus/sensors_plus/README.md | 30 +++++---
.../plus/sensors/SensorsPlugin.java | 11 +++
.../plus/sensors/StreamHandlerImpl.java | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 3 +-
.../sensors_plus/example/lib/main.dart | 21 ++++++
.../ios/Classes/FLTSensorsPlusPlugin.h | 3 +
.../ios/Classes/FLTSensorsPlusPlugin.m | 27 +++++++
.../sensors_plus/ios/sensors_plus.podspec | 16 ++---
.../sensors_plus/lib/sensors_plus.dart | 5 ++
.../sensors_plus/lib/src/sensors.dart | 6 ++
.../sensors_plus/sensors_plus/pubspec.yaml | 10 +--
.../sensors_plus/test/sensors_test.dart | 12 ++++
.../CHANGELOG.md | 4 ++
.../sensors_plus_platform_interface/README.md | 4 +-
.../lib/sensors_plus_platform_interface.dart | 7 ++
.../lib/src/accelerometer_event.dart | 2 +-
.../lib/src/gyroscope_event.dart | 2 +-
.../lib/src/magnetometer_event.dart | 20 ++++++
.../lib/src/method_channel_sensors.dart | 15 ++++
.../lib/src/user_accelerometer_event.dart | 2 +-
.../pubspec.yaml | 2 +-
.../sensors_plus_platform_interface_test.dart | 17 +++++
.../sensors_plus_web/CHANGELOG.md | 4 ++
.../sensors_plus/sensors_plus_web/README.md | 4 +-
.../lib/sensors_plus_web.dart | 5 ++
.../sensors_plus_web/lib/src/sensors.dart | 70 ++++++++++++++++---
.../sensors_plus_web/lib/src/utils.dart | 15 ++--
.../sensors_plus_web/pubspec.yaml | 4 +-
29 files changed, 284 insertions(+), 47 deletions(-)
create mode 100644 packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
diff --git a/packages/sensors_plus/sensors_plus/CHANGELOG.md b/packages/sensors_plus/sensors_plus/CHANGELOG.md
index fba091e699..28759a258d 100644
--- a/packages/sensors_plus/sensors_plus/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.2
- Android: migrate to mavenCentral
diff --git a/packages/sensors_plus/sensors_plus/README.md b/packages/sensors_plus/sensors_plus/README.md
index c8d35da6c3..5278df0ee9 100644
--- a/packages/sensors_plus/sensors_plus/README.md
+++ b/packages/sensors_plus/sensors_plus/README.md
@@ -7,20 +7,22 @@
-A Flutter plugin to access the accelerometer and gyroscope sensors.
+
+A Flutter plugin to access the accelerometer, gyroscope, and magnetometer
+sensors.
## Platform Support
-| Android | iOS | MacOS | Web | Linux | Windows |
-| :-----: | :-: | :---: | :-: | :---: | :----: |
-| ✔️ | ✔️ | | ✔️ | | |
+| Android | iOS | MacOS | Web | Linux | Windows |
+| :-----: | :---: | :---: | :---: | :---: | :-----: |
+| ✔️ | ✔️ | | ✔️ | | |
## Usage
To use this plugin, add `sensors_plus` as a [dependency in your pubspec.yaml
file](https://plus.fluttercommunity.dev/docs/overview).
-This will expose three classes of sensor events, through three different
+This will expose four classes of sensor events through four different
streams.
- `AccelerometerEvent`s describe the velocity of the device, including the
@@ -30,9 +32,12 @@ streams.
include gravity. They can also be thought of as just the user's affect on the
device.
- `GyroscopeEvent`s describe the rotation of the device.
+- `MagnetometerEvent`s describe the ambient magnetic field surrounding the
+ device. A compass is an example usage of this data.
Each of these is exposed through a `BroadcastStream`: `accelerometerEvents`,
-`userAccelerometerEvents`, and `gyroscopeEvents`, respectively.
+`userAccelerometerEvents`, `gyroscopeEvents`, and `magnetometerEvents`,
+respectively.
### Example
@@ -54,11 +59,20 @@ gyroscopeEvents.listen((GyroscopeEvent event) {
});
// [GyroscopeEvent (x: 0.0, y: 0.0, z: 0.0)]
+magnetometerEvents.listen((MagnetometerEvent event) {
+ print(event);
+});
+// [MagnetometerEvent (x: -23.6, y: 6.2, z: -34.9)]
+
```
Also see the `example` subdirectory for an example application that uses the
sensor data.
-Check out our documentation website to learn more. [Plus plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
+Check out our website to learn more: [Plus Plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
-**Important:** As of January 2021, the Flutter team is no longer accepting non-critical PRs for the original set of plugins in `flutter/plugins`, and instead they should be submitted in this project. [You can read more about this announcement here.](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note) as well as [in the Flutter 2 announcement blog post.](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65)
+**Important:** As of January 2021, the Flutter team is no longer accepting
+non-critical PRs for the original set of plugins in `flutter/plugins`, and
+instead they should be submitted in this project.
+[You can read more about this announcement here](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note)
+as well as [in the Flutter 2 announcement blog post](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65).
diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
index e4d7211ddb..ea32611853 100644
--- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
+++ b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
@@ -20,10 +20,13 @@ public class SensorsPlugin implements FlutterPlugin {
"dev.fluttercommunity.plus/sensors/gyroscope";
private static final String USER_ACCELEROMETER_CHANNEL_NAME =
"dev.fluttercommunity.plus/sensors/user_accel";
+ private static final String MAGNETOMETER_CHANNEL_NAME =
+ "dev.fluttercommunity.plus/sensors/magnetometer";
private EventChannel accelerometerChannel;
private EventChannel userAccelChannel;
private EventChannel gyroscopeChannel;
+ private EventChannel magnetometerChannel;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
@@ -63,11 +66,19 @@ private void setupEventChannels(Context context, BinaryMessenger messenger) {
(SensorManager) context.getSystemService(context.SENSOR_SERVICE),
Sensor.TYPE_GYROSCOPE);
gyroscopeChannel.setStreamHandler(gyroScopeStreamHandler);
+
+ magnetometerChannel = new EventChannel(messenger, MAGNETOMETER_CHANNEL_NAME);
+ final StreamHandlerImpl magnetometerStreamHandler =
+ new StreamHandlerImpl(
+ (SensorManager) context.getSystemService(context.SENSOR_SERVICE),
+ Sensor.TYPE_MAGNETIC_FIELD);
+ magnetometerChannel.setStreamHandler(magnetometerStreamHandler);
}
private void teardownEventChannels() {
accelerometerChannel.setStreamHandler(null);
userAccelChannel.setStreamHandler(null);
gyroscopeChannel.setStreamHandler(null);
+ magnetometerChannel.setStreamHandler(null);
}
}
diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
index 36a6d6017b..a651822687 100644
--- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
+++ b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
@@ -24,7 +24,11 @@ class StreamHandlerImpl implements EventChannel.StreamHandler {
@Override
public void onListen(Object arguments, EventChannel.EventSink events) {
sensorEventListener = createSensorEventListener(events);
- sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_NORMAL);
+ // TODO: Could allow developer to alter rate?
+ // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_FASTEST); // 0
+ // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_GAME); // 1
+ // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_UI); // 2
+ sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_NORMAL); // 3
}
@Override
diff --git a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
index 019065d1d6..c9aebbe14f 100644
--- a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,5 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
+# distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
diff --git a/packages/sensors_plus/sensors_plus/example/lib/main.dart b/packages/sensors_plus/sensors_plus/example/lib/main.dart
index fb33a4a129..72dc809b7f 100644
--- a/packages/sensors_plus/sensors_plus/example/lib/main.dart
+++ b/packages/sensors_plus/sensors_plus/example/lib/main.dart
@@ -44,6 +44,7 @@ class _MyHomePageState extends State {
List? _accelerometerValues;
List? _userAccelerometerValues;
List? _gyroscopeValues;
+ List? _magnetometerValues;
final _streamSubscriptions = >[];
@override
@@ -55,6 +56,8 @@ class _MyHomePageState extends State {
final userAccelerometer = _userAccelerometerValues
?.map((double v) => v.toStringAsFixed(1))
.toList();
+ final magnetometer =
+ _magnetometerValues?.map((double v) => v.toStringAsFixed(1)).toList();
return Scaffold(
appBar: AppBar(
@@ -106,6 +109,15 @@ class _MyHomePageState extends State {
],
),
),
+ Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text('Magnetometer: $magnetometer'),
+ ],
+ ),
+ ),
],
),
);
@@ -149,5 +161,14 @@ class _MyHomePageState extends State {
},
),
);
+ _streamSubscriptions.add(
+ magnetometerEvents.listen(
+ (MagnetometerEvent event) {
+ setState(() {
+ _magnetometerValues = [event.x, event.y, event.z];
+ });
+ },
+ ),
+ );
}
}
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
index 1cc3fa3ee0..70e48f9d9d 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
@@ -15,3 +15,6 @@
@interface FLTGyroscopeStreamHandlerPlus : NSObject
@end
+
+@interface FLTMagnetometerStreamHandlerPlus : NSObject
+@end
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index c3c91244bc..79d4113207 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -28,6 +28,13 @@ + (void)registerWithRegistrar:(NSObject*)registrar {
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/gyroscope"
binaryMessenger:[registrar messenger]];
[gyroscopeChannel setStreamHandler:gyroscopeStreamHandler];
+
+ FLTMagnetometerStreamHandlerPlus* magnetometerStreamHandler =
+ [[FLTMagnetometerStreamHandlerPlus alloc] init];
+ FlutterEventChannel* magnetometerChannel =
+ [FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/magnetometer"
+ binaryMessenger:[registrar messenger]];
+ [magnetometerChannel setStreamHandler:magnetometerStreamHandler];
}
@end
@@ -113,3 +120,23 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
}
@end
+
+@implementation FLTMagnetometerStreamHandlerPlus
+
+- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+ _initMotionManager();
+ [_motionManager
+ startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
+ withHandler:^(CMMagnetometerData* magData, NSError* error) {
+ CMMagneticField magneticField = magData.magneticField;
+ sendTriplet(magneticField.x, magneticField.y, magneticField.z, eventSink);
+ }];
+ return nil;
+}
+
+- (FlutterError*)onCancelWithArguments:(id)arguments {
+ [_motionManager stopMagnetometerUpdates];
+ return nil;
+}
+
+@end
diff --git a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
index 73c8dd7e87..3e59054339 100644
--- a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
+++ b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
@@ -3,21 +3,21 @@
#
Pod::Spec.new do |s|
s.name = 'sensors_plus'
- s.version = '0.0.1'
- s.summary = 'Flutter Sensors'
+ s.version = '0.1.0'
+ s.summary = 'Flutter Community: Sensors Plus'
s.description = <<-DESC
-A Flutter plugin to access the accelerometer and gyroscope sensors.
+Flutter plugin to access the accelerometer, gyroscope, and magnetometer sensors.
DESC
- s.homepage = 'https://github.com/flutter/plugins'
+ # Should update?
+ s.homepage = 'https://github.com/fluttercommunity/plus_plugins'
s.license = { :type => 'BSD', :file => '../LICENSE' }
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
- s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/sensors' }
- s.documentation_url = 'https://pub.dev/packages/sensors'
+ s.source = { :http => 'https://github.com/fluttercommunity/plus_plugins/tree/main/packages/sensors_plus' }
+ s.documentation_url = 'https://pub.dev/documentation/sensors_plus'
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
-
+
s.platform = :ios, '8.0'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
end
-
diff --git a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
index 592a4d6d47..1ace1d9615 100644
--- a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
+++ b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
@@ -21,3 +21,8 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
+
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return _sensors.magnetometerEvents;
+}
diff --git a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
index 414dea5fd1..59ac78cb8f 100644
--- a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
@@ -30,4 +30,10 @@ class Sensors extends SensorsPlatform {
Stream get userAccelerometerEvents {
return _platform.userAccelerometerEvents;
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ @override
+ Stream get magnetometerEvents {
+ return _platform.magnetometerEvents;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus/pubspec.yaml b/packages/sensors_plus/sensors_plus/pubspec.yaml
index 9d40c62fc3..e1180b5383 100644
--- a/packages/sensors_plus/sensors_plus/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus/pubspec.yaml
@@ -1,6 +1,8 @@
name: sensors_plus
-description: Flutter plugin for accessing accelerometer and gyroscope sensors.
-version: 1.0.2
+description: >
+ Flutter plugin for accessing accelerometer, gyroscope, and magnetometer
+ sensors.
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -18,8 +20,8 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_web: ^1.0.0
- sensors_plus_platform_interface: ^1.0.0
+ sensors_plus_web: ^1.1.0
+ sensors_plus_platform_interface: ^1.1.0
dev_dependencies:
test: ^1.16.4
diff --git a/packages/sensors_plus/sensors_plus/test/sensors_test.dart b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
index e0ec680257..2a98c1d9fc 100644
--- a/packages/sensors_plus/sensors_plus/test/sensors_test.dart
+++ b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
@@ -47,6 +47,18 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
+
+ test('$magnetometerEvents are streamed', () async {
+ const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
+ const sensorData = [8.0, 9.0, 10.0];
+ _initializeFakeSensorChannel(channelName, sensorData);
+
+ final event = await magnetometerEvents.first;
+
+ expect(event.x, sensorData[0]);
+ expect(event.y, sensorData[1]);
+ expect(event.z, sensorData[2]);
+ });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
index 2ebb784572..9c993a02fb 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/README.md b/packages/sensors_plus/sensors_plus_platform_interface/README.md
index 01bd1838fb..a104664723 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/README.md
+++ b/packages/sensors_plus/sensors_plus_platform_interface/README.md
@@ -8,5 +8,5 @@ A common platform interface for [`sensors_plus`](https://pub.dev/packages/sensor
## Usage
-This package is already included as part of the `sensors_plus` package dependency, and will
-be included when using `sensors_plus` as normal.
+This package is already included as part of the `sensors_plus` package
+dependency, and will be included when using `sensors_plus` as normal.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
index 1fe8b9c9aa..787e8c7e24 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
@@ -10,10 +10,12 @@ import 'package:sensors_plus_platform_interface/src/method_channel_sensors.dart'
import 'src/accelerometer_event.dart';
import 'src/gyroscope_event.dart';
import 'src/user_accelerometer_event.dart';
+import 'src/magnetometer_event.dart';
export 'src/accelerometer_event.dart';
export 'src/gyroscope_event.dart';
export 'src/user_accelerometer_event.dart';
+export 'src/magnetometer_event.dart';
/// The common platform interface for sensors.
abstract class SensorsPlatform extends PlatformInterface {
@@ -51,4 +53,9 @@ abstract class SensorsPlatform extends PlatformInterface {
throw UnimplementedError(
'userAccelerometerEvents has not been implemented.');
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ Stream get magnetometerEvents {
+ throw UnimplementedError('magnetometerEvents has not been implemented.');
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
index 4d53329ef5..57d688a4ba 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
@@ -7,7 +7,7 @@
/// simply, you can use accelerometer readings to tell if the device is moving in
/// a particular direction.
class AccelerometerEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
AccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (including gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
index 4413421019..59c90e4b85 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
@@ -5,7 +5,7 @@
/// Discrete reading from a gyroscope. Gyroscopes measure the rate or rotation of
/// the device in 3D space.
class GyroscopeEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
GyroscopeEvent(this.x, this.y, this.z);
/// Rate of rotation around the x axis measured in rad/s.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
new file mode 100644
index 0000000000..f7b4bb0513
--- /dev/null
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
@@ -0,0 +1,20 @@
+/// Sensor sample from a magnetometer.
+///
+/// Magnetometers measure the ambient magnetic field surrounding the sensor,
+/// returning values in microteslas ***μT*** for each three-dimensional axis.
+///
+/// Consider that these samples may bear effects of Earth's magnetic field as
+/// well as local factors such as the metal of the device itself or nearby
+/// magnets.
+///
+/// A compass is an example of a general utility for magnetometer data.
+class MagnetometerEvent {
+ /// Constructs an instance with the given [x], [y], and [z] values.
+ MagnetometerEvent(this.x, this.y, this.z);
+
+ /// The ambient magnetic field in this axis in microteslas ***μT***.
+ final double x, y, z;
+
+ @override
+ String toString() => '[MagnetometerEvent (x: $x, y: $y, z: $z)]';
+}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
index 77862c24fa..6fbeacac5d 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
@@ -18,9 +18,13 @@ class MethodChannelSensors extends SensorsPlatform {
static const EventChannel _gyroscopeEventChannel =
EventChannel('dev.fluttercommunity.plus/sensors/gyroscope');
+ static const EventChannel _magnetometerEventChannel =
+ EventChannel('dev.fluttercommunity.plus/sensors/magnetometer');
+
Stream? _accelerometerEvents;
Stream? _gyroscopeEvents;
Stream? _userAccelerometerEvents;
+ Stream? _magnetometerEvents;
/// A broadcast stream of events from the device accelerometer.
@override
@@ -56,4 +60,15 @@ class MethodChannelSensors extends SensorsPlatform {
});
return _userAccelerometerEvents!;
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ @override
+ Stream get magnetometerEvents {
+ _magnetometerEvents ??=
+ _magnetometerEventChannel.receiveBroadcastStream().map((dynamic event) {
+ final list = event.cast();
+ return MagnetometerEvent(list[0]!, list[1]!, list[2]!);
+ });
+ return _magnetometerEvents!;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
index 3950edb12a..c8d2fa8ded 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
@@ -6,7 +6,7 @@
/// and measures the velocity of the device. However, unlike
/// [AccelerometerEvent], this event does not include the effects of gravity.
class UserAccelerometerEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
UserAccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (excluding gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
index 9443481392..c6790a0920 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_platform_interface
description: A common platform interface for the sensors_plus plugin.
-version: 1.0.1
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
index 6d88e696d8..b7bff2dbf4 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
@@ -27,6 +27,11 @@ Stream get userAccelerometerEvents {
return methodChannel.userAccelerometerEvents;
}
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return methodChannel.magnetometerEvents;
+}
+
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -65,6 +70,18 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
+
+ test('$magnetometerEvents are streamed', () async {
+ const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
+ const sensorData = [8.0, 9.0, 10.0];
+ _initializeFakeSensorChannel(channelName, sensorData);
+
+ final event = await magnetometerEvents.first;
+
+ expect(event.x, sensorData[0]);
+ expect(event.y, sensorData[1]);
+ expect(event.z, sensorData[2]);
+ });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
index 2ebb784572..9c993a02fb 100644
--- a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_web/README.md b/packages/sensors_plus/sensors_plus_web/README.md
index 8b997ae29f..ba4b45df00 100644
--- a/packages/sensors_plus/sensors_plus_web/README.md
+++ b/packages/sensors_plus/sensors_plus_web/README.md
@@ -8,5 +8,5 @@ The Web implementation of [`sensors_plus`](https://pub.dev/packages/sensors_plus
## Usage
-This package is already included as part of the `sensors_plus` package dependency, and will
-be included when using `sensors_plus` as normal.
+This package is already included as part of the `sensors_plus` package
+dependency, and will be included when using `sensors_plus` as normal.
diff --git a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
index 39e5cccaa8..5bfae106cb 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
@@ -21,3 +21,8 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
+
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return _sensors.magnetometerEvents;
+}
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
index 963fc7d1fe..4cce55837b 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
@@ -1,6 +1,6 @@
import 'dart:async';
import 'dart:html' as html
- show LinearAccelerationSensor, Accelerometer, Gyroscope;
+ show LinearAccelerationSensor, Accelerometer, Gyroscope, Magnetometer;
import 'dart:js';
import 'dart:js_util';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
@@ -8,8 +8,8 @@ import 'package:sensors_plus_platform_interface/sensors_plus_platform_interface.
/// The sensors plugin.
class SensorsPlugin extends SensorsPlatform {
- /// Factory method that initializes the Sensors plugin platform with an instance
- /// of the plugin for the web.
+ /// Factory method that initializes the Sensors plugin platform with an
+ /// instance of the plugin for the web.
static void registerWith(Registrar registrar) {
SensorsPlatform.instance = SensorsPlugin();
}
@@ -37,11 +37,11 @@ class SensorsPlugin extends SensorsPlatform {
/// See the note above about feature policy.
print('$apiName construction was blocked by a feature policy.');
- /// if this feature is not supported or Flag is not enabled yet!
+ /// If this feature is not supported or Flag is not enabled yet
} else if (error.toString().contains('ReferenceError')) {
print('$apiName is not supported by the User Agent.');
- /// if this is unknown error, rethrow it
+ /// If this is unknown error, rethrow it
} else {
rethrow;
}
@@ -78,7 +78,9 @@ class SensorsPlugin extends SensorsPlatform {
_accelerometer.start();
_accelerometer.onError.forEach(
- (e) => print('The Api is supported but something is wrong! $e'),
+ (e) =>
+ print('[SensorsPlugin] API supported but something is wrong: '
+ 'Accelerometer $e'),
);
},
apiName: 'Accelerometer()',
@@ -124,7 +126,9 @@ class SensorsPlugin extends SensorsPlatform {
_gyroscope.start();
_gyroscope.onError.forEach(
- (e) => print('The Api is supported but something is wrong! $e'),
+ (e) =>
+ print('[SensorsPlugin] API supported but something is wrong: '
+ 'Gyroscope $e'),
);
},
apiName: 'Gyroscope()',
@@ -171,7 +175,9 @@ class SensorsPlugin extends SensorsPlatform {
_linearAccelerationSensor.start();
_linearAccelerationSensor.onError.forEach(
- (e) => print('The Api is supported but something is wrong! $e'),
+ (e) =>
+ print('[SensorsPlugin] API supported but something is wrong: '
+ 'LinearAccelerationSensor $e'),
);
},
apiName: 'LinearAccelerationSensor()',
@@ -187,4 +193,52 @@ class SensorsPlugin extends SensorsPlatform {
return _userAccelerometerResultStream;
}
+
+ StreamController? _magnetometerStreamController;
+ late Stream _magnetometerResultStream;
+
+ @override
+ Stream get magnetometerEvents {
+ if (_magnetometerStreamController == null) {
+ _magnetometerStreamController = StreamController();
+ _featureDetected(
+ () {
+ final _magnetometerSensor = html.Magnetometer();
+
+ setProperty(
+ _magnetometerSensor,
+ 'onreading',
+ allowInterop(
+ (_) {
+ _magnetometerStreamController!.add(
+ MagnetometerEvent(
+ _magnetometerSensor.x as double,
+ _magnetometerSensor.y as double,
+ _magnetometerSensor.z as double,
+ ),
+ );
+ },
+ ),
+ );
+
+ _magnetometerSensor.start();
+
+ _magnetometerSensor.onError.forEach(
+ (e) =>
+ print('[SensorsPlugin] API supported but something is wrong: '
+ 'Magnetometer $e'),
+ );
+ },
+ apiName: 'Magnetometer()',
+ premissionName: 'magnetometer',
+ onError: () {
+ _magnetometerStreamController!.add(MagnetometerEvent(0, 0, 0));
+ },
+ );
+ _magnetometerResultStream =
+ _magnetometerStreamController!.stream.asBroadcastStream();
+ }
+
+ return _magnetometerResultStream;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
index bd118984c1..e601081a00 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
@@ -1,16 +1,16 @@
import 'dart:html' as html;
-/// Receive premission status of the API
+/// Receive permission status of the API.
Future checkPremission(
Function initSensor, {
String? premissionName,
}) async {
final _premission = html.window.navigator.permissions;
- /// check if browser supports this API or support premission manager
+ // Check if browser supports this API or supports permission manager
if (_premission != null) {
try {
- /// request for permission or check premission status
+ // Request for permission or check premission status
final premissionStatus = await _premission.query(
{
'name': premissionName,
@@ -19,22 +19,23 @@ Future checkPremission(
if (premissionStatus.state == 'granted') {
initSensor();
} else if (premissionStatus.state == 'prompt') {
- /// user needs to intract with this
+ // User needs to intract with this
print(
'Premission [$premissionName] still has not been granted or denied.',
);
} else {
- /// if permission is denied, do not do anything
+ // If permission is denied, do not do anything
print('Permission [$premissionName] to use sensor was denied.');
}
} catch (e) {
print(
- 'Integration with Permissions API is not enabled, still try to start app.',
+ 'Integration with Permissions API is not enabled; '
+ 'still trying to start app.',
);
initSensor();
}
} else {
- print('No Permissions API, still try to start app.');
+ print('No Permissions API; still trying to start app.');
initSensor();
}
}
diff --git a/packages/sensors_plus/sensors_plus_web/pubspec.yaml b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
index 6652f578c7..f735b4f3d6 100644
--- a/packages/sensors_plus/sensors_plus_web/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_web
description: The web implementation of sensors_plus
-version: 1.0.1
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -18,7 +18,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_platform_interface: ^1.0.0
+ sensors_plus_platform_interface: ^1.1.0
flutter_web_plugins:
sdk: flutter
From 14386c7108c180ed5594059a1975d65752233531 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Sat, 31 Jul 2021 10:56:31 -0500
Subject: [PATCH 2/9] Revert "feat(sensors_plus): add magnetometer support"
This reverts commit 8778d6cf554fce636c25d32b27c76926d11d176e.
---
.../sensors_plus/sensors_plus/CHANGELOG.md | 4 --
packages/sensors_plus/sensors_plus/README.md | 30 +++-----
.../plus/sensors/SensorsPlugin.java | 11 ---
.../plus/sensors/StreamHandlerImpl.java | 6 +-
.../gradle/wrapper/gradle-wrapper.properties | 3 +-
.../sensors_plus/example/lib/main.dart | 21 ------
.../ios/Classes/FLTSensorsPlusPlugin.h | 3 -
.../ios/Classes/FLTSensorsPlusPlugin.m | 27 -------
.../sensors_plus/ios/sensors_plus.podspec | 16 ++---
.../sensors_plus/lib/sensors_plus.dart | 5 --
.../sensors_plus/lib/src/sensors.dart | 6 --
.../sensors_plus/sensors_plus/pubspec.yaml | 10 ++-
.../sensors_plus/test/sensors_test.dart | 12 ----
.../CHANGELOG.md | 4 --
.../sensors_plus_platform_interface/README.md | 4 +-
.../lib/sensors_plus_platform_interface.dart | 7 --
.../lib/src/accelerometer_event.dart | 2 +-
.../lib/src/gyroscope_event.dart | 2 +-
.../lib/src/magnetometer_event.dart | 20 ------
.../lib/src/method_channel_sensors.dart | 15 ----
.../lib/src/user_accelerometer_event.dart | 2 +-
.../pubspec.yaml | 2 +-
.../sensors_plus_platform_interface_test.dart | 17 -----
.../sensors_plus_web/CHANGELOG.md | 4 --
.../sensors_plus/sensors_plus_web/README.md | 4 +-
.../lib/sensors_plus_web.dart | 5 --
.../sensors_plus_web/lib/src/sensors.dart | 70 +++----------------
.../sensors_plus_web/lib/src/utils.dart | 15 ++--
.../sensors_plus_web/pubspec.yaml | 4 +-
29 files changed, 47 insertions(+), 284 deletions(-)
delete mode 100644 packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
diff --git a/packages/sensors_plus/sensors_plus/CHANGELOG.md b/packages/sensors_plus/sensors_plus/CHANGELOG.md
index 28759a258d..fba091e699 100644
--- a/packages/sensors_plus/sensors_plus/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus/CHANGELOG.md
@@ -1,7 +1,3 @@
-## 1.1.0
-
-- Adds magnetometer support
-
## 1.0.2
- Android: migrate to mavenCentral
diff --git a/packages/sensors_plus/sensors_plus/README.md b/packages/sensors_plus/sensors_plus/README.md
index 5278df0ee9..c8d35da6c3 100644
--- a/packages/sensors_plus/sensors_plus/README.md
+++ b/packages/sensors_plus/sensors_plus/README.md
@@ -7,22 +7,20 @@
-
-A Flutter plugin to access the accelerometer, gyroscope, and magnetometer
-sensors.
+A Flutter plugin to access the accelerometer and gyroscope sensors.
## Platform Support
-| Android | iOS | MacOS | Web | Linux | Windows |
-| :-----: | :---: | :---: | :---: | :---: | :-----: |
-| ✔️ | ✔️ | | ✔️ | | |
+| Android | iOS | MacOS | Web | Linux | Windows |
+| :-----: | :-: | :---: | :-: | :---: | :----: |
+| ✔️ | ✔️ | | ✔️ | | |
## Usage
To use this plugin, add `sensors_plus` as a [dependency in your pubspec.yaml
file](https://plus.fluttercommunity.dev/docs/overview).
-This will expose four classes of sensor events through four different
+This will expose three classes of sensor events, through three different
streams.
- `AccelerometerEvent`s describe the velocity of the device, including the
@@ -32,12 +30,9 @@ streams.
include gravity. They can also be thought of as just the user's affect on the
device.
- `GyroscopeEvent`s describe the rotation of the device.
-- `MagnetometerEvent`s describe the ambient magnetic field surrounding the
- device. A compass is an example usage of this data.
Each of these is exposed through a `BroadcastStream`: `accelerometerEvents`,
-`userAccelerometerEvents`, `gyroscopeEvents`, and `magnetometerEvents`,
-respectively.
+`userAccelerometerEvents`, and `gyroscopeEvents`, respectively.
### Example
@@ -59,20 +54,11 @@ gyroscopeEvents.listen((GyroscopeEvent event) {
});
// [GyroscopeEvent (x: 0.0, y: 0.0, z: 0.0)]
-magnetometerEvents.listen((MagnetometerEvent event) {
- print(event);
-});
-// [MagnetometerEvent (x: -23.6, y: 6.2, z: -34.9)]
-
```
Also see the `example` subdirectory for an example application that uses the
sensor data.
-Check out our website to learn more: [Plus Plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
+Check out our documentation website to learn more. [Plus plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
-**Important:** As of January 2021, the Flutter team is no longer accepting
-non-critical PRs for the original set of plugins in `flutter/plugins`, and
-instead they should be submitted in this project.
-[You can read more about this announcement here](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note)
-as well as [in the Flutter 2 announcement blog post](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65).
+**Important:** As of January 2021, the Flutter team is no longer accepting non-critical PRs for the original set of plugins in `flutter/plugins`, and instead they should be submitted in this project. [You can read more about this announcement here.](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note) as well as [in the Flutter 2 announcement blog post.](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65)
diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
index ea32611853..e4d7211ddb 100644
--- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
+++ b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
@@ -20,13 +20,10 @@ public class SensorsPlugin implements FlutterPlugin {
"dev.fluttercommunity.plus/sensors/gyroscope";
private static final String USER_ACCELEROMETER_CHANNEL_NAME =
"dev.fluttercommunity.plus/sensors/user_accel";
- private static final String MAGNETOMETER_CHANNEL_NAME =
- "dev.fluttercommunity.plus/sensors/magnetometer";
private EventChannel accelerometerChannel;
private EventChannel userAccelChannel;
private EventChannel gyroscopeChannel;
- private EventChannel magnetometerChannel;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
@@ -66,19 +63,11 @@ private void setupEventChannels(Context context, BinaryMessenger messenger) {
(SensorManager) context.getSystemService(context.SENSOR_SERVICE),
Sensor.TYPE_GYROSCOPE);
gyroscopeChannel.setStreamHandler(gyroScopeStreamHandler);
-
- magnetometerChannel = new EventChannel(messenger, MAGNETOMETER_CHANNEL_NAME);
- final StreamHandlerImpl magnetometerStreamHandler =
- new StreamHandlerImpl(
- (SensorManager) context.getSystemService(context.SENSOR_SERVICE),
- Sensor.TYPE_MAGNETIC_FIELD);
- magnetometerChannel.setStreamHandler(magnetometerStreamHandler);
}
private void teardownEventChannels() {
accelerometerChannel.setStreamHandler(null);
userAccelChannel.setStreamHandler(null);
gyroscopeChannel.setStreamHandler(null);
- magnetometerChannel.setStreamHandler(null);
}
}
diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
index a651822687..36a6d6017b 100644
--- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
+++ b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/StreamHandlerImpl.java
@@ -24,11 +24,7 @@ class StreamHandlerImpl implements EventChannel.StreamHandler {
@Override
public void onListen(Object arguments, EventChannel.EventSink events) {
sensorEventListener = createSensorEventListener(events);
- // TODO: Could allow developer to alter rate?
- // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_FASTEST); // 0
- // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_GAME); // 1
- // sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_UI); // 2
- sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_NORMAL); // 3
+ sensorManager.registerListener(sensorEventListener, sensor, sensorManager.SENSOR_DELAY_NORMAL);
}
@Override
diff --git a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
index c9aebbe14f..019065d1d6 100644
--- a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,5 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-# distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
diff --git a/packages/sensors_plus/sensors_plus/example/lib/main.dart b/packages/sensors_plus/sensors_plus/example/lib/main.dart
index 72dc809b7f..fb33a4a129 100644
--- a/packages/sensors_plus/sensors_plus/example/lib/main.dart
+++ b/packages/sensors_plus/sensors_plus/example/lib/main.dart
@@ -44,7 +44,6 @@ class _MyHomePageState extends State {
List? _accelerometerValues;
List? _userAccelerometerValues;
List? _gyroscopeValues;
- List? _magnetometerValues;
final _streamSubscriptions = >[];
@override
@@ -56,8 +55,6 @@ class _MyHomePageState extends State {
final userAccelerometer = _userAccelerometerValues
?.map((double v) => v.toStringAsFixed(1))
.toList();
- final magnetometer =
- _magnetometerValues?.map((double v) => v.toStringAsFixed(1)).toList();
return Scaffold(
appBar: AppBar(
@@ -109,15 +106,6 @@ class _MyHomePageState extends State {
],
),
),
- Padding(
- padding: const EdgeInsets.all(16.0),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text('Magnetometer: $magnetometer'),
- ],
- ),
- ),
],
),
);
@@ -161,14 +149,5 @@ class _MyHomePageState extends State {
},
),
);
- _streamSubscriptions.add(
- magnetometerEvents.listen(
- (MagnetometerEvent event) {
- setState(() {
- _magnetometerValues = [event.x, event.y, event.z];
- });
- },
- ),
- );
}
}
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
index 70e48f9d9d..1cc3fa3ee0 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
@@ -15,6 +15,3 @@
@interface FLTGyroscopeStreamHandlerPlus : NSObject
@end
-
-@interface FLTMagnetometerStreamHandlerPlus : NSObject
-@end
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 79d4113207..c3c91244bc 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -28,13 +28,6 @@ + (void)registerWithRegistrar:(NSObject*)registrar {
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/gyroscope"
binaryMessenger:[registrar messenger]];
[gyroscopeChannel setStreamHandler:gyroscopeStreamHandler];
-
- FLTMagnetometerStreamHandlerPlus* magnetometerStreamHandler =
- [[FLTMagnetometerStreamHandlerPlus alloc] init];
- FlutterEventChannel* magnetometerChannel =
- [FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/magnetometer"
- binaryMessenger:[registrar messenger]];
- [magnetometerChannel setStreamHandler:magnetometerStreamHandler];
}
@end
@@ -120,23 +113,3 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
}
@end
-
-@implementation FLTMagnetometerStreamHandlerPlus
-
-- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
- _initMotionManager();
- [_motionManager
- startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMMagnetometerData* magData, NSError* error) {
- CMMagneticField magneticField = magData.magneticField;
- sendTriplet(magneticField.x, magneticField.y, magneticField.z, eventSink);
- }];
- return nil;
-}
-
-- (FlutterError*)onCancelWithArguments:(id)arguments {
- [_motionManager stopMagnetometerUpdates];
- return nil;
-}
-
-@end
diff --git a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
index 3e59054339..73c8dd7e87 100644
--- a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
+++ b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
@@ -3,21 +3,21 @@
#
Pod::Spec.new do |s|
s.name = 'sensors_plus'
- s.version = '0.1.0'
- s.summary = 'Flutter Community: Sensors Plus'
+ s.version = '0.0.1'
+ s.summary = 'Flutter Sensors'
s.description = <<-DESC
-Flutter plugin to access the accelerometer, gyroscope, and magnetometer sensors.
+A Flutter plugin to access the accelerometer and gyroscope sensors.
DESC
- # Should update?
- s.homepage = 'https://github.com/fluttercommunity/plus_plugins'
+ s.homepage = 'https://github.com/flutter/plugins'
s.license = { :type => 'BSD', :file => '../LICENSE' }
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
- s.source = { :http => 'https://github.com/fluttercommunity/plus_plugins/tree/main/packages/sensors_plus' }
- s.documentation_url = 'https://pub.dev/documentation/sensors_plus'
+ s.source = { :http => 'https://github.com/flutter/plugins/tree/main/packages/sensors' }
+ s.documentation_url = 'https://pub.dev/packages/sensors'
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
-
+
s.platform = :ios, '8.0'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
end
+
diff --git a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
index 1ace1d9615..592a4d6d47 100644
--- a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
+++ b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
@@ -21,8 +21,3 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
-
-/// A broadcast stream of events from the device magnetometer.
-Stream get magnetometerEvents {
- return _sensors.magnetometerEvents;
-}
diff --git a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
index 59ac78cb8f..414dea5fd1 100644
--- a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
@@ -30,10 +30,4 @@ class Sensors extends SensorsPlatform {
Stream get userAccelerometerEvents {
return _platform.userAccelerometerEvents;
}
-
- /// A broadcast stream of events from the device magnetometer.
- @override
- Stream get magnetometerEvents {
- return _platform.magnetometerEvents;
- }
}
diff --git a/packages/sensors_plus/sensors_plus/pubspec.yaml b/packages/sensors_plus/sensors_plus/pubspec.yaml
index e1180b5383..9d40c62fc3 100644
--- a/packages/sensors_plus/sensors_plus/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus/pubspec.yaml
@@ -1,8 +1,6 @@
name: sensors_plus
-description: >
- Flutter plugin for accessing accelerometer, gyroscope, and magnetometer
- sensors.
-version: 1.1.0
+description: Flutter plugin for accessing accelerometer and gyroscope sensors.
+version: 1.0.2
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -20,8 +18,8 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_web: ^1.1.0
- sensors_plus_platform_interface: ^1.1.0
+ sensors_plus_web: ^1.0.0
+ sensors_plus_platform_interface: ^1.0.0
dev_dependencies:
test: ^1.16.4
diff --git a/packages/sensors_plus/sensors_plus/test/sensors_test.dart b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
index 2a98c1d9fc..e0ec680257 100644
--- a/packages/sensors_plus/sensors_plus/test/sensors_test.dart
+++ b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
@@ -47,18 +47,6 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
-
- test('$magnetometerEvents are streamed', () async {
- const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
- const sensorData = [8.0, 9.0, 10.0];
- _initializeFakeSensorChannel(channelName, sensorData);
-
- final event = await magnetometerEvents.first;
-
- expect(event.x, sensorData[0]);
- expect(event.y, sensorData[1]);
- expect(event.z, sensorData[2]);
- });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
index 9c993a02fb..2ebb784572 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
@@ -1,7 +1,3 @@
-## 1.1.0
-
-- Adds magnetometer support
-
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/README.md b/packages/sensors_plus/sensors_plus_platform_interface/README.md
index a104664723..01bd1838fb 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/README.md
+++ b/packages/sensors_plus/sensors_plus_platform_interface/README.md
@@ -8,5 +8,5 @@ A common platform interface for [`sensors_plus`](https://pub.dev/packages/sensor
## Usage
-This package is already included as part of the `sensors_plus` package
-dependency, and will be included when using `sensors_plus` as normal.
+This package is already included as part of the `sensors_plus` package dependency, and will
+be included when using `sensors_plus` as normal.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
index 787e8c7e24..1fe8b9c9aa 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
@@ -10,12 +10,10 @@ import 'package:sensors_plus_platform_interface/src/method_channel_sensors.dart'
import 'src/accelerometer_event.dart';
import 'src/gyroscope_event.dart';
import 'src/user_accelerometer_event.dart';
-import 'src/magnetometer_event.dart';
export 'src/accelerometer_event.dart';
export 'src/gyroscope_event.dart';
export 'src/user_accelerometer_event.dart';
-export 'src/magnetometer_event.dart';
/// The common platform interface for sensors.
abstract class SensorsPlatform extends PlatformInterface {
@@ -53,9 +51,4 @@ abstract class SensorsPlatform extends PlatformInterface {
throw UnimplementedError(
'userAccelerometerEvents has not been implemented.');
}
-
- /// A broadcast stream of events from the device magnetometer.
- Stream get magnetometerEvents {
- throw UnimplementedError('magnetometerEvents has not been implemented.');
- }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
index 57d688a4ba..4d53329ef5 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
@@ -7,7 +7,7 @@
/// simply, you can use accelerometer readings to tell if the device is moving in
/// a particular direction.
class AccelerometerEvent {
- /// Constructs an instance with the given [x], [y], and [z] values.
+ /// Contructs an instance with the given [x], [y], and [z] values.
AccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (including gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
index 59c90e4b85..4413421019 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
@@ -5,7 +5,7 @@
/// Discrete reading from a gyroscope. Gyroscopes measure the rate or rotation of
/// the device in 3D space.
class GyroscopeEvent {
- /// Constructs an instance with the given [x], [y], and [z] values.
+ /// Contructs an instance with the given [x], [y], and [z] values.
GyroscopeEvent(this.x, this.y, this.z);
/// Rate of rotation around the x axis measured in rad/s.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
deleted file mode 100644
index f7b4bb0513..0000000000
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-/// Sensor sample from a magnetometer.
-///
-/// Magnetometers measure the ambient magnetic field surrounding the sensor,
-/// returning values in microteslas ***μT*** for each three-dimensional axis.
-///
-/// Consider that these samples may bear effects of Earth's magnetic field as
-/// well as local factors such as the metal of the device itself or nearby
-/// magnets.
-///
-/// A compass is an example of a general utility for magnetometer data.
-class MagnetometerEvent {
- /// Constructs an instance with the given [x], [y], and [z] values.
- MagnetometerEvent(this.x, this.y, this.z);
-
- /// The ambient magnetic field in this axis in microteslas ***μT***.
- final double x, y, z;
-
- @override
- String toString() => '[MagnetometerEvent (x: $x, y: $y, z: $z)]';
-}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
index 6fbeacac5d..77862c24fa 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
@@ -18,13 +18,9 @@ class MethodChannelSensors extends SensorsPlatform {
static const EventChannel _gyroscopeEventChannel =
EventChannel('dev.fluttercommunity.plus/sensors/gyroscope');
- static const EventChannel _magnetometerEventChannel =
- EventChannel('dev.fluttercommunity.plus/sensors/magnetometer');
-
Stream? _accelerometerEvents;
Stream? _gyroscopeEvents;
Stream? _userAccelerometerEvents;
- Stream? _magnetometerEvents;
/// A broadcast stream of events from the device accelerometer.
@override
@@ -60,15 +56,4 @@ class MethodChannelSensors extends SensorsPlatform {
});
return _userAccelerometerEvents!;
}
-
- /// A broadcast stream of events from the device magnetometer.
- @override
- Stream get magnetometerEvents {
- _magnetometerEvents ??=
- _magnetometerEventChannel.receiveBroadcastStream().map((dynamic event) {
- final list = event.cast();
- return MagnetometerEvent(list[0]!, list[1]!, list[2]!);
- });
- return _magnetometerEvents!;
- }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
index c8d2fa8ded..3950edb12a 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
@@ -6,7 +6,7 @@
/// and measures the velocity of the device. However, unlike
/// [AccelerometerEvent], this event does not include the effects of gravity.
class UserAccelerometerEvent {
- /// Constructs an instance with the given [x], [y], and [z] values.
+ /// Contructs an instance with the given [x], [y], and [z] values.
UserAccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (excluding gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
index c6790a0920..9443481392 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_platform_interface
description: A common platform interface for the sensors_plus plugin.
-version: 1.1.0
+version: 1.0.1
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
index b7bff2dbf4..6d88e696d8 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
@@ -27,11 +27,6 @@ Stream get userAccelerometerEvents {
return methodChannel.userAccelerometerEvents;
}
-/// A broadcast stream of events from the device magnetometer.
-Stream get magnetometerEvents {
- return methodChannel.magnetometerEvents;
-}
-
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -70,18 +65,6 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
-
- test('$magnetometerEvents are streamed', () async {
- const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
- const sensorData = [8.0, 9.0, 10.0];
- _initializeFakeSensorChannel(channelName, sensorData);
-
- final event = await magnetometerEvents.first;
-
- expect(event.x, sensorData[0]);
- expect(event.y, sensorData[1]);
- expect(event.z, sensorData[2]);
- });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
index 9c993a02fb..2ebb784572 100644
--- a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
@@ -1,7 +1,3 @@
-## 1.1.0
-
-- Adds magnetometer support
-
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_web/README.md b/packages/sensors_plus/sensors_plus_web/README.md
index ba4b45df00..8b997ae29f 100644
--- a/packages/sensors_plus/sensors_plus_web/README.md
+++ b/packages/sensors_plus/sensors_plus_web/README.md
@@ -8,5 +8,5 @@ The Web implementation of [`sensors_plus`](https://pub.dev/packages/sensors_plus
## Usage
-This package is already included as part of the `sensors_plus` package
-dependency, and will be included when using `sensors_plus` as normal.
+This package is already included as part of the `sensors_plus` package dependency, and will
+be included when using `sensors_plus` as normal.
diff --git a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
index 5bfae106cb..39e5cccaa8 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
@@ -21,8 +21,3 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
-
-/// A broadcast stream of events from the device magnetometer.
-Stream get magnetometerEvents {
- return _sensors.magnetometerEvents;
-}
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
index 4cce55837b..963fc7d1fe 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
@@ -1,6 +1,6 @@
import 'dart:async';
import 'dart:html' as html
- show LinearAccelerationSensor, Accelerometer, Gyroscope, Magnetometer;
+ show LinearAccelerationSensor, Accelerometer, Gyroscope;
import 'dart:js';
import 'dart:js_util';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
@@ -8,8 +8,8 @@ import 'package:sensors_plus_platform_interface/sensors_plus_platform_interface.
/// The sensors plugin.
class SensorsPlugin extends SensorsPlatform {
- /// Factory method that initializes the Sensors plugin platform with an
- /// instance of the plugin for the web.
+ /// Factory method that initializes the Sensors plugin platform with an instance
+ /// of the plugin for the web.
static void registerWith(Registrar registrar) {
SensorsPlatform.instance = SensorsPlugin();
}
@@ -37,11 +37,11 @@ class SensorsPlugin extends SensorsPlatform {
/// See the note above about feature policy.
print('$apiName construction was blocked by a feature policy.');
- /// If this feature is not supported or Flag is not enabled yet
+ /// if this feature is not supported or Flag is not enabled yet!
} else if (error.toString().contains('ReferenceError')) {
print('$apiName is not supported by the User Agent.');
- /// If this is unknown error, rethrow it
+ /// if this is unknown error, rethrow it
} else {
rethrow;
}
@@ -78,9 +78,7 @@ class SensorsPlugin extends SensorsPlatform {
_accelerometer.start();
_accelerometer.onError.forEach(
- (e) =>
- print('[SensorsPlugin] API supported but something is wrong: '
- 'Accelerometer $e'),
+ (e) => print('The Api is supported but something is wrong! $e'),
);
},
apiName: 'Accelerometer()',
@@ -126,9 +124,7 @@ class SensorsPlugin extends SensorsPlatform {
_gyroscope.start();
_gyroscope.onError.forEach(
- (e) =>
- print('[SensorsPlugin] API supported but something is wrong: '
- 'Gyroscope $e'),
+ (e) => print('The Api is supported but something is wrong! $e'),
);
},
apiName: 'Gyroscope()',
@@ -175,9 +171,7 @@ class SensorsPlugin extends SensorsPlatform {
_linearAccelerationSensor.start();
_linearAccelerationSensor.onError.forEach(
- (e) =>
- print('[SensorsPlugin] API supported but something is wrong: '
- 'LinearAccelerationSensor $e'),
+ (e) => print('The Api is supported but something is wrong! $e'),
);
},
apiName: 'LinearAccelerationSensor()',
@@ -193,52 +187,4 @@ class SensorsPlugin extends SensorsPlatform {
return _userAccelerometerResultStream;
}
-
- StreamController? _magnetometerStreamController;
- late Stream _magnetometerResultStream;
-
- @override
- Stream get magnetometerEvents {
- if (_magnetometerStreamController == null) {
- _magnetometerStreamController = StreamController();
- _featureDetected(
- () {
- final _magnetometerSensor = html.Magnetometer();
-
- setProperty(
- _magnetometerSensor,
- 'onreading',
- allowInterop(
- (_) {
- _magnetometerStreamController!.add(
- MagnetometerEvent(
- _magnetometerSensor.x as double,
- _magnetometerSensor.y as double,
- _magnetometerSensor.z as double,
- ),
- );
- },
- ),
- );
-
- _magnetometerSensor.start();
-
- _magnetometerSensor.onError.forEach(
- (e) =>
- print('[SensorsPlugin] API supported but something is wrong: '
- 'Magnetometer $e'),
- );
- },
- apiName: 'Magnetometer()',
- premissionName: 'magnetometer',
- onError: () {
- _magnetometerStreamController!.add(MagnetometerEvent(0, 0, 0));
- },
- );
- _magnetometerResultStream =
- _magnetometerStreamController!.stream.asBroadcastStream();
- }
-
- return _magnetometerResultStream;
- }
}
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
index e601081a00..bd118984c1 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
@@ -1,16 +1,16 @@
import 'dart:html' as html;
-/// Receive permission status of the API.
+/// Receive premission status of the API
Future checkPremission(
Function initSensor, {
String? premissionName,
}) async {
final _premission = html.window.navigator.permissions;
- // Check if browser supports this API or supports permission manager
+ /// check if browser supports this API or support premission manager
if (_premission != null) {
try {
- // Request for permission or check premission status
+ /// request for permission or check premission status
final premissionStatus = await _premission.query(
{
'name': premissionName,
@@ -19,23 +19,22 @@ Future checkPremission(
if (premissionStatus.state == 'granted') {
initSensor();
} else if (premissionStatus.state == 'prompt') {
- // User needs to intract with this
+ /// user needs to intract with this
print(
'Premission [$premissionName] still has not been granted or denied.',
);
} else {
- // If permission is denied, do not do anything
+ /// if permission is denied, do not do anything
print('Permission [$premissionName] to use sensor was denied.');
}
} catch (e) {
print(
- 'Integration with Permissions API is not enabled; '
- 'still trying to start app.',
+ 'Integration with Permissions API is not enabled, still try to start app.',
);
initSensor();
}
} else {
- print('No Permissions API; still trying to start app.');
+ print('No Permissions API, still try to start app.');
initSensor();
}
}
diff --git a/packages/sensors_plus/sensors_plus_web/pubspec.yaml b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
index f735b4f3d6..6652f578c7 100644
--- a/packages/sensors_plus/sensors_plus_web/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_web
description: The web implementation of sensors_plus
-version: 1.1.0
+version: 1.0.1
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -18,7 +18,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_platform_interface: ^1.1.0
+ sensors_plus_platform_interface: ^1.0.0
flutter_web_plugins:
sdk: flutter
From 11117d467be6f6b4cd1b30dbe581ea7738bbbf81 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Sat, 31 Jul 2021 11:30:06 -0500
Subject: [PATCH 3/9] feat(sensors_plus): add magnetometer support
- Adds necessary Android, iOS, and web API for magnetometer sensor.
- Adds new `MagnetometerEvent` class.
- Adds new `Stream` called `magnetometerEvents`.
(This commit compared to an earlier one reverts any changes that were made that were unrelated to added magnetometer support.)
---
.../sensors_plus/sensors_plus/CHANGELOG.md | 4 ++
packages/sensors_plus/sensors_plus/README.md | 30 ++++++++---
.../plus/sensors/SensorsPlugin.java | 11 ++++
.../gradle/wrapper/gradle-wrapper.properties | 3 +-
.../sensors_plus/example/lib/main.dart | 21 ++++++++
.../ios/Classes/FLTSensorsPlusPlugin.h | 3 ++
.../ios/Classes/FLTSensorsPlusPlugin.m | 27 ++++++++++
.../sensors_plus/ios/sensors_plus.podspec | 9 ++--
.../sensors_plus/lib/sensors_plus.dart | 5 ++
.../sensors_plus/lib/src/sensors.dart | 6 +++
.../sensors_plus/sensors_plus/pubspec.yaml | 10 ++--
.../sensors_plus/test/sensors_test.dart | 12 +++++
.../CHANGELOG.md | 4 ++
.../lib/sensors_plus_platform_interface.dart | 7 +++
.../lib/src/magnetometer_event.dart | 23 +++++++++
.../lib/src/method_channel_sensors.dart | 15 ++++++
.../pubspec.yaml | 2 +-
.../sensors_plus_platform_interface_test.dart | 17 +++++++
.../sensors_plus_web/CHANGELOG.md | 4 ++
.../lib/sensors_plus_web.dart | 5 ++
.../sensors_plus_web/lib/src/sensors.dart | 50 ++++++++++++++++++-
.../sensors_plus_web/pubspec.yaml | 4 +-
22 files changed, 250 insertions(+), 22 deletions(-)
create mode 100644 packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
diff --git a/packages/sensors_plus/sensors_plus/CHANGELOG.md b/packages/sensors_plus/sensors_plus/CHANGELOG.md
index fba091e699..28759a258d 100644
--- a/packages/sensors_plus/sensors_plus/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.2
- Android: migrate to mavenCentral
diff --git a/packages/sensors_plus/sensors_plus/README.md b/packages/sensors_plus/sensors_plus/README.md
index c8d35da6c3..5278df0ee9 100644
--- a/packages/sensors_plus/sensors_plus/README.md
+++ b/packages/sensors_plus/sensors_plus/README.md
@@ -7,20 +7,22 @@
-A Flutter plugin to access the accelerometer and gyroscope sensors.
+
+A Flutter plugin to access the accelerometer, gyroscope, and magnetometer
+sensors.
## Platform Support
-| Android | iOS | MacOS | Web | Linux | Windows |
-| :-----: | :-: | :---: | :-: | :---: | :----: |
-| ✔️ | ✔️ | | ✔️ | | |
+| Android | iOS | MacOS | Web | Linux | Windows |
+| :-----: | :---: | :---: | :---: | :---: | :-----: |
+| ✔️ | ✔️ | | ✔️ | | |
## Usage
To use this plugin, add `sensors_plus` as a [dependency in your pubspec.yaml
file](https://plus.fluttercommunity.dev/docs/overview).
-This will expose three classes of sensor events, through three different
+This will expose four classes of sensor events through four different
streams.
- `AccelerometerEvent`s describe the velocity of the device, including the
@@ -30,9 +32,12 @@ streams.
include gravity. They can also be thought of as just the user's affect on the
device.
- `GyroscopeEvent`s describe the rotation of the device.
+- `MagnetometerEvent`s describe the ambient magnetic field surrounding the
+ device. A compass is an example usage of this data.
Each of these is exposed through a `BroadcastStream`: `accelerometerEvents`,
-`userAccelerometerEvents`, and `gyroscopeEvents`, respectively.
+`userAccelerometerEvents`, `gyroscopeEvents`, and `magnetometerEvents`,
+respectively.
### Example
@@ -54,11 +59,20 @@ gyroscopeEvents.listen((GyroscopeEvent event) {
});
// [GyroscopeEvent (x: 0.0, y: 0.0, z: 0.0)]
+magnetometerEvents.listen((MagnetometerEvent event) {
+ print(event);
+});
+// [MagnetometerEvent (x: -23.6, y: 6.2, z: -34.9)]
+
```
Also see the `example` subdirectory for an example application that uses the
sensor data.
-Check out our documentation website to learn more. [Plus plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
+Check out our website to learn more: [Plus Plugins documentation](https://plus.fluttercommunity.dev/docs/overview)
-**Important:** As of January 2021, the Flutter team is no longer accepting non-critical PRs for the original set of plugins in `flutter/plugins`, and instead they should be submitted in this project. [You can read more about this announcement here.](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note) as well as [in the Flutter 2 announcement blog post.](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65)
+**Important:** As of January 2021, the Flutter team is no longer accepting
+non-critical PRs for the original set of plugins in `flutter/plugins`, and
+instead they should be submitted in this project.
+[You can read more about this announcement here](https://github.com/flutter/plugins/blob/master/CONTRIBUTING.md#important-note)
+as well as [in the Flutter 2 announcement blog post](https://medium.com/flutter/whats-new-in-flutter-2-0-fe8e95ecc65).
diff --git a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
index e4d7211ddb..ea32611853 100644
--- a/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
+++ b/packages/sensors_plus/sensors_plus/android/src/main/java/dev/fluttercommunity/plus/sensors/SensorsPlugin.java
@@ -20,10 +20,13 @@ public class SensorsPlugin implements FlutterPlugin {
"dev.fluttercommunity.plus/sensors/gyroscope";
private static final String USER_ACCELEROMETER_CHANNEL_NAME =
"dev.fluttercommunity.plus/sensors/user_accel";
+ private static final String MAGNETOMETER_CHANNEL_NAME =
+ "dev.fluttercommunity.plus/sensors/magnetometer";
private EventChannel accelerometerChannel;
private EventChannel userAccelChannel;
private EventChannel gyroscopeChannel;
+ private EventChannel magnetometerChannel;
/** Plugin registration. */
public static void registerWith(Registrar registrar) {
@@ -63,11 +66,19 @@ private void setupEventChannels(Context context, BinaryMessenger messenger) {
(SensorManager) context.getSystemService(context.SENSOR_SERVICE),
Sensor.TYPE_GYROSCOPE);
gyroscopeChannel.setStreamHandler(gyroScopeStreamHandler);
+
+ magnetometerChannel = new EventChannel(messenger, MAGNETOMETER_CHANNEL_NAME);
+ final StreamHandlerImpl magnetometerStreamHandler =
+ new StreamHandlerImpl(
+ (SensorManager) context.getSystemService(context.SENSOR_SERVICE),
+ Sensor.TYPE_MAGNETIC_FIELD);
+ magnetometerChannel.setStreamHandler(magnetometerStreamHandler);
}
private void teardownEventChannels() {
accelerometerChannel.setStreamHandler(null);
userAccelChannel.setStreamHandler(null);
gyroscopeChannel.setStreamHandler(null);
+ magnetometerChannel.setStreamHandler(null);
}
}
diff --git a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
index 019065d1d6..c9aebbe14f 100644
--- a/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
+++ b/packages/sensors_plus/sensors_plus/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -2,4 +2,5 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
+# distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
diff --git a/packages/sensors_plus/sensors_plus/example/lib/main.dart b/packages/sensors_plus/sensors_plus/example/lib/main.dart
index fb33a4a129..72dc809b7f 100644
--- a/packages/sensors_plus/sensors_plus/example/lib/main.dart
+++ b/packages/sensors_plus/sensors_plus/example/lib/main.dart
@@ -44,6 +44,7 @@ class _MyHomePageState extends State {
List? _accelerometerValues;
List? _userAccelerometerValues;
List? _gyroscopeValues;
+ List? _magnetometerValues;
final _streamSubscriptions = >[];
@override
@@ -55,6 +56,8 @@ class _MyHomePageState extends State {
final userAccelerometer = _userAccelerometerValues
?.map((double v) => v.toStringAsFixed(1))
.toList();
+ final magnetometer =
+ _magnetometerValues?.map((double v) => v.toStringAsFixed(1)).toList();
return Scaffold(
appBar: AppBar(
@@ -106,6 +109,15 @@ class _MyHomePageState extends State {
],
),
),
+ Padding(
+ padding: const EdgeInsets.all(16.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Text('Magnetometer: $magnetometer'),
+ ],
+ ),
+ ),
],
),
);
@@ -149,5 +161,14 @@ class _MyHomePageState extends State {
},
),
);
+ _streamSubscriptions.add(
+ magnetometerEvents.listen(
+ (MagnetometerEvent event) {
+ setState(() {
+ _magnetometerValues = [event.x, event.y, event.z];
+ });
+ },
+ ),
+ );
}
}
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
index 1cc3fa3ee0..70e48f9d9d 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.h
@@ -15,3 +15,6 @@
@interface FLTGyroscopeStreamHandlerPlus : NSObject
@end
+
+@interface FLTMagnetometerStreamHandlerPlus : NSObject
+@end
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index c3c91244bc..79d4113207 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -28,6 +28,13 @@ + (void)registerWithRegistrar:(NSObject*)registrar {
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/gyroscope"
binaryMessenger:[registrar messenger]];
[gyroscopeChannel setStreamHandler:gyroscopeStreamHandler];
+
+ FLTMagnetometerStreamHandlerPlus* magnetometerStreamHandler =
+ [[FLTMagnetometerStreamHandlerPlus alloc] init];
+ FlutterEventChannel* magnetometerChannel =
+ [FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/magnetometer"
+ binaryMessenger:[registrar messenger]];
+ [magnetometerChannel setStreamHandler:magnetometerStreamHandler];
}
@end
@@ -113,3 +120,23 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
}
@end
+
+@implementation FLTMagnetometerStreamHandlerPlus
+
+- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+ _initMotionManager();
+ [_motionManager
+ startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
+ withHandler:^(CMMagnetometerData* magData, NSError* error) {
+ CMMagneticField magneticField = magData.magneticField;
+ sendTriplet(magneticField.x, magneticField.y, magneticField.z, eventSink);
+ }];
+ return nil;
+}
+
+- (FlutterError*)onCancelWithArguments:(id)arguments {
+ [_motionManager stopMagnetometerUpdates];
+ return nil;
+}
+
+@end
diff --git a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
index 73c8dd7e87..b75167ce53 100644
--- a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
+++ b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
@@ -3,10 +3,10 @@
#
Pod::Spec.new do |s|
s.name = 'sensors_plus'
- s.version = '0.0.1'
- s.summary = 'Flutter Sensors'
+ s.version = '0.1.0'
+ s.summary = 'Flutter Community: Sensors Plus'
s.description = <<-DESC
-A Flutter plugin to access the accelerometer and gyroscope sensors.
+Flutter plugin to access the accelerometer, gyroscope, and magnetometer sensors.
DESC
s.homepage = 'https://github.com/flutter/plugins'
s.license = { :type => 'BSD', :file => '../LICENSE' }
@@ -16,8 +16,7 @@ A Flutter plugin to access the accelerometer and gyroscope sensors.
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
-
+
s.platform = :ios, '8.0'
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
end
-
diff --git a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
index 592a4d6d47..1ace1d9615 100644
--- a/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
+++ b/packages/sensors_plus/sensors_plus/lib/sensors_plus.dart
@@ -21,3 +21,8 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
+
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return _sensors.magnetometerEvents;
+}
diff --git a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
index 414dea5fd1..59ac78cb8f 100644
--- a/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus/lib/src/sensors.dart
@@ -30,4 +30,10 @@ class Sensors extends SensorsPlatform {
Stream get userAccelerometerEvents {
return _platform.userAccelerometerEvents;
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ @override
+ Stream get magnetometerEvents {
+ return _platform.magnetometerEvents;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus/pubspec.yaml b/packages/sensors_plus/sensors_plus/pubspec.yaml
index 9d40c62fc3..e1180b5383 100644
--- a/packages/sensors_plus/sensors_plus/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus/pubspec.yaml
@@ -1,6 +1,8 @@
name: sensors_plus
-description: Flutter plugin for accessing accelerometer and gyroscope sensors.
-version: 1.0.2
+description: >
+ Flutter plugin for accessing accelerometer, gyroscope, and magnetometer
+ sensors.
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -18,8 +20,8 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_web: ^1.0.0
- sensors_plus_platform_interface: ^1.0.0
+ sensors_plus_web: ^1.1.0
+ sensors_plus_platform_interface: ^1.1.0
dev_dependencies:
test: ^1.16.4
diff --git a/packages/sensors_plus/sensors_plus/test/sensors_test.dart b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
index e0ec680257..2a98c1d9fc 100644
--- a/packages/sensors_plus/sensors_plus/test/sensors_test.dart
+++ b/packages/sensors_plus/sensors_plus/test/sensors_test.dart
@@ -47,6 +47,18 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
+
+ test('$magnetometerEvents are streamed', () async {
+ const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
+ const sensorData = [8.0, 9.0, 10.0];
+ _initializeFakeSensorChannel(channelName, sensorData);
+
+ final event = await magnetometerEvents.first;
+
+ expect(event.x, sensorData[0]);
+ expect(event.y, sensorData[1]);
+ expect(event.z, sensorData[2]);
+ });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
index 2ebb784572..9c993a02fb 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_platform_interface/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
index 1fe8b9c9aa..0c1d041100 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/sensors_plus_platform_interface.dart
@@ -9,10 +9,12 @@ import 'package:sensors_plus_platform_interface/src/method_channel_sensors.dart'
import 'src/accelerometer_event.dart';
import 'src/gyroscope_event.dart';
+import 'src/magnetometer_event.dart';
import 'src/user_accelerometer_event.dart';
export 'src/accelerometer_event.dart';
export 'src/gyroscope_event.dart';
+export 'src/magnetometer_event.dart';
export 'src/user_accelerometer_event.dart';
/// The common platform interface for sensors.
@@ -51,4 +53,9 @@ abstract class SensorsPlatform extends PlatformInterface {
throw UnimplementedError(
'userAccelerometerEvents has not been implemented.');
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ Stream get magnetometerEvents {
+ throw UnimplementedError('magnetometerEvents has not been implemented.');
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
new file mode 100644
index 0000000000..7e411ed4d0
--- /dev/null
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
@@ -0,0 +1,23 @@
+/// A sensor sample from a magnetometer.
+///
+/// Magnetometers measure the ambient magnetic field surrounding the sensor,
+/// returning values in microteslas ***μT*** for each three-dimensional axis.
+///
+/// Consider that these samples may bear effects of Earth's magnetic field as
+/// well as local factors such as the metal of the device itself or nearby
+/// magnets.
+///
+/// A compass is an example of a general utility for magnetometer data.
+class MagnetometerEvent {
+ /// Constructs a new instance with the given [x], [y], and [z] values.
+ ///
+ /// See [MagnetometerEvent] for more information.
+ MagnetometerEvent(this.x, this.y, this.z);
+
+ /// The ambient magnetic field in this axis surrounding the sensor in
+ /// microteslas ***μT***.
+ final double x, y, z;
+
+ @override
+ String toString() => '[MagnetometerEvent (x: $x, y: $y, z: $z)]';
+}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
index 77862c24fa..6fbeacac5d 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/method_channel_sensors.dart
@@ -18,9 +18,13 @@ class MethodChannelSensors extends SensorsPlatform {
static const EventChannel _gyroscopeEventChannel =
EventChannel('dev.fluttercommunity.plus/sensors/gyroscope');
+ static const EventChannel _magnetometerEventChannel =
+ EventChannel('dev.fluttercommunity.plus/sensors/magnetometer');
+
Stream? _accelerometerEvents;
Stream? _gyroscopeEvents;
Stream? _userAccelerometerEvents;
+ Stream? _magnetometerEvents;
/// A broadcast stream of events from the device accelerometer.
@override
@@ -56,4 +60,15 @@ class MethodChannelSensors extends SensorsPlatform {
});
return _userAccelerometerEvents!;
}
+
+ /// A broadcast stream of events from the device magnetometer.
+ @override
+ Stream get magnetometerEvents {
+ _magnetometerEvents ??=
+ _magnetometerEventChannel.receiveBroadcastStream().map((dynamic event) {
+ final list = event.cast();
+ return MagnetometerEvent(list[0]!, list[1]!, list[2]!);
+ });
+ return _magnetometerEvents!;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
index 9443481392..c6790a0920 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_platform_interface/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_platform_interface
description: A common platform interface for the sensors_plus plugin.
-version: 1.0.1
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
index 6d88e696d8..b7bff2dbf4 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/test/sensors_plus_platform_interface_test.dart
@@ -27,6 +27,11 @@ Stream get userAccelerometerEvents {
return methodChannel.userAccelerometerEvents;
}
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return methodChannel.magnetometerEvents;
+}
+
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
@@ -65,6 +70,18 @@ void main() {
expect(event.y, sensorData[1]);
expect(event.z, sensorData[2]);
});
+
+ test('$magnetometerEvents are streamed', () async {
+ const channelName = 'dev.fluttercommunity.plus/sensors/magnetometer';
+ const sensorData = [8.0, 9.0, 10.0];
+ _initializeFakeSensorChannel(channelName, sensorData);
+
+ final event = await magnetometerEvents.first;
+
+ expect(event.x, sensorData[0]);
+ expect(event.y, sensorData[1]);
+ expect(event.z, sensorData[2]);
+ });
}
void _initializeFakeSensorChannel(String channelName, List sensorData) {
diff --git a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
index 2ebb784572..9c993a02fb 100644
--- a/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus_web/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+- Adds magnetometer support
+
## 1.0.1
- Improve documentation
diff --git a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
index 39e5cccaa8..5bfae106cb 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/sensors_plus_web.dart
@@ -21,3 +21,8 @@ Stream get gyroscopeEvents {
Stream get userAccelerometerEvents {
return _sensors.userAccelerometerEvents;
}
+
+/// A broadcast stream of events from the device magnetometer.
+Stream get magnetometerEvents {
+ return _sensors.magnetometerEvents;
+}
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
index 963fc7d1fe..e02d742f90 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/sensors.dart
@@ -1,6 +1,6 @@
import 'dart:async';
import 'dart:html' as html
- show LinearAccelerationSensor, Accelerometer, Gyroscope;
+ show LinearAccelerationSensor, Accelerometer, Gyroscope, Magnetometer;
import 'dart:js';
import 'dart:js_util';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
@@ -187,4 +187,52 @@ class SensorsPlugin extends SensorsPlatform {
return _userAccelerometerResultStream;
}
+
+ StreamController? _magnetometerStreamController;
+ late Stream _magnetometerResultStream;
+
+ @override
+ Stream get magnetometerEvents {
+ if (_magnetometerStreamController == null) {
+ _magnetometerStreamController = StreamController();
+ _featureDetected(
+ () {
+ final _magnetometerSensor = html.Magnetometer();
+
+ setProperty(
+ _magnetometerSensor,
+ 'onreading',
+ allowInterop(
+ (_) {
+ _magnetometerStreamController!.add(
+ MagnetometerEvent(
+ _magnetometerSensor.x as double,
+ _magnetometerSensor.y as double,
+ _magnetometerSensor.z as double,
+ ),
+ );
+ },
+ ),
+ );
+
+ _magnetometerSensor.start();
+
+ _magnetometerSensor.onError.forEach(
+ (e) =>
+ print('[SensorsPlugin] API supported but something is wrong: '
+ 'Magnetometer $e'),
+ );
+ },
+ apiName: 'Magnetometer()',
+ premissionName: 'magnetometer',
+ onError: () {
+ _magnetometerStreamController!.add(MagnetometerEvent(0, 0, 0));
+ },
+ );
+ _magnetometerResultStream =
+ _magnetometerStreamController!.stream.asBroadcastStream();
+ }
+
+ return _magnetometerResultStream;
+ }
}
diff --git a/packages/sensors_plus/sensors_plus_web/pubspec.yaml b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
index 6652f578c7..f735b4f3d6 100644
--- a/packages/sensors_plus/sensors_plus_web/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus_web/pubspec.yaml
@@ -1,6 +1,6 @@
name: sensors_plus_web
description: The web implementation of sensors_plus
-version: 1.0.1
+version: 1.1.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
@@ -18,7 +18,7 @@ flutter:
dependencies:
flutter:
sdk: flutter
- sensors_plus_platform_interface: ^1.0.0
+ sensors_plus_platform_interface: ^1.1.0
flutter_web_plugins:
sdk: flutter
From 976e7fb5e4e87abb1326987556883300dc57a013 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Sat, 31 Jul 2021 15:29:50 -0500
Subject: [PATCH 4/9] typo(sensors_plus) fix typo in `FooEvent` constructors
and web API utils
"Contructs" -> "Constructs"
&
"premission" -> "permission"
---
.../lib/src/accelerometer_event.dart | 2 +-
.../lib/src/gyroscope_event.dart | 2 +-
.../lib/src/user_accelerometer_event.dart | 2 +-
packages/sensors_plus/sensors_plus_web/lib/src/utils.dart | 8 ++++----
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
index 4d53329ef5..57d688a4ba 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/accelerometer_event.dart
@@ -7,7 +7,7 @@
/// simply, you can use accelerometer readings to tell if the device is moving in
/// a particular direction.
class AccelerometerEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
AccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (including gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
index 4413421019..59c90e4b85 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/gyroscope_event.dart
@@ -5,7 +5,7 @@
/// Discrete reading from a gyroscope. Gyroscopes measure the rate or rotation of
/// the device in 3D space.
class GyroscopeEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
GyroscopeEvent(this.x, this.y, this.z);
/// Rate of rotation around the x axis measured in rad/s.
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
index 3950edb12a..c8d2fa8ded 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/user_accelerometer_event.dart
@@ -6,7 +6,7 @@
/// and measures the velocity of the device. However, unlike
/// [AccelerometerEvent], this event does not include the effects of gravity.
class UserAccelerometerEvent {
- /// Contructs an instance with the given [x], [y], and [z] values.
+ /// Constructs an instance with the given [x], [y], and [z] values.
UserAccelerometerEvent(this.x, this.y, this.z);
/// Acceleration force along the x axis (excluding gravity) measured in m/s^2.
diff --git a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
index bd118984c1..dedcd3fd53 100644
--- a/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
+++ b/packages/sensors_plus/sensors_plus_web/lib/src/utils.dart
@@ -1,16 +1,16 @@
import 'dart:html' as html;
-/// Receive premission status of the API
+/// Receive permission status of the API.
Future checkPremission(
Function initSensor, {
String? premissionName,
}) async {
final _premission = html.window.navigator.permissions;
- /// check if browser supports this API or support premission manager
+ // Check if browser supports this API or supports permission manager
if (_premission != null) {
try {
- /// request for permission or check premission status
+ // Request for permission or check premission status
final premissionStatus = await _premission.query(
{
'name': premissionName,
@@ -24,7 +24,7 @@ Future checkPremission(
'Premission [$premissionName] still has not been granted or denied.',
);
} else {
- /// if permission is denied, do not do anything
+ // If permission is denied, do not do anything
print('Permission [$premissionName] to use sensor was denied.');
}
} catch (e) {
From 2ee2820b75001854731670576173fcdaff702bfd Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Wed, 4 Aug 2021 12:25:10 -0500
Subject: [PATCH 5/9] Run `format` and revert `podspec`
Attempting to pass PR tests.
---
.../sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m | 11 ++++++-----
.../sensors_plus/ios/sensors_plus.podspec | 4 ++--
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 79d4113207..4bc23f547f 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -125,12 +125,13 @@ @implementation FLTMagnetometerStreamHandlerPlus
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
- [_motionManager
startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMMagnetometerData* magData, NSError* error) {
- CMMagneticField magneticField = magData.magneticField;
- sendTriplet(magneticField.x, magneticField.y, magneticField.z, eventSink);
- }];
+ [_motionManager startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
+ withHandler:^(CMMagnetometerData* magData, NSError* error) {
+ CMMagneticField magneticField = magData.magneticField;
+ sendTriplet(magneticField.x, magneticField.y,
+ magneticField.z, eventSink);
+ }];
return nil;
}
diff --git a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
index b75167ce53..1c593746ff 100644
--- a/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
+++ b/packages/sensors_plus/sensors_plus/ios/sensors_plus.podspec
@@ -3,8 +3,8 @@
#
Pod::Spec.new do |s|
s.name = 'sensors_plus'
- s.version = '0.1.0'
- s.summary = 'Flutter Community: Sensors Plus'
+ s.version = '0.0.1'
+ s.summary = 'Flutter Sensors'
s.description = <<-DESC
Flutter plugin to access the accelerometer, gyroscope, and magnetometer sensors.
DESC
From 95107711786f502b7922cd7afdda930879628b2e Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Thu, 12 Aug 2021 08:23:17 -0500
Subject: [PATCH 6/9] `format` FTLSensorsPlusPlugin.m
---
.../sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 4bc23f547f..85f2ca6b76 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -125,7 +125,6 @@ @implementation FLTMagnetometerStreamHandlerPlus
- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
- startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
[_motionManager startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
withHandler:^(CMMagnetometerData* magData, NSError* error) {
CMMagneticField magneticField = magData.magneticField;
From ee9ff5127f7cfbca9a20f2336cc295a2be3b9c16 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Tue, 29 Mar 2022 23:38:38 -0500
Subject: [PATCH 7/9] fix(sensors_plus): iOS calibrated magnetometer
As described in #781 the current implementation of **magnetometer** sensor data acquisition for iOS does not use calibrated values evaluated by iOS's `DeviceMotion` sensor, but rather the raw samples straight from the sensor.
As the **user acceleration** implementation already employs this *calibrated* `DeviceMotion` sensor, it seems like an appropriate solution to acquiring compensated magnetometer data as well.
`melos run format` made changes to a huge number of files across all packages. I discarded all changes outside of `packages\sensors_plus\`.
The focus of this PR is the magnetometer implementation at the end of `sensors_plus\sensors_plus\ios\Classes\FLTSensorsPlusPlugin.m`.
---
.../sensors_plus/sensors_plus/CHANGELOG.md | 5 ++
.../sensors_plus/example/ios/Runner/main.m | 2 +-
.../ios/Classes/FLTSensorsPlusPlugin.m | 67 +++++++++++--------
.../sensors_plus/sensors_plus/pubspec.yaml | 2 +-
.../lib/src/magnetometer_event.dart | 2 +-
5 files changed, 46 insertions(+), 32 deletions(-)
diff --git a/packages/sensors_plus/sensors_plus/CHANGELOG.md b/packages/sensors_plus/sensors_plus/CHANGELOG.md
index 8b0291454f..cfa13277c5 100644
--- a/packages/sensors_plus/sensors_plus/CHANGELOG.md
+++ b/packages/sensors_plus/sensors_plus/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 1.4.0
+
+- iOS: Corrects magnetometer implementation, returning calibrated values from
+ `DeviceMotion` sensor rather than raw sensor samples
+
## 1.3.0
- Android: Migrate to Kotlin
diff --git a/packages/sensors_plus/sensors_plus/example/ios/Runner/main.m b/packages/sensors_plus/sensors_plus/example/ios/Runner/main.m
index dff6597e45..31030600ec 100644
--- a/packages/sensors_plus/sensors_plus/example/ios/Runner/main.m
+++ b/packages/sensors_plus/sensors_plus/example/ios/Runner/main.m
@@ -2,7 +2,7 @@
#import
#import "AppDelegate.h"
-int main(int argc, char* argv[]) {
+int main(int argc, char *argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 85f2ca6b76..6223346595 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -7,31 +7,31 @@
@implementation FLTSensorsPlusPlugin
-+ (void)registerWithRegistrar:(NSObject*)registrar {
- FLTAccelerometerStreamHandlerPlus* accelerometerStreamHandler =
++ (void)registerWithRegistrar:(NSObject *)registrar {
+ FLTAccelerometerStreamHandlerPlus *accelerometerStreamHandler =
[[FLTAccelerometerStreamHandlerPlus alloc] init];
- FlutterEventChannel* accelerometerChannel =
+ FlutterEventChannel *accelerometerChannel =
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/accelerometer"
binaryMessenger:[registrar messenger]];
[accelerometerChannel setStreamHandler:accelerometerStreamHandler];
- FLTUserAccelStreamHandlerPlus* userAccelerometerStreamHandler =
+ FLTUserAccelStreamHandlerPlus *userAccelerometerStreamHandler =
[[FLTUserAccelStreamHandlerPlus alloc] init];
- FlutterEventChannel* userAccelerometerChannel =
+ FlutterEventChannel *userAccelerometerChannel =
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/user_accel"
binaryMessenger:[registrar messenger]];
[userAccelerometerChannel setStreamHandler:userAccelerometerStreamHandler];
- FLTGyroscopeStreamHandlerPlus* gyroscopeStreamHandler =
+ FLTGyroscopeStreamHandlerPlus *gyroscopeStreamHandler =
[[FLTGyroscopeStreamHandlerPlus alloc] init];
- FlutterEventChannel* gyroscopeChannel =
+ FlutterEventChannel *gyroscopeChannel =
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/gyroscope"
binaryMessenger:[registrar messenger]];
[gyroscopeChannel setStreamHandler:gyroscopeStreamHandler];
- FLTMagnetometerStreamHandlerPlus* magnetometerStreamHandler =
+ FLTMagnetometerStreamHandlerPlus *magnetometerStreamHandler =
[[FLTMagnetometerStreamHandlerPlus alloc] init];
- FlutterEventChannel* magnetometerChannel =
+ FlutterEventChannel *magnetometerChannel =
[FlutterEventChannel eventChannelWithName:@"dev.fluttercommunity.plus/sensors/magnetometer"
binaryMessenger:[registrar messenger]];
[magnetometerChannel setStreamHandler:magnetometerStreamHandler];
@@ -40,7 +40,7 @@ + (void)registerWithRegistrar:(NSObject*)registrar {
@end
const double GRAVITY = 9.8;
-CMMotionManager* _motionManager;
+CMMotionManager *_motionManager;
void _initMotionManager() {
if (!_motionManager) {
@@ -49,7 +49,7 @@ void _initMotionManager() {
}
static void sendTriplet(Float64 x, Float64 y, Float64 z, FlutterEventSink sink) {
- NSMutableData* event = [NSMutableData dataWithCapacity:3 * sizeof(Float64)];
+ NSMutableData *event = [NSMutableData dataWithCapacity:3 * sizeof(Float64)];
[event appendBytes:&x length:sizeof(Float64)];
[event appendBytes:&y length:sizeof(Float64)];
[event appendBytes:&z length:sizeof(Float64)];
@@ -58,11 +58,11 @@ static void sendTriplet(Float64 x, Float64 y, Float64 z, FlutterEventSink sink)
@implementation FLTAccelerometerStreamHandlerPlus
-- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
[_motionManager
startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMAccelerometerData* accelerometerData, NSError* error) {
+ withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
CMAcceleration acceleration = accelerometerData.acceleration;
// Multiply by gravity, and adjust sign values to
// align with Android.
@@ -72,7 +72,7 @@ - (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink
return nil;
}
-- (FlutterError*)onCancelWithArguments:(id)arguments {
+- (FlutterError *)onCancelWithArguments:(id)arguments {
[_motionManager stopAccelerometerUpdates];
return nil;
}
@@ -81,20 +81,21 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
@implementation FLTUserAccelStreamHandlerPlus
-- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
[_motionManager
startDeviceMotionUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMDeviceMotion* data, NSError* error) {
+ withHandler:^(CMDeviceMotion *data, NSError *error) {
CMAcceleration acceleration = data.userAcceleration;
- // Multiply by gravity, and adjust sign values to align with Android.
+ // Multiply by gravity, and adjust sign values to
+ // align with Android.
sendTriplet(-acceleration.x * GRAVITY, -acceleration.y * GRAVITY,
-acceleration.z * GRAVITY, eventSink);
}];
return nil;
}
-- (FlutterError*)onCancelWithArguments:(id)arguments {
+- (FlutterError *)onCancelWithArguments:(id)arguments {
[_motionManager stopDeviceMotionUpdates];
return nil;
}
@@ -103,18 +104,18 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
@implementation FLTGyroscopeStreamHandlerPlus
-- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
[_motionManager
startGyroUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMGyroData* gyroData, NSError* error) {
+ withHandler:^(CMGyroData *gyroData, NSError *error) {
CMRotationRate rotationRate = gyroData.rotationRate;
sendTriplet(rotationRate.x, rotationRate.y, rotationRate.z, eventSink);
}];
return nil;
}
-- (FlutterError*)onCancelWithArguments:(id)arguments {
+- (FlutterError *)onCancelWithArguments:(id)arguments {
[_motionManager stopGyroUpdates];
return nil;
}
@@ -123,19 +124,27 @@ - (FlutterError*)onCancelWithArguments:(id)arguments {
@implementation FLTMagnetometerStreamHandlerPlus
-- (FlutterError*)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
+- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)eventSink {
_initMotionManager();
- [_motionManager startMagnetometerUpdatesToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMMagnetometerData* magData, NSError* error) {
- CMMagneticField magneticField = magData.magneticField;
- sendTriplet(magneticField.x, magneticField.y,
- magneticField.z, eventSink);
+ // Allow iOS to present calibration interaction
+ _motionManager.showsDeviceMovementDisplay = YES;
+ [_motionManager
+ startDeviceMotionUpdatesUsingReferenceFrame:
+ CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
+ ToQueue:[[NSOperationQueue alloc] init]
+ withHandler:^(CMDeviceMotion *motionData, NSError *error) {
+ // The `magneticField` from CMDeviceMotion
+ // is of type CMCalibratedMagneticField
+ // which has an `accuracy` and a standard
+ // CMMagneticField `field`.
+ CMMagneticField field = motionData.magneticField.field;
+ sendTriplet(field.x, field.y, field.z, eventSink);
}];
return nil;
}
-- (FlutterError*)onCancelWithArguments:(id)arguments {
- [_motionManager stopMagnetometerUpdates];
+- (FlutterError *)onCancelWithArguments:(id)arguments {
+ [_motionManager stopDeviceMotionUpdates];
return nil;
}
diff --git a/packages/sensors_plus/sensors_plus/pubspec.yaml b/packages/sensors_plus/sensors_plus/pubspec.yaml
index a19cab6a79..3c623a1957 100644
--- a/packages/sensors_plus/sensors_plus/pubspec.yaml
+++ b/packages/sensors_plus/sensors_plus/pubspec.yaml
@@ -2,7 +2,7 @@ name: sensors_plus
description: >
Flutter plugin for accessing accelerometer, gyroscope, and magnetometer
sensors.
-version: 1.3.0
+version: 1.4.0
homepage: https://plus.fluttercommunity.dev/
repository: https://github.com/fluttercommunity/plus_plugins/tree/main/packages/
diff --git a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
index 7e411ed4d0..b17eef1507 100644
--- a/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
+++ b/packages/sensors_plus/sensors_plus_platform_interface/lib/src/magnetometer_event.dart
@@ -5,7 +5,7 @@
///
/// Consider that these samples may bear effects of Earth's magnetic field as
/// well as local factors such as the metal of the device itself or nearby
-/// magnets.
+/// magnets, though most devices compensate for these factors.
///
/// A compass is an example of a general utility for magnetometer data.
class MagnetometerEvent {
From e4fcebb037b5bbba259f70affbed1d482db47b66 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Sat, 24 Sep 2022 16:58:28 -0500
Subject: [PATCH 8/9] melos `format`
While prior merge conflict was resolved via github.com, this push ran true melos format command.
Abbreviations were made to comment to accommodate the smaller formatted space.
---
.../ios/Classes/FLTSensorsPlusPlugin.m | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 44441e802a..7f6f3dd897 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -223,12 +223,15 @@ - (FlutterError *)onListenWithArguments:(id)arguments
[_motionManager
startDeviceMotionUpdatesUsingReferenceFrame:
CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
- ToQueue:[[NSOperationQueue alloc] init]
- withHandler:^(CMDeviceMotion *motionData, NSError *error) {
- // The `magneticField` is CMCalibratedMagneticField
- // which has an `accuracy` and a CMMagneticField.
- CMMagneticField field = motionData.magneticField.field;
- sendTriplet(field.x, field.y, field.z, eventSink);
+ ToQueue:[[NSOperationQueue alloc]
+ init]
+ withHandler:^(CMDeviceMotion *motionData,
+ NSError *error) {
+ // The `magneticField` is a
+ // CMCalibratedMagneticField.
+ CMMagneticField b =
+ motionData.magneticField.field;
+ sendTriplet(b.x, b.y, b.z, eventSink);
}];
return nil;
}
@@ -242,4 +245,4 @@ - (void)dealloc {
_cleanUp();
}
-@end
\ No newline at end of file
+@end
From 89afe676bc0c59519d930045a2ad4cbf436a6e73 Mon Sep 17 00:00:00 2001
From: Zabadam <65806473+Zabadam@users.noreply.github.com>
Date: Mon, 26 Sep 2022 15:27:19 -0500
Subject: [PATCH 9/9] Fixing uncaught XCode warning and error (typo)
Also altering reference frame from `XArbitraryCorrectedZVertical` to `XMagneticNorthZVertical` which may or may not impact the effectiveness of the magnetometer calibration.
---
.../sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
index 7f6f3dd897..11b63e809c 100644
--- a/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
+++ b/packages/sensors_plus/sensors_plus/ios/Classes/FLTSensorsPlusPlugin.m
@@ -92,7 +92,7 @@ static void _cleanUp() {
const double GRAVITY = 9.8;
CMMotionManager *_motionManager;
-void _initMotionManager() {
+void _initMotionManager(void) {
if (!_motionManager) {
_motionManager = [[CMMotionManager alloc] init];
}
@@ -222,8 +222,12 @@ - (FlutterError *)onListenWithArguments:(id)arguments
_motionManager.showsDeviceMovementDisplay = YES;
[_motionManager
startDeviceMotionUpdatesUsingReferenceFrame:
- CMAttitudeReferenceFrameXArbitraryCorrectedZVertical
- ToQueue:[[NSOperationQueue alloc]
+ // https://developer.apple.com/documentation/coremotion/cmattitudereferenceframe?language=objc
+ // "Using this reference frame may require device movement to
+ // calibrate the magnetometer," which is desired to ensure the
+ // DeviceMotion actually has updated, calibrated geomagnetic data.
+ CMAttitudeReferenceFrameXMagneticNorthZVertical
+ toQueue:[[NSOperationQueue alloc]
init]
withHandler:^(CMDeviceMotion *motionData,
NSError *error) {
@@ -231,6 +235,9 @@ - (FlutterError *)onListenWithArguments:(id)arguments
// CMCalibratedMagneticField.
CMMagneticField b =
motionData.magneticField.field;
+ if (_isCleanUp) {
+ return;
+ }
sendTriplet(b.x, b.y, b.z, eventSink);
}];
return nil;