diff --git a/experimental/federated_plugin/README.md b/experimental/federated_plugin/README.md
index 20537a348..2dc52b3cf 100644
--- a/experimental/federated_plugin/README.md
+++ b/experimental/federated_plugin/README.md
@@ -1,6 +1,6 @@
# federated_plugin
-A Flutter plugin sample that shows how to implement a federated plugin to fetch the device location on different platforms.
+A Flutter plugin sample that shows how to implement a federated plugin to retrieve current battery level on different platforms.
This sample is currently being built. Not all platforms and functionality are in place.
diff --git a/experimental/federated_plugin/federated_plugin/android/build.gradle b/experimental/federated_plugin/federated_plugin/android/build.gradle
index d237dda9c..8c6bee886 100644
--- a/experimental/federated_plugin/federated_plugin/android/build.gradle
+++ b/experimental/federated_plugin/federated_plugin/android/build.gradle
@@ -40,5 +40,4 @@ android {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'com.google.android.gms:play-services-location:17.0.0'
}
diff --git a/experimental/federated_plugin/federated_plugin/android/src/main/AndroidManifest.xml b/experimental/federated_plugin/federated_plugin/android/src/main/AndroidManifest.xml
index e44aed57b..22a910cef 100644
--- a/experimental/federated_plugin/federated_plugin/android/src/main/AndroidManifest.xml
+++ b/experimental/federated_plugin/federated_plugin/android/src/main/AndroidManifest.xml
@@ -1,5 +1,3 @@
-
-
diff --git a/experimental/federated_plugin/federated_plugin/android/src/main/kotlin/dev/flutter/federated_plugin/FederatedPlugin.kt b/experimental/federated_plugin/federated_plugin/android/src/main/kotlin/dev/flutter/federated_plugin/FederatedPlugin.kt
index cbd9d10a7..c85fecf8b 100644
--- a/experimental/federated_plugin/federated_plugin/android/src/main/kotlin/dev/flutter/federated_plugin/FederatedPlugin.kt
+++ b/experimental/federated_plugin/federated_plugin/android/src/main/kotlin/dev/flutter/federated_plugin/FederatedPlugin.kt
@@ -4,109 +4,55 @@
package dev.flutter.federated_plugin
-import android.Manifest
-import android.app.Activity
import android.content.Context
-import android.content.pm.PackageManager
+import android.content.Intent
+import android.content.IntentFilter
+import android.os.BatteryManager
+import android.os.Build
import androidx.annotation.NonNull
-import androidx.core.app.ActivityCompat.requestPermissions
-import androidx.core.content.ContextCompat
-import com.google.android.gms.location.LocationServices.getFusedLocationProviderClient
import io.flutter.embedding.engine.plugins.FlutterPlugin
-import io.flutter.embedding.engine.plugins.activity.ActivityAware
-import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
-import io.flutter.plugin.common.PluginRegistry
-
-class FederatedPlugin : FlutterPlugin, MethodCallHandler, ActivityAware, PluginRegistry.RequestPermissionsResultListener {
+class FederatedPlugin : FlutterPlugin, MethodCallHandler {
private lateinit var channel: MethodChannel
- private lateinit var context: Context
- private lateinit var activity: Activity
- private lateinit var result: Result
- private val REQUEST_CODE = 1001
+ private var context: Context? = null
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
- channel = MethodChannel(flutterPluginBinding.binaryMessenger, "location")
+ channel = MethodChannel(flutterPluginBinding.binaryMessenger, "battery")
channel.setMethodCallHandler(this)
context = flutterPluginBinding.applicationContext
}
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
- this.result = result
- if (call.method == "getLocation") {
- // Check for the runtime permission if SDK version is greater than 23. If permissions
- // are granted, send the location data back to Dart. If permissions are not granted,
- // request for the runtime permissions.
- if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP && !checkPermissions()) {
- requestPermissions(activity, arrayOf(
- Manifest.permission.ACCESS_FINE_LOCATION,
- Manifest.permission.ACCESS_COARSE_LOCATION
- ), REQUEST_CODE)
+ if (call.method == "getBatteryLevel") {
+ val batteryLevel: Int
+
+ batteryLevel = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ val batteryManager = context?.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
+ batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
+ } else {
+ val intent = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { intentFilter ->
+ context?.registerReceiver(null, intentFilter)
+ }
+ intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100 / intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
+ }
+
+ if (batteryLevel < 0) {
+ result.error("STATUS_UNAVAILABLE", "Not able to determine battery level.", null)
} else {
- provideLocation()
+ result.success(batteryLevel)
}
} else {
result.notImplemented()
}
}
- // Method to fetch and send the last known location of the device to Dart.
- private fun provideLocation() {
- getFusedLocationProviderClient(context).lastLocation
- .addOnSuccessListener { location ->
- if (location != null) {
- result.success(listOf(location.longitude, location.latitude))
- } else {
- result.error("NOT_DETERMINED", "Not able to determine location", null)
- }
- }.addOnFailureListener { exception ->
- result.error("Error", exception.message, null)
- }
- }
-
- // Method to check permissions to access the location data.
- private fun checkPermissions(): Boolean {
- val fineLocationPermission = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
- val coarseLocationPermission = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION)
-
- return fineLocationPermission == PackageManager.PERMISSION_GRANTED &&
- coarseLocationPermission == PackageManager.PERMISSION_GRANTED
- }
-
-
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
- }
-
- override fun onDetachedFromActivity() {}
-
- override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
- activity = binding.activity
- }
-
- override fun onAttachedToActivity(binding: ActivityPluginBinding) {
- activity = binding.activity
- binding.addRequestPermissionsResultListener(this)
- }
-
- override fun onDetachedFromActivityForConfigChanges() {}
-
- // Callback for the result after requesting for runtime permissions. If permissions
- // are granted, send the location data, or send an error back to Dart if permissions
- // are not granted.
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array?, grantResults: IntArray): Boolean {
- if (requestCode == REQUEST_CODE && grantResults.isNotEmpty()) {
- if (grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
- provideLocation()
- } else {
- result.error("PERMISSION_DENIED", "Permission denied from User", null)
- }
- }
- return false
+ context = null
}
}
diff --git a/experimental/federated_plugin/federated_plugin/example/lib/main.dart b/experimental/federated_plugin/federated_plugin/example/lib/main.dart
index dd32740dc..2eda3a851 100644
--- a/experimental/federated_plugin/federated_plugin/example/lib/main.dart
+++ b/experimental/federated_plugin/federated_plugin/example/lib/main.dart
@@ -18,15 +18,15 @@ class MyApp extends StatelessWidget {
}
}
-/// Demonstrates how to use the getLocation method from federated_plugin to access
-/// location data.
+/// Demonstrates how to use the getBatteryLevel method from federated_plugin to retrieve
+/// current battery level of device.
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State {
- Location location;
+ int batteryLevel;
@override
Widget build(BuildContext context) {
@@ -40,21 +40,20 @@ class _HomePageState extends State {
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
- location == null
+ batteryLevel == null
? SizedBox.shrink()
: Text(
- 'Latitude: ${location.latitude}\n'
- 'Longitude: ${location.longitude}',
+ 'Battery Level: $batteryLevel',
style: Theme.of(context).textTheme.headline5,
),
SizedBox(height: 16),
RaisedButton(
- child: Text('Get Location'),
+ child: Text('Get Battery Level'),
onPressed: () async {
try {
- final result = await getLocation();
+ final result = await getBatteryLevel();
setState(() {
- location = result;
+ batteryLevel = result;
});
} catch (error) {
Scaffold.of(context).showSnackBar(
diff --git a/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart b/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart
index 94acfb6c0..f40232040 100644
--- a/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart
+++ b/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart
@@ -2,7 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:federated_plugin/federated_plugin.dart';
import 'package:federated_plugin_example/main.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -10,27 +9,23 @@ import 'package:flutter_test/flutter_test.dart';
void main() {
group('federated plugin demo tests', () {
- final location = Location(latitude: 131.0, longitude: 221.0);
+ final batteryLevel = 45;
setUpAll(() {
- MethodChannel('location').setMockMethodCallHandler((call) async {
- if (call.method == 'getLocation') {
- return [location.longitude, location.latitude];
+ MethodChannel('battery').setMockMethodCallHandler((call) async {
+ if (call.method == 'getBatteryLevel') {
+ return batteryLevel;
}
});
});
- testWidgets('get location from platform', (tester) async {
+ testWidgets('get current battery level from platform', (tester) async {
await tester.pumpWidget(MyApp());
- // Tap button to get location from platform.
+ // Tap button to retrieve current battery level from platform.
await tester.tap(find.byType(RaisedButton));
await tester.pumpAndSettle();
- expect(
- find.text('Latitude: ${location.latitude}\n'
- 'Longitude: ${location.longitude}'),
- findsOneWidget,
- );
+ expect(find.text('Battery Level: $batteryLevel'), findsOneWidget);
});
});
}
diff --git a/experimental/federated_plugin/federated_plugin/lib/federated_plugin.dart b/experimental/federated_plugin/federated_plugin/lib/federated_plugin.dart
index 071cb6c31..6b83ab724 100644
--- a/experimental/federated_plugin/federated_plugin/lib/federated_plugin.dart
+++ b/experimental/federated_plugin/federated_plugin/lib/federated_plugin.dart
@@ -5,12 +5,10 @@
import 'dart:async';
import 'package:federated_plugin_platform_interface/federated_plugin_platform_interface.dart';
-import 'package:federated_plugin_platform_interface/location_model.dart';
-export 'package:federated_plugin_platform_interface/location_model.dart';
-/// Returns [Location] to provide latitude and longitude.
+/// Returns the current battery level of device.
///
-/// It uses [FederatedPluginInterface] interface to provide location.
-Future getLocation() async {
- return await FederatedPluginInterface.instance.getLocation();
+/// It uses [FederatedPluginInterface] interface to provide current battery level.
+Future getBatteryLevel() async {
+ return await FederatedPluginInterface.instance.getBatteryLevel();
}
diff --git a/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart b/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart
index a640c560d..e8d8ffd7b 100644
--- a/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart
+++ b/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart
@@ -10,17 +10,16 @@ void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('Federated Plugin Test', () {
- final location = Location(latitude: 131.0, longitude: 221.0);
- MethodChannel('location').setMockMethodCallHandler((call) async {
- if (call.method == 'getLocation') {
- return [location.longitude, location.latitude];
+ final batteryLevel = 34;
+ MethodChannel('battery').setMockMethodCallHandler((call) async {
+ if (call.method == 'getBatteryLevel') {
+ return batteryLevel;
}
});
- test('getLocation method test', () async {
- final result = await getLocation();
- expect(result.longitude, location.longitude);
- expect(result.latitude, location.latitude);
+ test('getBatteryLevel method test', () async {
+ final result = await getBatteryLevel();
+ expect(result, batteryLevel);
});
});
}
diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/lib/battery_method_channel.dart b/experimental/federated_plugin/federated_plugin_platform_interface/lib/battery_method_channel.dart
new file mode 100644
index 000000000..1a585a472
--- /dev/null
+++ b/experimental/federated_plugin/federated_plugin_platform_interface/lib/battery_method_channel.dart
@@ -0,0 +1,17 @@
+// Copyright 2020 The Flutter team. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'package:federated_plugin_platform_interface/federated_plugin_platform_interface.dart';
+import 'package:flutter/services.dart';
+
+/// Implements [FederatedPluginInterface] using [MethodChannel] to fetch
+/// battery level from platform.
+class BatteryMethodChannel extends FederatedPluginInterface {
+ static const MethodChannel _methodChannel = MethodChannel('battery');
+
+ @override
+ Future getBatteryLevel() async {
+ return await _methodChannel.invokeMethod('getBatteryLevel');
+ }
+}
diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/lib/federated_plugin_platform_interface.dart b/experimental/federated_plugin/federated_plugin_platform_interface/lib/federated_plugin_platform_interface.dart
index 01dc8f276..595c82f9c 100644
--- a/experimental/federated_plugin/federated_plugin_platform_interface/lib/federated_plugin_platform_interface.dart
+++ b/experimental/federated_plugin/federated_plugin_platform_interface/lib/federated_plugin_platform_interface.dart
@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:federated_plugin_platform_interface/location_method_channel.dart';
-import 'package:federated_plugin_platform_interface/location_model.dart';
+import 'package:federated_plugin_platform_interface/battery_method_channel.dart';
import 'package:plugin_platform_interface/plugin_platform_interface.dart';
/// Interface which allows all the platform plugins to implement the same
@@ -12,11 +11,11 @@ abstract class FederatedPluginInterface extends PlatformInterface {
FederatedPluginInterface() : super(token: _object);
static FederatedPluginInterface _federatedPluginInterface =
- LocationMethodChannel();
+ BatteryMethodChannel();
static final Object _object = Object();
- /// Provides instance of [LocationMethodChannel] to invoke platform calls.
+ /// Provides instance of [BatteryMethodChannel] to invoke platform calls.
static FederatedPluginInterface get instance => _federatedPluginInterface;
static set instance(FederatedPluginInterface instance) {
@@ -24,8 +23,8 @@ abstract class FederatedPluginInterface extends PlatformInterface {
_federatedPluginInterface = instance;
}
- /// Returns [Location] to provide latitude and longitude.
- Future getLocation() async {
- throw UnimplementedError('getLocation() has not been implemented.');
+ /// Returns the current battery level of device.
+ Future getBatteryLevel() async {
+ throw UnimplementedError('getBatteryLevel() has not been implemented.');
}
}
diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_method_channel.dart b/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_method_channel.dart
deleted file mode 100644
index ee41a85dd..000000000
--- a/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_method_channel.dart
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2020 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:federated_plugin_platform_interface/federated_plugin_platform_interface.dart';
-import 'package:federated_plugin_platform_interface/location_model.dart';
-import 'package:flutter/services.dart';
-
-/// Implements [FederatedPluginInterface] using [MethodChannel] to fetch
-/// location from platform.
-class LocationMethodChannel extends FederatedPluginInterface {
- static const MethodChannel _methodChannel = MethodChannel('location');
-
- @override
- Future getLocation() async {
- final result =
- await _methodChannel.invokeMethod>('getLocation');
-
- return Location(
- longitude: result.first as double,
- latitude: result.last as double,
- );
- }
-}
diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_model.dart b/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_model.dart
deleted file mode 100644
index ccf37b7cf..000000000
--- a/experimental/federated_plugin/federated_plugin_platform_interface/lib/location_model.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2020 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/// Model to hold the incoming latitude and longitude values from platform.
-class Location {
- final double latitude;
- final double longitude;
-
- Location({this.latitude, this.longitude});
-}
diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart b/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart
index dc6ae6634..920694047 100644
--- a/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart
+++ b/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart
@@ -2,8 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-import 'package:federated_plugin_platform_interface/location_method_channel.dart';
-import 'package:federated_plugin_platform_interface/location_model.dart';
+import 'package:federated_plugin_platform_interface/battery_method_channel.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@@ -11,18 +10,17 @@ void main() {
TestWidgetsFlutterBinding.ensureInitialized();
group('MethodChannel test', () {
- final location = Location(latitude: 1.0, longitude: 2.0);
- MethodChannel('location').setMockMethodCallHandler((call) async {
- if (call.method == 'getLocation') {
- return [location.longitude, location.latitude];
+ final batteryLevel = 89;
+ MethodChannel('battery').setMockMethodCallHandler((call) async {
+ if (call.method == 'getBatteryLevel') {
+ return batteryLevel;
}
});
- test('getLocation method test', () async {
- final locationMethodChannel = LocationMethodChannel();
- final result = await locationMethodChannel.getLocation();
- expect(result.longitude, location.longitude);
- expect(result.latitude, result.latitude);
+ test('getBatteryLevel method test', () async {
+ final locationMethodChannel = BatteryMethodChannel();
+ final result = await locationMethodChannel.getBatteryLevel();
+ expect(result, batteryLevel);
});
});
}
diff --git a/experimental/federated_plugin/federated_plugin_web/.gitignore b/experimental/federated_plugin/federated_plugin_web/.gitignore
index bb431f0d5..89aaf2a97 100644
--- a/experimental/federated_plugin/federated_plugin_web/.gitignore
+++ b/experimental/federated_plugin/federated_plugin_web/.gitignore
@@ -67,6 +67,9 @@ build/
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
+# Web related
+lib/generated_plugin_registrant.dart
+
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
diff --git a/experimental/federated_plugin/federated_plugin_web/lib/federated_plugin_web.dart b/experimental/federated_plugin/federated_plugin_web/lib/federated_plugin_web.dart
index 611ffa740..2029f0f8c 100644
--- a/experimental/federated_plugin/federated_plugin_web/lib/federated_plugin_web.dart
+++ b/experimental/federated_plugin/federated_plugin_web/lib/federated_plugin_web.dart
@@ -5,17 +5,17 @@
import 'dart:html' as html;
import 'package:federated_plugin_platform_interface/federated_plugin_platform_interface.dart';
-import 'package:federated_plugin_platform_interface/location_model.dart';
import 'package:flutter/services.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
-/// Web Implementation of [FederatedPluginInterface] to provide location.
+/// Web Implementation of [FederatedPluginInterface] to retrieve current battery
+/// level of device.
class FederatedPlugin extends FederatedPluginInterface {
- final html.Geolocation _geolocation;
+ final html.Navigator _navigator;
- /// Constructor to override the geolocation object for testing purpose.
- FederatedPlugin({html.Geolocation geolocation})
- : _geolocation = geolocation ?? html.window.navigator.geolocation;
+ /// Constructor to override the navigator object for testing purpose.
+ FederatedPlugin({html.Navigator navigator})
+ : _navigator = navigator ?? html.window.navigator;
/// Method to register the plugin which sets [FederatedPlugin] to be the default
/// instance of [FederatedPluginInterface].
@@ -23,21 +23,20 @@ class FederatedPlugin extends FederatedPluginInterface {
FederatedPluginInterface.instance = FederatedPlugin();
}
- /// Returns [Location] to provide latitude and longitude.
+ /// Returns the current battery level of device.
///
- /// If any error, it's assume that user has denied the permission forever.
+ /// If any error, it's assume that the BatteryManager API is not supported by
+ /// browser.
@override
- Future getLocation() async {
+ Future getBatteryLevel() async {
try {
- final geoPosition = await _geolocation.getCurrentPosition();
- return Location(
- longitude: geoPosition.coords.longitude.toDouble(),
- latitude: geoPosition.coords.latitude.toDouble(),
- );
+ final battery = await _navigator.getBattery() as html.BatteryManager;
+ // The battery level retrieved is in range of 0.0 to 1.0.
+ return battery.level * 100 as int;
} catch (error) {
throw PlatformException(
- code: 'PERMISSION_DENIED',
- message: 'Permission denied from User',
+ code: 'STATUS_UNAVAILABLE',
+ message: 'The plugin is not supported by the browser.',
details: null,
);
}
diff --git a/experimental/federated_plugin/federated_plugin_web/pubspec.yaml b/experimental/federated_plugin/federated_plugin_web/pubspec.yaml
index cf6eccd44..20a99b0ce 100644
--- a/experimental/federated_plugin/federated_plugin_web/pubspec.yaml
+++ b/experimental/federated_plugin/federated_plugin_web/pubspec.yaml
@@ -1,5 +1,5 @@
name: federated_plugin_web
-description: Web implementation of federated_plugin to provide location.
+description: Web implementation of federated_plugin to retrieve current battery level.
version: 0.0.1
homepage:
publish_to: none
diff --git a/experimental/federated_plugin/federated_plugin_web/test_driver/federated_plugin_web_e2e.dart b/experimental/federated_plugin/federated_plugin_web/test_driver/federated_plugin_web_e2e.dart
index ed856b6d0..25bfef88a 100644
--- a/experimental/federated_plugin/federated_plugin_web/test_driver/federated_plugin_web_e2e.dart
+++ b/experimental/federated_plugin/federated_plugin_web/test_driver/federated_plugin_web_e2e.dart
@@ -9,45 +9,35 @@ import 'package:federated_plugin_web/federated_plugin_web.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
-const kLatitude = 4;
-const kLongitude = 3;
+const kBatteryLevel = 0.49;
-class GeoLocationMock extends Mock implements Geolocation {}
+class NavigatorMock extends Mock implements Navigator {}
-class GeoPositionMock extends Mock implements Geoposition {
+class BatteryManagerMock extends Mock implements BatteryManager {
@override
- Coordinates get coords => MockCoordinates();
-}
-
-class MockCoordinates extends Mock implements Coordinates {
- @override
- num get latitude => kLatitude;
-
- @override
- num get longitude => kLongitude;
+ num get level => kBatteryLevel;
}
void main() {
E2EWidgetsFlutterBinding.ensureInitialized();
group('FederatedPlugin test', () {
- final geoLocationMock = GeoLocationMock();
+ final navigatorMock = NavigatorMock();
setUp(() {
- when(geoLocationMock.getCurrentPosition())
- .thenAnswer((realInvocation) async => GeoPositionMock());
+ when(navigatorMock.getBattery())
+ .thenAnswer((realInvocation) async => BatteryManagerMock());
});
- testWidgets('getLocation Method', (tester) async {
- final federatedPlugin = FederatedPlugin(geolocation: geoLocationMock);
- final location = await federatedPlugin.getLocation();
+ testWidgets('getBatteryLevel Method', (tester) async {
+ final federatedPlugin = FederatedPlugin(navigator: navigatorMock);
+ final batteryLevel = await federatedPlugin.getBatteryLevel();
- // Verify that getCurrentPosition was called.
- verify(geoLocationMock.getCurrentPosition());
+ // Verify that getBattery was called.
+ verify(navigatorMock.getBattery());
- // Verify the values of Location.longitude and Location.latitude.
- expect(location.longitude, kLongitude);
- expect(location.latitude, kLatitude);
+ // Verify the battery level.
+ expect(batteryLevel, kBatteryLevel * 100);
});
});
}