diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml
new file mode 100644
index 0000000..394bd64
--- /dev/null
+++ b/.github/workflows/firebase-hosting-pull-request.yml
@@ -0,0 +1,30 @@
+# This file was auto-generated by the Firebase CLI
+# https://github.com/firebase/firebase-tools
+
+name: Deploy to Firebase Hosting on PR
+on: pull_request
+permissions:
+ checks: write
+ contents: read
+ pull-requests: write
+jobs:
+ build_and_preview:
+ if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: subosito/flutter-action@v2
+ with:
+ channel: stable
+ - run: (cd open_earable && flutter build web --dart-define=BUILD_COMMIT=$(git
+ rev-parse --short HEAD) --dart-define=BUILD_BRANCH=$(git rev-parse
+ --abbrev-ref HEAD))
+ - uses: FirebaseExtended/action-hosting-deploy@v0
+ if: ${{ github.event_name == 'pull_request' }}
+ name: Deploy preview
+ with:
+ repoToken: ${{ secrets.GITHUB_TOKEN }}
+ firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_OPEN_EARABLE_WEB }}
+ projectId: open-earable-web
+ expires: 28d
+ entryPoint: open_earable/
diff --git a/open_earable/.firebaserc b/open_earable/.firebaserc
new file mode 100644
index 0000000..f3e4c75
--- /dev/null
+++ b/open_earable/.firebaserc
@@ -0,0 +1,5 @@
+{
+ "projects": {
+ "default": "open-earable-web"
+ }
+}
diff --git a/open_earable/android/app/src/main/AndroidManifest.xml b/open_earable/android/app/src/main/AndroidManifest.xml
index 0fd75de..727800b 100644
--- a/open_earable/android/app/src/main/AndroidManifest.xml
+++ b/open_earable/android/app/src/main/AndroidManifest.xml
@@ -31,4 +31,14 @@
android:name="flutterEmbedding"
android:value="2" />
+
+
+
+
+
+
+
+
+
+
diff --git a/open_earable/android/app/src/profile/AndroidManifest.xml b/open_earable/android/app/src/profile/AndroidManifest.xml
index 869e598..399f698 100644
--- a/open_earable/android/app/src/profile/AndroidManifest.xml
+++ b/open_earable/android/app/src/profile/AndroidManifest.xml
@@ -4,16 +4,4 @@
to allow setting breakpoints, to provide hot reload, etc.
-->
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/open_earable/firebase.json b/open_earable/firebase.json
new file mode 100644
index 0000000..ddab6ab
--- /dev/null
+++ b/open_earable/firebase.json
@@ -0,0 +1,10 @@
+{
+ "hosting": {
+ "public": "build/web/",
+ "ignore": [
+ "firebase.json",
+ "**/.*",
+ "**/node_modules/**"
+ ]
+ }
+}
diff --git a/open_earable/lib/apps_tab/apps_tab.dart b/open_earable/lib/apps_tab/apps_tab.dart
index a392e73..b44b432 100644
--- a/open_earable/lib/apps_tab/apps_tab.dart
+++ b/open_earable/lib/apps_tab/apps_tab.dart
@@ -9,7 +9,7 @@ import 'package:open_earable/apps_tab/step_counter/step_counter.dart';
import 'package:open_earable/apps_tab/tightness/tightness.dart';
import 'package:open_earable/apps_tab/recorder/lib/recorder.dart';
import 'package:open_earable/apps_tab/jump_height_test/jump_height_test.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import '../shared/global_theme.dart';
import 'package:open_earable/apps_tab/jump_rope_counter/jump_rope_counter.dart';
import 'powernapper/home_screen.dart';
@@ -48,8 +48,8 @@ class AppsTab extends StatelessWidget {
child: Recorder(_openEarable)))));
}),
AppInfo(
- logoPath:
- "lib/apps_tab/posture_tracker/assets/logo.png", //iconData: Icons.face_6,
+ logoPath: "lib/apps_tab/posture_tracker/assets/logo.png",
+ //iconData: Icons.face_6,
title: "Posture Tracker",
description: "Get feedback on bad posture",
onTap: () {
@@ -79,8 +79,8 @@ class AppsTab extends StatelessWidget {
child: JumpHeightTest(_openEarable))))));
}),
AppInfo(
- logoPath:
- "lib/apps_tab/jump_rope_counter/assets/logo.png", //iconData: Icons.keyboard_double_arrow_up,
+ logoPath: "lib/apps_tab/jump_rope_counter/assets/logo.png",
+ //iconData: Icons.keyboard_double_arrow_up,
title: "Jump Rope Counter",
description: "Count your rope skips",
onTap: () {
@@ -120,8 +120,8 @@ class AppsTab extends StatelessWidget {
child: SleepHomeScreen(_openEarable)))));
}),
AppInfo(
- logoPath:
- "lib/apps_tab/tightness/assets/logo.png", //iconData: Icons.music_note,
+ logoPath: "lib/apps_tab/tightness/assets/logo.png",
+ //iconData: Icons.music_note,
title: "Tightness Meter",
description: "Practice your sense of rythm",
onTap: () {
@@ -164,9 +164,7 @@ class AppsTab extends StatelessWidget {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: Card(
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: ListTile(
iconColor: Colors.white,
textColor: Colors.white,
@@ -179,8 +177,8 @@ class AppsTab extends StatelessWidget {
fit: BoxFit.cover))),
title: Text(apps[index].title),
subtitle: Text(apps[index].description),
- trailing: Icon(Icons.arrow_forward_ios,
- size: 16.0), // Arrow icon on the right
+ trailing: Icon(Icons.arrow_forward_ios, size: 16.0),
+ // Arrow icon on the right
onTap:
apps[index].onTap, // Callback when the card is tapped
),
diff --git a/open_earable/lib/apps_tab/jump_height_test/jump_height_chart.dart b/open_earable/lib/apps_tab/jump_height_test/jump_height_chart.dart
index 09a18b8..ddf02db 100644
--- a/open_earable/lib/apps_tab/jump_height_test/jump_height_chart.dart
+++ b/open_earable/lib/apps_tab/jump_height_test/jump_height_chart.dart
@@ -1,6 +1,6 @@
import 'dart:async';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:flutter/material.dart';
import 'package:community_charts_flutter/community_charts_flutter.dart' as charts;
import 'package:simple_kalman/simple_kalman.dart';
diff --git a/open_earable/lib/apps_tab/jump_height_test/jump_height_test.dart b/open_earable/lib/apps_tab/jump_height_test/jump_height_test.dart
index 4ae9a02..a3f8ad4 100644
--- a/open_earable/lib/apps_tab/jump_height_test/jump_height_test.dart
+++ b/open_earable/lib/apps_tab/jump_height_test/jump_height_test.dart
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:open_earable/apps_tab/jump_height_test/jump_height_chart.dart';
import 'dart:async';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:simple_kalman/simple_kalman.dart';
import 'dart:math';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
diff --git a/open_earable/lib/apps_tab/jump_rope_counter/jump_rope_counter.dart b/open_earable/lib/apps_tab/jump_rope_counter/jump_rope_counter.dart
index e3844d4..70ed469 100644
--- a/open_earable/lib/apps_tab/jump_rope_counter/jump_rope_counter.dart
+++ b/open_earable/lib/apps_tab/jump_rope_counter/jump_rope_counter.dart
@@ -2,7 +2,7 @@ import 'dart:math';
import 'package:flutter/material.dart';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'dart:async';
import 'package:intl/intl.dart';
import 'package:shared_preferences/shared_preferences.dart';
diff --git a/open_earable/lib/apps_tab/neck_stretch/model/stretch_state.dart b/open_earable/lib/apps_tab/neck_stretch/model/stretch_state.dart
index 7d37f27..84be6ba 100644
--- a/open_earable/lib/apps_tab/neck_stretch/model/stretch_state.dart
+++ b/open_earable/lib/apps_tab/neck_stretch/model/stretch_state.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:open_earable/apps_tab/neck_stretch/view_model/stretch_view_model.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
/// Enum for the neck stretch states
enum NeckStretchState {
diff --git a/open_earable/lib/apps_tab/neck_stretch/view/stretch_app_view.dart b/open_earable/lib/apps_tab/neck_stretch/view/stretch_app_view.dart
index 0dfc38b..d3421d8 100644
--- a/open_earable/lib/apps_tab/neck_stretch/view/stretch_app_view.dart
+++ b/open_earable/lib/apps_tab/neck_stretch/view/stretch_app_view.dart
@@ -9,7 +9,7 @@ import 'package:open_earable/apps_tab/neck_stretch/view/stretch_settings_view.da
import 'package:open_earable/apps_tab/neck_stretch/view/stretch_stats_view.dart';
import 'package:open_earable/shared/global_theme.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class MenuItem {
final IconData iconData;
diff --git a/open_earable/lib/apps_tab/neck_stretch/view_model/stretch_view_model.dart b/open_earable/lib/apps_tab/neck_stretch/view_model/stretch_view_model.dart
index 7b49e9e..a991347 100644
--- a/open_earable/lib/apps_tab/neck_stretch/view_model/stretch_view_model.dart
+++ b/open_earable/lib/apps_tab/neck_stretch/view_model/stretch_view_model.dart
@@ -4,7 +4,7 @@ import "package:flutter/material.dart";
import 'package:open_earable/apps_tab/posture_tracker/model/attitude.dart';
import 'package:open_earable/apps_tab/posture_tracker/model/attitude_tracker.dart';
import 'package:open_earable/apps_tab/neck_stretch/model/stretch_state.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class StretchViewModel extends ChangeNotifier {
Attitude _attitude = Attitude();
diff --git a/open_earable/lib/apps_tab/posture_tracker/model/bad_posture_reminder.dart b/open_earable/lib/apps_tab/posture_tracker/model/bad_posture_reminder.dart
index 6ef0d5b..ee0d1b9 100644
--- a/open_earable/lib/apps_tab/posture_tracker/model/bad_posture_reminder.dart
+++ b/open_earable/lib/apps_tab/posture_tracker/model/bad_posture_reminder.dart
@@ -2,7 +2,7 @@ import 'dart:math';
import 'package:open_earable/apps_tab/posture_tracker/model/attitude.dart';
import 'package:open_earable/apps_tab/posture_tracker/model/attitude_tracker.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class BadPostureSettings {
bool isActive;
diff --git a/open_earable/lib/apps_tab/posture_tracker/model/earable_attitude_tracker.dart b/open_earable/lib/apps_tab/posture_tracker/model/earable_attitude_tracker.dart
index 8fd8627..b2ecb57 100644
--- a/open_earable/lib/apps_tab/posture_tracker/model/earable_attitude_tracker.dart
+++ b/open_earable/lib/apps_tab/posture_tracker/model/earable_attitude_tracker.dart
@@ -2,7 +2,7 @@ import 'dart:async';
import 'package:open_earable/apps_tab/posture_tracker/model/attitude_tracker.dart';
import 'package:open_earable/apps_tab/posture_tracker/model/ewma.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class EarableAttitudeTracker extends AttitudeTracker {
final OpenEarable _openEarable;
diff --git a/open_earable/lib/apps_tab/posture_tracker/view/posture_tracker_view.dart b/open_earable/lib/apps_tab/posture_tracker/view/posture_tracker_view.dart
index 18e5e0b..fd83688 100644
--- a/open_earable/lib/apps_tab/posture_tracker/view/posture_tracker_view.dart
+++ b/open_earable/lib/apps_tab/posture_tracker/view/posture_tracker_view.dart
@@ -8,7 +8,7 @@ import 'package:open_earable/apps_tab/posture_tracker/view/settings_view.dart';
import 'package:open_earable/apps_tab/posture_tracker/view_model/posture_tracker_view_model.dart';
import 'package:provider/provider.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class PostureTrackerView extends StatefulWidget {
final AttitudeTracker _tracker;
diff --git a/open_earable/lib/apps_tab/powernapper/home_screen.dart b/open_earable/lib/apps_tab/powernapper/home_screen.dart
index 8760d41..0bf38ce 100644
--- a/open_earable/lib/apps_tab/powernapper/home_screen.dart
+++ b/open_earable/lib/apps_tab/powernapper/home_screen.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:open_earable/apps_tab/powernapper/timerscreen.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'interact.dart';
diff --git a/open_earable/lib/apps_tab/powernapper/interact.dart b/open_earable/lib/apps_tab/powernapper/interact.dart
index cb3c528..dc90d3f 100644
--- a/open_earable/lib/apps_tab/powernapper/interact.dart
+++ b/open_earable/lib/apps_tab/powernapper/interact.dart
@@ -1,4 +1,4 @@
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
///Interaction class for the earable. All actions executed on the earable are accessible through this class.
///For example rings or led colors.
diff --git a/open_earable/lib/apps_tab/powernapper/movementTracker.dart b/open_earable/lib/apps_tab/powernapper/movementTracker.dart
index 023d2c4..59cffb2 100644
--- a/open_earable/lib/apps_tab/powernapper/movementTracker.dart
+++ b/open_earable/lib/apps_tab/powernapper/movementTracker.dart
@@ -2,7 +2,7 @@ import 'dart:async';
import 'package:open_earable/apps_tab/powernapper/interact.dart';
import 'package:open_earable/apps_tab/powernapper/sensor_datatypes.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
/// Movement Tracker has lgoic for timer & movement validation.
class MovementTracker {
diff --git a/open_earable/lib/apps_tab/recorder/lib/recorder.dart b/open_earable/lib/apps_tab/recorder/lib/recorder.dart
index eef4b66..09cf3d8 100644
--- a/open_earable/lib/apps_tab/recorder/lib/recorder.dart
+++ b/open_earable/lib/apps_tab/recorder/lib/recorder.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
import 'dart:async';
import 'dart:io';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:path_provider/path_provider.dart';
import 'package:open_file/open_file.dart';
diff --git a/open_earable/lib/apps_tab/step_counter/step_counter.dart b/open_earable/lib/apps_tab/step_counter/step_counter.dart
index 2beb8cd..0a73a19 100644
--- a/open_earable/lib/apps_tab/step_counter/step_counter.dart
+++ b/open_earable/lib/apps_tab/step_counter/step_counter.dart
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:open_earable/ble/ble_controller.dart';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
import 'dart:async';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
/**
diff --git a/open_earable/lib/apps_tab/tightness/tightness.dart b/open_earable/lib/apps_tab/tightness/tightness.dart
index 279d05a..1509f84 100644
--- a/open_earable/lib/apps_tab/tightness/tightness.dart
+++ b/open_earable/lib/apps_tab/tightness/tightness.dart
@@ -3,7 +3,7 @@ import 'package:open_earable/ble/ble_controller.dart';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
import 'dart:async';
import 'dart:math' as math;
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
class TightnessMeter extends StatefulWidget {
diff --git a/open_earable/lib/ble/ble_connect_view.dart b/open_earable/lib/ble/ble_connect_view.dart
index 8ea86e5..80ab531 100644
--- a/open_earable/lib/ble/ble_connect_view.dart
+++ b/open_earable/lib/ble/ble_connect_view.dart
@@ -2,12 +2,13 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:open_earable/ble/ble_controller.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
class BLEPage extends StatefulWidget {
final OpenEarable openEarable;
final int earableIndex;
+
BLEPage(this.openEarable, this.earableIndex);
@override
@@ -16,6 +17,7 @@ class BLEPage extends StatefulWidget {
class _BLEPageState extends State {
late OpenEarable _openEarable;
+
@override
void initState() {
super.initState();
@@ -56,8 +58,8 @@ class _BLEPageState extends State {
),
child: ListView.builder(
padding: EdgeInsets.zero,
- physics:
- const NeverScrollableScrollPhysics(), // Disable scrolling,
+ physics: const NeverScrollableScrollPhysics(),
+ // Disable scrolling,
shrinkWrap: true,
itemCount: controller.discoveredDevices.length,
itemBuilder: (BuildContext context, int index) {
@@ -101,28 +103,18 @@ class _BLEPageState extends State {
textAlign: TextAlign.center,
))),
Center(
- child: Platform.isIOS
- ? CupertinoButton(
- padding: EdgeInsets.fromLTRB(16, 0, 16, 0),
- child: const Text('Restart Scan'),
- color: CupertinoTheme.of(context)
- .primaryColor, // iOS equivalent for a prominent button color
- onPressed: () =>
- Provider.of(context, listen: false)
- .startScanning(_openEarable),
- )
- : ElevatedButton(
- onPressed: () =>
- Provider.of(context, listen: false)
- .startScanning(_openEarable),
- style: ButtonStyle(
- foregroundColor: MaterialStateProperty.all(
- Theme.of(context).colorScheme.primary),
- backgroundColor: MaterialStateProperty.all(
- Theme.of(context).colorScheme.secondary),
- ),
- child: const Text('Restart Scan'),
- ),
+ child: ElevatedButton(
+ onPressed: () =>
+ Provider.of(context, listen: false)
+ .startScanning(_openEarable),
+ style: ButtonStyle(
+ foregroundColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.primary),
+ backgroundColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.secondary),
+ ),
+ child: const Text('Restart Scan'),
+ ),
)
],
));
@@ -132,17 +124,13 @@ class _BLEPageState extends State {
if (_openEarable.bleManager.connectedDevice?.id == id) {
return Icon(
size: 24,
- Platform.isIOS ? CupertinoIcons.check_mark : Icons.check,
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryColor
- : Theme.of(context).colorScheme.secondary);
+ Icons.check,
+ color: Theme.of(context).colorScheme.secondary);
} else if (_openEarable.bleManager.connectingDevice?.id == id) {
return SizedBox(
height: 24,
width: 24,
- child: Platform.isIOS
- ? CupertinoActivityIndicator()
- : CircularProgressIndicator(strokeWidth: 2));
+ child: CircularProgressIndicator(strokeWidth: 2));
}
return const SizedBox.shrink();
}
diff --git a/open_earable/lib/ble/ble_controller.dart b/open_earable/lib/ble/ble_controller.dart
index 91e29ea..602a537 100644
--- a/open_earable/lib/ble/ble_controller.dart
+++ b/open_earable/lib/ble/ble_controller.dart
@@ -2,9 +2,8 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:open_earable/controls_tab/models/open_earable_settings_v2.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:shared_preferences/shared_preferences.dart';
class BluetoothController extends ChangeNotifier {
diff --git a/open_earable/lib/ble/ble_tab_bar_page.dart b/open_earable/lib/ble/ble_tab_bar_page.dart
index efb9283..c0c9a77 100644
--- a/open_earable/lib/ble/ble_tab_bar_page.dart
+++ b/open_earable/lib/ble/ble_tab_bar_page.dart
@@ -7,6 +7,7 @@ import 'package:open_earable/ble/ble_controller.dart';
class BLETabBarPage extends StatefulWidget {
final int index;
+
BLETabBarPage({int this.index = 0});
@override
@@ -66,103 +67,55 @@ class _BLETabBarPageState extends State
@override
Widget build(BuildContext context) {
- return Platform.isIOS
- ? CupertinoPageScaffold(
- backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor,
- navigationBar: CupertinoNavigationBar(
- middle: Text("Bluetooth Devices"),
- leading: CupertinoNavigationBarBackButton(
- onPressed: () {
- Navigator.pop(context);
- },
- ),
- ),
- child: CupertinoTabScaffold(
- controller: _cupertinoTabController,
- tabBar: CupertinoTabBar(
- items: [
- BottomNavigationBarItem(
- label: 'Left Earable',
- icon: ImageIcon(
- AssetImage('assets/OpenEarableIconLeft.png'),
- size: 40.0),
- ),
- BottomNavigationBarItem(
- label: 'Right Earable',
- icon: ImageIcon(
- AssetImage('assets/OpenEarableIconRight.png'),
- size: 40.0,
- ),
- ),
- ],
- ),
- tabBuilder: (BuildContext context, int index) {
- return CupertinoTabView(
- builder: (context) {
- return index == 0
- ? BLEPage(
- Provider.of(context)
- .openEarableLeft,
- 0)
- : BLEPage(
- Provider.of(context)
- .openEarableRight,
- 1);
- },
- );
- },
- ))
- : Scaffold(
+ return Scaffold(
+ backgroundColor: Theme.of(context).colorScheme.background,
+ appBar: AppBar(
+ title: Text("Bluetooth Devices"),
+ ),
+ body: DefaultTabController(
+ length: 2,
+ child: Scaffold(
backgroundColor: Theme.of(context).colorScheme.background,
- appBar: AppBar(
- title: Text("Bluetooth Devices"),
+ body: TabBarView(
+ controller: _tabController,
+ physics:
+ NeverScrollableScrollPhysics(), // Disable swipe to change tabs
+ children: [
+ BLEPage(
+ Provider.of(context).openEarableLeft,
+ 0),
+ BLEPage(
+ Provider.of(context).openEarableRight,
+ 1),
+ ],
),
- body: DefaultTabController(
- length: 2,
- child: Scaffold(
- backgroundColor: Theme.of(context).colorScheme.background,
- body: TabBarView(
- controller: _tabController,
- physics:
- NeverScrollableScrollPhysics(), // Disable swipe to change tabs
- children: [
- BLEPage(
- Provider.of(context)
- .openEarableLeft,
- 0),
- BLEPage(
- Provider.of(context)
- .openEarableRight,
- 1),
- ],
+ bottomNavigationBar: BottomNavigationBar(
+ backgroundColor: Theme.of(context).colorScheme.background,
+ currentIndex: _tabController.index,
+ onTap: (index) {
+ setState(() {
+ _tabController.index = index;
+ });
+ },
+ items: [
+ BottomNavigationBarItem(
+ label: 'Left Earable',
+ icon: ImageIcon(
+ AssetImage('assets/OpenEarableIconLeft.png'),
+ size: 40.0,
+ ),
),
- bottomNavigationBar: BottomNavigationBar(
- backgroundColor: Theme.of(context).colorScheme.background,
- currentIndex: _tabController.index,
- onTap: (index) {
- setState(() {
- _tabController.index = index;
- });
- },
- items: [
- BottomNavigationBarItem(
- label: 'Left Earable',
- icon: ImageIcon(
- AssetImage('assets/OpenEarableIconLeft.png'),
- size: 40.0,
- ),
- ),
- BottomNavigationBarItem(
- label: 'Right Earable',
- icon: ImageIcon(
- AssetImage('assets/OpenEarableIconRight.png'),
- size: 40.0,
- ),
- ),
- ],
+ BottomNavigationBarItem(
+ label: 'Right Earable',
+ icon: ImageIcon(
+ AssetImage('assets/OpenEarableIconRight.png'),
+ size: 40.0,
+ ),
),
- ),
- ));
+ ],
+ ),
+ ),
+ ));
}
}
diff --git a/open_earable/lib/ble/v1_ble_connect_view.dart b/open_earable/lib/ble/v1_ble_connect_view.dart
index b2956b7..f7751f8 100644
--- a/open_earable/lib/ble/v1_ble_connect_view.dart
+++ b/open_earable/lib/ble/v1_ble_connect_view.dart
@@ -2,7 +2,7 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:open_earable/ble/ble_controller.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
class V1BLEPage extends StatefulWidget {
@@ -17,6 +17,7 @@ class V1BLEPage extends StatefulWidget {
class _V1BLEPageState extends State {
final String _pageTitle = "Bluetooth Devices";
late OpenEarable _openEarable;
+
@override
void initState() {
super.initState();
@@ -27,18 +28,12 @@ class _V1BLEPageState extends State {
@override
Widget build(BuildContext context) {
- return Platform.isIOS
- ? CupertinoPageScaffold(
- navigationBar: CupertinoNavigationBar(middle: Text(_pageTitle)),
- child: SafeArea(
- child: _getBody(),
- ))
- : Scaffold(
- backgroundColor: Theme.of(context).colorScheme.background,
- appBar: AppBar(
- title: Text(_pageTitle),
- ),
- body: _getBody());
+ return Scaffold(
+ backgroundColor: Theme.of(context).colorScheme.background,
+ appBar: AppBar(
+ title: Text(_pageTitle),
+ ),
+ body: _getBody());
}
Widget _getBody() {
@@ -70,8 +65,8 @@ class _V1BLEPageState extends State {
),
child: ListView.builder(
padding: EdgeInsets.zero,
- physics:
- const NeverScrollableScrollPhysics(), // Disable scrolling,
+ physics: const NeverScrollableScrollPhysics(),
+ // Disable scrolling,
shrinkWrap: true,
itemCount: controller.discoveredDevices.length,
itemBuilder: (BuildContext context, int index) {
@@ -115,28 +110,18 @@ class _V1BLEPageState extends State {
textAlign: TextAlign.center,
))),
Center(
- child: Platform.isIOS
- ? CupertinoButton(
- padding: EdgeInsets.fromLTRB(16, 0, 16, 0),
- child: const Text('Restart Scan'),
- color: CupertinoTheme.of(context)
- .primaryColor, // iOS equivalent for a prominent button color
- onPressed: () =>
- Provider.of(context, listen: false)
- .startScanning(_openEarable),
- )
- : ElevatedButton(
- onPressed: () =>
- Provider.of(context, listen: false)
- .startScanning(_openEarable),
- style: ButtonStyle(
- foregroundColor: MaterialStateProperty.all(
- Theme.of(context).colorScheme.primary),
- backgroundColor: MaterialStateProperty.all(
- Theme.of(context).colorScheme.secondary),
- ),
- child: const Text('Restart Scan'),
- ),
+ child: ElevatedButton(
+ onPressed: () =>
+ Provider.of(context, listen: false)
+ .startScanning(_openEarable),
+ style: ButtonStyle(
+ foregroundColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.primary),
+ backgroundColor: MaterialStateProperty.all(
+ Theme.of(context).colorScheme.secondary),
+ ),
+ child: const Text('Restart Scan'),
+ ),
)
],
));
@@ -146,17 +131,13 @@ class _V1BLEPageState extends State {
if (_openEarable.bleManager.connectedDevice?.id == id) {
return Icon(
size: 24,
- Platform.isIOS ? CupertinoIcons.check_mark : Icons.check,
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryColor
- : Theme.of(context).colorScheme.secondary);
+ Icons.check,
+ color: Theme.of(context).colorScheme.secondary);
} else if (_openEarable.bleManager.connectingDevice?.id == id) {
return SizedBox(
height: 24,
width: 24,
- child: Platform.isIOS
- ? CupertinoActivityIndicator()
- : CircularProgressIndicator(strokeWidth: 2));
+ child: CircularProgressIndicator(strokeWidth: 2));
}
return const SizedBox.shrink();
}
diff --git a/open_earable/lib/controls_tab/controls_tab.dart b/open_earable/lib/controls_tab/controls_tab.dart
index 16be42b..0b200b4 100644
--- a/open_earable/lib/controls_tab/controls_tab.dart
+++ b/open_earable/lib/controls_tab/controls_tab.dart
@@ -31,9 +31,7 @@ class _ControlTabState extends State {
Widget build(BuildContext context) {
return SingleChildScrollView(
child: GestureDetector(
- onTap: () => Platform.isIOS
- ? FocusScope.of(context).requestFocus(FocusNode())
- : FocusScope.of(context).unfocus(),
+ onTap: () => FocusScope.of(context).unfocus(),
child: Selector(
selector: (context, controller) => controller.isV2,
builder: (context, isV2, child) {
diff --git a/open_earable/lib/controls_tab/models/open_earable_settings_v2.dart b/open_earable/lib/controls_tab/models/open_earable_settings_v2.dart
index 50b5390..0e45a53 100644
--- a/open_earable/lib/controls_tab/models/open_earable_settings_v2.dart
+++ b/open_earable/lib/controls_tab/models/open_earable_settings_v2.dart
@@ -1,5 +1,5 @@
import 'package:flutter/material.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
class OpenEarableSettingsV2 {
static final OpenEarableSettingsV2 _instance =
diff --git a/open_earable/lib/controls_tab/views/audio_player.dart b/open_earable/lib/controls_tab/views/audio_player.dart
index 02a31ae..b1274c1 100644
--- a/open_earable/lib/controls_tab/views/audio_player.dart
+++ b/open_earable/lib/controls_tab/views/audio_player.dart
@@ -2,13 +2,14 @@ import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:open_earable/ble/ble_controller.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
import '../models/open_earable_settings.dart';
import '../../shared/dynamic_value_picker.dart';
class AudioPlayerCard extends StatefulWidget {
final OpenEarable _openEarable;
+
AudioPlayerCard(this._openEarable);
@override
@@ -17,6 +18,7 @@ class AudioPlayerCard extends StatefulWidget {
class _AudioPlayerCardState extends State {
final OpenEarable _openEarable;
+
_AudioPlayerCardState(this._openEarable);
late TextEditingController _filenameTextController;
@@ -187,9 +189,7 @@ class _AudioPlayerCardState extends State {
updateText(connected);
return Card(
//Audio Player Card
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
@@ -207,9 +207,7 @@ class _AudioPlayerCardState extends State {
_getJingleRow(),
_getFrequencyRow(),
SizedBox(height: 12),
- Platform.isIOS
- ? _getCupertinoButtonRow(connected)
- : _getMaterialButtonRow(connected),
+ _getMaterialButtonRow(connected),
],
),
),
@@ -224,44 +222,24 @@ class _AudioPlayerCardState extends State {
return SizedBox(
height: 38,
width: 44,
- child: Platform.isIOS
- ? CupertinoRadio(
- value: index,
- groupValue:
- OpenEarableSettings().selectedAudioPlayerRadio,
- onChanged: !connected
- ? null
- : (int? value) {
- setState(() {
- OpenEarableSettings().selectedAudioPlayerRadio =
- value ?? 0;
- });
- },
- activeColor: CupertinoTheme.of(context).primaryColor,
- fillColor:
- CupertinoTheme.of(context).primaryContrastingColor,
- inactiveColor:
- CupertinoTheme.of(context).primaryContrastingColor,
- )
- : Radio(
- value: index,
- groupValue:
- OpenEarableSettings().selectedAudioPlayerRadio,
- onChanged: !connected
- ? null
- : (int? value) {
- setState(() {
- OpenEarableSettings().selectedAudioPlayerRadio =
- value ?? 0;
- });
- },
- fillColor: MaterialStateProperty.resolveWith((states) {
- if (states.contains(MaterialState.selected)) {
- return Theme.of(context).colorScheme.secondary;
- }
- return Colors.grey;
- }),
- ));
+ child: Radio(
+ value: index,
+ groupValue: OpenEarableSettings().selectedAudioPlayerRadio,
+ onChanged: !connected
+ ? null
+ : (int? value) {
+ setState(() {
+ OpenEarableSettings().selectedAudioPlayerRadio =
+ value ?? 0;
+ });
+ },
+ fillColor: MaterialStateProperty.resolveWith((states) {
+ if (states.contains(MaterialState.selected)) {
+ return Theme.of(context).colorScheme.secondary;
+ }
+ return Colors.grey;
+ }),
+ ));
});
}
@@ -294,54 +272,26 @@ class _AudioPlayerCardState extends State {
return Selector(
selector: (_, controller) => controller.connected,
builder: (context, connected, child) {
- if (Platform.isIOS) {
- return CupertinoTextField(
- cursorColor: Colors.blue,
- controller: textController,
- obscureText: false,
- placeholder: placeholder,
- style: TextStyle(
- color: connected ? Colors.black : Colors.grey[700],
- ),
- padding: EdgeInsets.fromLTRB(8, 0, 0, 0),
- textAlignVertical: TextAlignVertical.center,
- textInputAction: TextInputAction.done,
- onSubmitted: (_) {
- FocusScope.of(context).requestFocus(FocusNode());
- },
- decoration: BoxDecoration(
- color: connected ? Colors.white : Colors.grey,
- borderRadius: BorderRadius.circular(4.0),
- ),
- placeholderStyle: TextStyle(
- color: connected ? Colors.black : Colors.grey,
- ),
- keyboardType: keyboardType,
- maxLength: maxLength,
- maxLines: 1,
- );
- } else {
- return TextField(
- controller: textController,
- obscureText: false,
- enabled: connected,
- style:
+ return TextField(
+ controller: textController,
+ obscureText: false,
+ enabled: connected,
+ style:
+ TextStyle(color: connected ? Colors.black : Colors.grey[700]),
+ decoration: InputDecoration(
+ labelText: placeholder,
+ contentPadding: EdgeInsets.fromLTRB(8, 0, 0, 0),
+ border: OutlineInputBorder(),
+ floatingLabelBehavior: FloatingLabelBehavior.never,
+ labelStyle:
TextStyle(color: connected ? Colors.black : Colors.grey[700]),
- decoration: InputDecoration(
- labelText: placeholder,
- contentPadding: EdgeInsets.fromLTRB(8, 0, 0, 0),
- border: OutlineInputBorder(),
- floatingLabelBehavior: FloatingLabelBehavior.never,
- labelStyle: TextStyle(
- color: connected ? Colors.black : Colors.grey[700]),
- filled: true,
- fillColor: connected ? Colors.white : Colors.grey,
- ),
- keyboardType: keyboardType,
- maxLength: maxLength,
- maxLines: 1,
- );
- }
+ filled: true,
+ fillColor: connected ? Colors.white : Colors.grey,
+ ),
+ keyboardType: keyboardType,
+ maxLength: maxLength,
+ maxLines: 1,
+ );
});
}
diff --git a/open_earable/lib/controls_tab/views/connect.dart b/open_earable/lib/controls_tab/views/connect.dart
index 4f9e803..d6c3ff4 100644
--- a/open_earable/lib/controls_tab/views/connect.dart
+++ b/open_earable/lib/controls_tab/views/connect.dart
@@ -1,11 +1,9 @@
-import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
-import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:open_earable/ble/ble_controller.dart';
import 'package:open_earable/ble/ble_tab_bar_page.dart';
import 'package:open_earable/controls_tab/models/open_earable_settings_v2.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -69,9 +67,7 @@ class _ConnectCard extends State {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: Card(
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 12, 16, 16),
child: Column(
@@ -93,38 +89,19 @@ class _ConnectCard extends State {
}),
Row(
children: [
- Platform.isIOS
- ? CupertinoCheckbox(
- value: _autoConnectEnabled,
- onChanged: (value) {
- setState(() {
- _autoConnectEnabled = value ?? false;
- });
- _startAutoConnectScan();
- if (value != null)
- prefs.setBool("autoConnectEnabled", value);
- },
- activeColor: _autoConnectEnabled
- ? CupertinoTheme.of(context).primaryColor
- : CupertinoTheme.of(context)
- .primaryContrastingColor,
- checkColor: CupertinoTheme.of(context)
- .primaryContrastingColor,
- )
- : Checkbox(
- checkColor:
- Theme.of(context).colorScheme.primary,
- //fillColor: Theme.of(context).colorScheme.primary,
- value: _autoConnectEnabled,
- onChanged: (value) {
- setState(() {
- _autoConnectEnabled = value ?? false;
- });
- _startAutoConnectScan();
- if (value != null)
- prefs.setBool("autoConnectEnabled", value);
- },
- ),
+ Checkbox(
+ checkColor: Theme.of(context).colorScheme.primary,
+ //fillColor: Theme.of(context).colorScheme.primary,
+ value: _autoConnectEnabled,
+ onChanged: (value) {
+ setState(() {
+ _autoConnectEnabled = value ?? false;
+ });
+ _startAutoConnectScan();
+ if (value != null)
+ prefs.setBool("autoConnectEnabled", value);
+ },
+ ),
Text(
"Connect to OpenEarable automatically",
style: TextStyle(
@@ -143,8 +120,8 @@ class _ConnectCard extends State {
bleController.earableSOCLeft,
builder: (context, socLeft, child) {
return _getEarableSelectButton(
- imagePath:
- "assets/OpenEarableV2-L.png", // path to your image asset
+ imagePath: "assets/OpenEarableV2-L.png",
+ // path to your image asset
isSelected: OpenEarableSettingsV2()
.selectedButtonIndex ==
0,
@@ -191,32 +168,21 @@ class _ConnectCard extends State {
Widget _getConnectButton(BuildContext context, String side) {
return Container(
- height: 37,
- width: double.infinity,
- child: !Platform.isIOS
- ? ElevatedButton(
- onPressed: () => _connectButtonAction(context, side),
- style: ElevatedButton.styleFrom(
- backgroundColor: Color(0xff77F2A1),
- foregroundColor: Colors.black,
- ),
- child: Text("Connect"),
- )
- : CupertinoButton(
- padding: EdgeInsets.zero,
- color: CupertinoTheme.of(context).primaryColor,
- child: Text("Connect"),
- onPressed: () => _connectButtonAction(context, side)),
- );
+ height: 37,
+ width: double.infinity,
+ child: ElevatedButton(
+ onPressed: () => _connectButtonAction(context, side),
+ style: ElevatedButton.styleFrom(
+ backgroundColor: Color(0xff77F2A1),
+ foregroundColor: Colors.black,
+ ),
+ child: Text("Connect"),
+ ));
}
_connectButtonAction(BuildContext context, String side) {
- Navigator.of(context).push(Platform.isIOS
- ? CupertinoPageRoute(
- builder: (context) => BLETabBarPage(index: side == "Left" ? 0 : 1))
- : MaterialPageRoute(
- builder: (context) =>
- BLETabBarPage(index: side == "Left" ? 0 : 1)));
+ Navigator.of(context).push(MaterialPageRoute(
+ builder: (context) => BLETabBarPage(index: side == "Left" ? 0 : 1)));
}
void _tryAutoconnect(List devices) async {
@@ -278,110 +244,59 @@ class _ConnectCard extends State {
required onPressed,
required int? percentage,
}) {
- if (Platform.isIOS) {
- return CupertinoButton(
- color: Color.fromARGB(255, 83, 81, 91),
- onPressed: onPressed,
- padding:
- EdgeInsets.zero, // Remove padding to use the entire container space
- child: Container(
- padding: EdgeInsets.all(8.0), // Internal padding within the button
- decoration: BoxDecoration(
- borderRadius: BorderRadius.circular(
- 7.0), // Slightly smaller radius for the inner border
- border: Border.all(
+ return ElevatedButton(
+ onPressed: onPressed,
+ style: ButtonStyle(
+ backgroundColor: MaterialStateProperty.all(
+ Color.fromARGB(255, 83, 81, 91)), // Adjust the color as needed
+ shape: MaterialStateProperty.all(
+ RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(10.0),
+ side: BorderSide(
color: isSelected
- ? CupertinoTheme.of(context).primaryColor
+ ? Theme.of(context).colorScheme.secondary
: Colors.transparent,
width: 3,
),
),
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- "${openEarable.bleManager.connectedDevice?.name ?? "OpenEarable-XXXX"}${_batteryPercentageString(percentage)}",
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
- ),
- SizedBox(height: 8),
- Image.asset(imagePath, fit: BoxFit.fill),
- SizedBox(height: 8),
- Text(
- "Firmware: ${openEarable.deviceFirmwareVersion ?? "X.X.X"}",
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
- ),
- Text(
- "Hardware: ${openEarable.deviceHardwareVersion ?? "X.X.X"}",
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
- ),
- ],
- ),
),
- );
- } else {
- return ElevatedButton(
- onPressed: onPressed,
- style: ButtonStyle(
- backgroundColor: MaterialStateProperty.all(
- Color.fromARGB(255, 83, 81, 91)), // Adjust the color as needed
- shape: MaterialStateProperty.all(
- RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(10.0),
- side: BorderSide(
- color: isSelected
- ? Theme.of(context).colorScheme.secondary
- : Colors.transparent,
- width: 3,
+ padding: MaterialStateProperty.all(
+ EdgeInsets.zero), // Adjust padding if necessary
+ ),
+ child: Container(
+ padding: EdgeInsets.all(8.0), // Padding inside the button for content
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Text(
+ "${openEarable.bleManager.connectedDevice?.name ?? "OpenEarable-XXXX"}${_batteryPercentageString(percentage)}",
+ // Assuming _openEarable and bleController are accessible
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 15.0,
),
),
- ),
- padding: MaterialStateProperty.all(
- EdgeInsets.zero), // Adjust padding if necessary
- ),
- child: Container(
- padding: EdgeInsets.all(8.0), // Padding inside the button for content
- child: Column(
- mainAxisSize: MainAxisSize.min,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- "${openEarable.bleManager.connectedDevice?.name ?? "OpenEarable-XXXX"}${_batteryPercentageString(percentage)}", // Assuming _openEarable and bleController are accessible
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
+ SizedBox(height: 8),
+ Image.asset(imagePath, fit: BoxFit.fill),
+ SizedBox(height: 8),
+ Text(
+ "Firmware: ${openEarable.deviceFirmwareVersion ?? "X.X.X"}",
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 15.0,
),
- SizedBox(height: 8),
- Image.asset(imagePath, fit: BoxFit.fill),
- SizedBox(height: 8),
- Text(
- "Firmware: ${openEarable.deviceFirmwareVersion ?? "X.X.X"}",
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
- ),
- Text(
- "Hardware: ${openEarable.deviceHardwareVersion ?? "X.X.X"}",
- style: TextStyle(
- color: Colors.white,
- fontSize: 15.0,
- ),
+ ),
+ Text(
+ "Hardware: ${openEarable.deviceHardwareVersion ?? "X.X.X"}",
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 15.0,
),
- ],
- ),
+ ),
+ ],
),
- );
- }
+ ),
+ );
}
}
diff --git a/open_earable/lib/controls_tab/views/led_color.dart b/open_earable/lib/controls_tab/views/led_color.dart
index e413fd0..063040a 100644
--- a/open_earable/lib/controls_tab/views/led_color.dart
+++ b/open_earable/lib/controls_tab/views/led_color.dart
@@ -1,7 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:open_earable/controls_tab/models/open_earable_settings.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'dart:async';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'dart:io';
@@ -217,9 +217,7 @@ class _LEDColorCardState extends State {
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: Card(
//LED Color Picker Card
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
@@ -254,64 +252,39 @@ class _LEDColorCardState extends State {
SizedBox(
width: 66,
height: 36,
- child: Platform.isIOS
- ? CupertinoButton(
- padding: EdgeInsets.zero,
- child: Text('Set',
- style: TextStyle(
- color: connected
- ? Colors.white
- : null)),
- onPressed: connected ? _setLEDColor : null,
- color: Color(0xff53515b),
- )
- : ElevatedButton(
- onPressed: connected ? _setLEDColor : null,
- style: ElevatedButton.styleFrom(
- backgroundColor: Color(
- 0xff53515b), // Set the background color to grey
- foregroundColor: Colors.white),
- child: Text('Set'),
- ),
+ child: ElevatedButton(
+ onPressed: connected ? _setLEDColor : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor: Color(0xff53515b),
+ // Set the background color to grey
+ foregroundColor: Colors.white),
+ child: Text('Set'),
+ ),
),
SizedBox(width: 5),
SizedBox(
width: 66,
height: 36,
- child: Platform.isIOS
- ? CupertinoButton(
- onPressed:
- connected ? _startRainbowMode : null,
- color: Color(0xff53515b),
- padding: EdgeInsets.zero,
- child: Text("🦄"))
- : ElevatedButton(
- onPressed:
- connected ? _startRainbowMode : null,
- style: ElevatedButton.styleFrom(
- backgroundColor: Color(
- 0xff53515b), // Set the background color to grey
- foregroundColor: Colors.white),
- child: Text("🦄"),
- )),
+ child: ElevatedButton(
+ onPressed: connected ? _startRainbowMode : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor: Color(0xff53515b),
+ // Set the background color to grey
+ foregroundColor: Colors.white),
+ child: Text("🦄"),
+ )),
Spacer(),
SizedBox(
width: 66,
height: 36,
- child: Platform.isIOS
- ? CupertinoButton(
- onPressed: connected ? _turnLEDoff : null,
- padding: EdgeInsets.zero,
- color: Color(0xfff27777),
- child: Text('Off'))
- : ElevatedButton(
- onPressed: connected ? _turnLEDoff : null,
- style: ElevatedButton.styleFrom(
- backgroundColor: Color(0xfff27777),
- foregroundColor: Colors.black,
- ),
- child: Text('Off'),
- ),
+ child: ElevatedButton(
+ onPressed: connected ? _turnLEDoff : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor: Color(0xfff27777),
+ foregroundColor: Colors.black,
+ ),
+ child: Text('Off'),
+ ),
)
],
),
diff --git a/open_earable/lib/controls_tab/views/sensor_control/sensor_control.dart b/open_earable/lib/controls_tab/views/sensor_control/sensor_control.dart
index 45e7298..28b61f7 100644
--- a/open_earable/lib/controls_tab/views/sensor_control/sensor_control.dart
+++ b/open_earable/lib/controls_tab/views/sensor_control/sensor_control.dart
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'dart:io';
import 'package:open_earable/ble/ble_controller.dart';
import 'sensor_control_row.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
import '../../models/open_earable_settings_v2.dart';
@@ -95,9 +95,7 @@ class _SensorControlCardState extends State {
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: Card(
//Audio Player Card
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.fromLTRB(16, 12, 16, 16),
child: Column(
@@ -113,7 +111,8 @@ class _SensorControlCardState extends State {
fontWeight: FontWeight.bold,
),
),
- Spacer(), // This matches the Spacer in your DynamicValuePicker row
+ Spacer(),
+ // This matches the Spacer in your DynamicValuePicker row
SizedBox(
width: 70,
height: 37,
@@ -125,9 +124,8 @@ class _SensorControlCardState extends State {
color: Color.fromRGBO(168, 168, 172, 1.0))),
),
),
- SizedBox(
- width:
- 8), // Space between the first title and the second title
+ SizedBox(width: 8),
+ // Space between the first title and the second title
SizedBox(
width: 70,
height: 37,
@@ -139,7 +137,8 @@ class _SensorControlCardState extends State {
color: Color.fromRGBO(168, 168, 172, 1.0))),
),
),
- SizedBox(width: 8), // Space before the "Hz" label
+ SizedBox(width: 8),
+ // Space before the "Hz" label
Text("Hz",
textAlign: TextAlign.left,
style:
@@ -181,41 +180,24 @@ class _SensorControlCardState extends State {
Expanded(
child: SizedBox(
height: 37,
- child: Platform.isIOS
- ? CupertinoButton(
- padding: EdgeInsets.zero,
- onPressed:
- Provider.of(context)
- .connected
- ? () => _writeSensorConfigs()
- : null,
- color: Provider.of(context)
+ child: ElevatedButton(
+ onPressed:
+ Provider.of(context).connected
+ ? _writeSensorConfigs
+ : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor:
+ Provider.of(context)
.connected
- ? CupertinoTheme.of(context).primaryColor
+ ? Theme.of(context).colorScheme.secondary
: Colors.grey,
- child: Text("Set Configuration"),
- )
- : ElevatedButton(
- onPressed:
- Provider.of(context)
- .connected
- ? _writeSensorConfigs
- : null,
- style: ElevatedButton.styleFrom(
- backgroundColor:
- Provider.of(context)
- .connected
- ? Theme.of(context)
- .colorScheme
- .secondary
- : Colors.grey,
- foregroundColor: Colors.black,
- enableFeedback:
- Provider.of(context)
- .connected,
- ),
- child: Text("Set Configuration"),
- ),
+ foregroundColor: Colors.black,
+ enableFeedback:
+ Provider.of(context)
+ .connected,
+ ),
+ child: Text("Set Configuration"),
+ ),
),
),
],
diff --git a/open_earable/lib/controls_tab/views/sensor_control/sensor_control_row.dart b/open_earable/lib/controls_tab/views/sensor_control/sensor_control_row.dart
index 1be4ece..d98bc5c 100644
--- a/open_earable/lib/controls_tab/views/sensor_control/sensor_control_row.dart
+++ b/open_earable/lib/controls_tab/views/sensor_control/sensor_control_row.dart
@@ -8,47 +8,36 @@ import 'package:open_earable/ble/ble_controller.dart';
class SensorControlRow extends StatefulWidget {
final String _sensorName;
+
SensorControlRow(this._sensorName);
+
@override
_SensorControlRow createState() => _SensorControlRow(_sensorName);
}
class _SensorControlRow extends State {
String _sensorName;
+
_SensorControlRow(this._sensorName);
+
@override
Widget build(BuildContext context) {
SensorSettings sensorSettings =
Provider.of(context, listen: true);
return Row(
children: [
- Platform.isIOS
- ? CupertinoCheckbox(
- value: sensorSettings.sensorSelected,
- onChanged: Provider.of(context).connected
- ? (value) {
- setState(() {
- sensorSettings.sensorSelected = value ?? false;
- });
- }
- : null,
- activeColor: sensorSettings.sensorSelected
- ? CupertinoTheme.of(context).primaryColor
- : CupertinoTheme.of(context).primaryContrastingColor,
- checkColor: CupertinoTheme.of(context).primaryContrastingColor,
- )
- : Checkbox(
- checkColor: Theme.of(context).colorScheme.primary,
- fillColor: MaterialStateProperty.resolveWith(_getCheckboxColor),
- value: sensorSettings.sensorSelected,
- onChanged: Provider.of(context).connected
- ? (value) {
- setState(() {
- sensorSettings.sensorSelected = value ?? false;
- });
- }
- : null,
- ),
+ Checkbox(
+ checkColor: Theme.of(context).colorScheme.primary,
+ fillColor: MaterialStateProperty.resolveWith(_getCheckboxColor),
+ value: sensorSettings.sensorSelected,
+ onChanged: Provider.of(context).connected
+ ? (value) {
+ setState(() {
+ sensorSettings.sensorSelected = value ?? false;
+ });
+ }
+ : null,
+ ),
Text(
_sensorName,
style: TextStyle(
diff --git a/open_earable/lib/controls_tab/views/v1_connect.dart b/open_earable/lib/controls_tab/views/v1_connect.dart
index 3891470..9d81b06 100644
--- a/open_earable/lib/controls_tab/views/v1_connect.dart
+++ b/open_earable/lib/controls_tab/views/v1_connect.dart
@@ -1,9 +1,7 @@
-import 'dart:io';
import 'dart:async';
import 'package:flutter/material.dart';
-import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:open_earable/ble/ble_controller.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:flutter/cupertino.dart';
import 'package:provider/provider.dart';
import 'package:open_earable/ble/ble_connect_view.dart';
@@ -54,9 +52,7 @@ class _ConnectCard extends State {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: Card(
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Consumer(
@@ -76,37 +72,19 @@ class _ConnectCard extends State {
),
Row(
children: [
- Platform.isIOS
- ? CupertinoCheckbox(
- value: _autoConnectEnabled,
- onChanged: (value) => {
- setState(() {
- _autoConnectEnabled = value ?? false;
- _startAutoConnectScan();
- if (value != null)
- prefs.setBool("autoConnectEnabled", value);
- })
- },
- activeColor: _autoConnectEnabled
- ? CupertinoTheme.of(context).primaryColor
- : CupertinoTheme.of(context)
- .primaryContrastingColor,
- checkColor: CupertinoTheme.of(context)
- .primaryContrastingColor,
- )
- : Checkbox(
- checkColor: Theme.of(context).colorScheme.primary,
- //fillColor: Theme.of(context).colorScheme.primary,
- value: _autoConnectEnabled,
- onChanged: (value) => {
- setState(() {
- _autoConnectEnabled = value ?? false;
- _startAutoConnectScan();
- if (value != null)
- prefs.setBool("autoConnectEnabled", value);
- })
- },
- ),
+ Checkbox(
+ checkColor: Theme.of(context).colorScheme.primary,
+ //fillColor: Theme.of(context).colorScheme.primary,
+ value: _autoConnectEnabled,
+ onChanged: (value) => {
+ setState(() {
+ _autoConnectEnabled = value ?? false;
+ _startAutoConnectScan();
+ if (value != null)
+ prefs.setBool("autoConnectEnabled", value);
+ })
+ },
+ ),
Text(
"Connect to OpenEarable automatically",
style: TextStyle(
@@ -184,45 +162,27 @@ class _ConnectCard extends State {
child: Container(
height: 37,
width: double.infinity,
- child: !Platform.isIOS
- ? ElevatedButton(
- onPressed: () => _connectButtonAction(context),
- style: ElevatedButton.styleFrom(
- backgroundColor: !_openEarable.bleManager.connected
- ? Color(0xff77F2A1)
- : Color(0xfff27777),
- foregroundColor: Colors.black,
- ),
- child: Text("Connect"),
- )
- : CupertinoButton(
- padding: EdgeInsets.zero,
- color: CupertinoTheme.of(context).primaryColor,
- child: Text("Connect"),
- onPressed: () => _connectButtonAction(context))),
+ child: ElevatedButton(
+ onPressed: () => _connectButtonAction(context),
+ style: ElevatedButton.styleFrom(
+ backgroundColor: !_openEarable.bleManager.connected
+ ? Color(0xff77F2A1)
+ : Color(0xfff27777),
+ foregroundColor: Colors.black,
+ ),
+ child: Text("Connect"),
+ )),
);
}
_connectButtonAction(BuildContext context) {
- Navigator.of(context).push(Platform.isIOS
- ? CupertinoPageRoute(
- builder: (context) => CupertinoPageScaffold(
- backgroundColor:
- CupertinoTheme.of(context).scaffoldBackgroundColor,
- navigationBar: CupertinoNavigationBar(
- middle: Text("Bluetooth Devices"),
- ),
- child: BLEPage(
- Provider.of(context, listen: false)
- .openEarableLeft,
- 0)))
- : MaterialPageRoute(
- builder: (context) => Scaffold(
- backgroundColor: Theme.of(context).colorScheme.background,
- appBar: AppBar(
- title: Text("Bluetooth Devices"),
- ),
- body: BLEPage(_openEarable, 0))));
+ Navigator.of(context).push(MaterialPageRoute(
+ builder: (context) => Scaffold(
+ backgroundColor: Theme.of(context).colorScheme.background,
+ appBar: AppBar(
+ title: Text("Bluetooth Devices"),
+ ),
+ body: BLEPage(_openEarable, 0))));
}
void _tryAutoconnect(
diff --git a/open_earable/lib/controls_tab/views/v1_sensor_configuration.dart b/open_earable/lib/controls_tab/views/v1_sensor_configuration.dart
index 3bcbece..9c68f27 100644
--- a/open_earable/lib/controls_tab/views/v1_sensor_configuration.dart
+++ b/open_earable/lib/controls_tab/views/v1_sensor_configuration.dart
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:open_earable/shared/dynamic_value_picker.dart';
import 'dart:io';
import 'package:open_earable/ble/ble_controller.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:provider/provider.dart';
import '../models/open_earable_settings.dart';
@@ -96,9 +96,7 @@ class _V1SensorConfigurationCardState extends State {
padding: const EdgeInsets.symmetric(horizontal: 5.0),
child: Card(
//Audio Player Card
- color: Platform.isIOS
- ? CupertinoTheme.of(context).primaryContrastingColor
- : Theme.of(context).colorScheme.primary,
+ color: Theme.of(context).colorScheme.primary,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
@@ -157,41 +155,24 @@ class _V1SensorConfigurationCardState extends State {
Expanded(
child: SizedBox(
height: 37,
- child: Platform.isIOS
- ? CupertinoButton(
- padding: EdgeInsets.zero,
- onPressed:
- Provider.of(context)
- .connected
- ? () => _writeSensorConfigs()
- : null,
- color: Provider.of(context)
+ child: ElevatedButton(
+ onPressed:
+ Provider.of(context).connected
+ ? _writeSensorConfigs
+ : null,
+ style: ElevatedButton.styleFrom(
+ backgroundColor:
+ Provider.of(context)
.connected
- ? CupertinoTheme.of(context).primaryColor
+ ? Theme.of(context).colorScheme.secondary
: Colors.grey,
- child: Text("Set Configuration"),
- )
- : ElevatedButton(
- onPressed:
- Provider.of(context)
- .connected
- ? _writeSensorConfigs
- : null,
- style: ElevatedButton.styleFrom(
- backgroundColor:
- Provider.of(context)
- .connected
- ? Theme.of(context)
- .colorScheme
- .secondary
- : Colors.grey,
- foregroundColor: Colors.black,
- enableFeedback:
- Provider.of(context)
- .connected,
- ),
- child: Text("Set Configuration"),
- ),
+ foregroundColor: Colors.black,
+ enableFeedback:
+ Provider.of(context)
+ .connected,
+ ),
+ child: Text("Set Configuration"),
+ ),
),
),
],
@@ -212,25 +193,14 @@ class _V1SensorConfigurationCardState extends State {
Function(String) changeSelection) {
return Row(
children: [
- Platform.isIOS
- ? CupertinoCheckbox(
- value: settingSelected,
- onChanged: Provider.of(context).connected
- ? changeBool
- : null,
- activeColor: settingSelected
- ? CupertinoTheme.of(context).primaryColor
- : CupertinoTheme.of(context).primaryContrastingColor,
- checkColor: CupertinoTheme.of(context).primaryContrastingColor,
- )
- : Checkbox(
- checkColor: Theme.of(context).colorScheme.primary,
- fillColor: MaterialStateProperty.resolveWith(_getCheckboxColor),
- value: settingSelected,
- onChanged: Provider.of(context).connected
- ? changeBool
- : null,
- ),
+ Checkbox(
+ checkColor: Theme.of(context).colorScheme.primary,
+ fillColor: MaterialStateProperty.resolveWith(_getCheckboxColor),
+ value: settingSelected,
+ onChanged: Provider.of(context).connected
+ ? changeBool
+ : null,
+ ),
Text(
sensorName,
style: TextStyle(
diff --git a/open_earable/lib/main.dart b/open_earable/lib/main.dart
index 32bf2a6..8004fe3 100644
--- a/open_earable/lib/main.dart
+++ b/open_earable/lib/main.dart
@@ -12,9 +12,8 @@ import 'sensor_data_tab/sensor_data_tab.dart';
import 'package:open_earable/ble/ble_connect_view.dart';
import 'package:open_earable/ble/ble_controller.dart';
import 'apps_tab/apps_tab.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:permission_handler/permission_handler.dart';
-import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
import 'package:app_settings/app_settings.dart';
import 'shared/global_theme.dart';
@@ -24,28 +23,11 @@ void main() => runApp(ChangeNotifierProvider(
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
- if (Platform.isIOS) {
- return CupertinoApp(
- locale: const Locale('en', 'US'),
- localizationsDelegates: [
- GlobalMaterialLocalizations.delegate,
- GlobalWidgetsLocalizations.delegate,
- GlobalCupertinoLocalizations.delegate,
- ],
- supportedLocales: [
- const Locale('en', 'US'),
- ],
- title: '🦻 OpenEarable',
- theme: cupertinoTheme,
- home: MyHomePage(),
- );
- } else {
- return MaterialApp(
- title: '🦻 OpenEarable',
- theme: materialTheme,
- home: MyHomePage(),
- );
- }
+ return MaterialApp(
+ title: '🦻 OpenEarable',
+ theme: materialTheme,
+ home: MyHomePage(),
+ );
}
}
@@ -56,15 +38,16 @@ class MyHomePage extends StatefulWidget {
class _MyHomePageState extends State {
int _selectedIndex = 0;
- final flutterReactiveBle = FlutterReactiveBle();
+ // final flutterReactiveBle = FlutterReactiveBle();
late bool alertOpen;
late List _widgetOptions;
StreamSubscription? blePermissionSubscription;
+
@override
void initState() {
super.initState();
alertOpen = false;
- _checkBLEPermission();
+ // _checkBLEPermission();
}
@override
@@ -87,97 +70,60 @@ class _MyHomePageState extends State {
blePermissionSubscription?.cancel();
}
- Future _checkBLEPermission() async {
- PermissionStatus status = await Permission.bluetoothConnect.request();
- await Permission.location.request();
- await Permission.bluetoothScan.request();
- if (status.isGranted) {
- print("BLE is working");
- }
- blePermissionSubscription =
- flutterReactiveBle.statusStream.listen((status) {
- if (status != BleStatus.ready &&
- status != BleStatus.unknown &&
- alertOpen == false) {
- alertOpen = true;
- _showBluetoothAlert(context);
- }
- });
- }
+ // Future _checkBLEPermission() async {
+ // PermissionStatus status = await Permission.bluetoothConnect.request();
+ // await Permission.location.request();
+ // await Permission.bluetoothScan.request();
+ // if (status.isGranted) {
+ // print("BLE is working");
+ // }
+ // blePermissionSubscription =
+ // flutterReactiveBle.statusStream.listen((status) {
+ // if (status != BleStatus.ready &&
+ // status != BleStatus.unknown &&
+ // alertOpen == false) {
+ // alertOpen = true;
+ // _showBluetoothAlert(context);
+ // }
+ // });
+ // }
- void _showBluetoothAlert(BuildContext context) {
- if (Platform.isIOS) {
- showCupertinoModalPopup(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) => CupertinoTheme(
- data: CupertinoThemeData(),
- child: CupertinoAlertDialog(
- title: const Text('Bluetooth disabled'),
- content: const Text(
- "Please make sure your device's bluetooth and location services are turned on and this app has been granted permission to use them in the app's settings.\nThis alert can only be closed if these requirements are fulfilled."),
- actions: [
- CupertinoDialogAction(
- isDefaultAction: false,
- onPressed: () {
- AppSettings.openAppSettings();
- },
- child: Text(
- 'Open App Settings',
- ),
- ),
- CupertinoDialogAction(
- isDefaultAction: true,
- onPressed: () {
- if (flutterReactiveBle.status == BleStatus.ready) {
- alertOpen = false;
- Navigator.of(context).pop();
- }
- },
- child: Text(
- 'OK',
- ),
- ),
- ],
- ),
- ));
- } else {
- showDialog(
- context: context,
- barrierDismissible: false,
- builder: (BuildContext context) {
- return AlertDialog(
- title: Text("Bluetooth disabled"),
- content: Text(
- "Please make sure your device's bluetooth and location services are turned on and this app has been granted permission to use them in the app's settings.\nThis alert can only be closed if these requirements are fulfilled."),
- actions: [
- TextButton(
- child: Text(
- 'Open App Settings',
- style: TextStyle(
- color: Theme.of(context).colorScheme.onBackground),
- ),
- onPressed: () {
- AppSettings.openAppSettings();
- },
- ),
- TextButton(
- child: Text('OK',
- style: TextStyle(
- color: Theme.of(context).colorScheme.onBackground)),
- onPressed: () {
- if (flutterReactiveBle.status == BleStatus.ready) {
- alertOpen = false;
- Navigator.of(context).pop();
- }
- },
- ),
- ],
- );
- },
- );
- }
- }
+ // void _showBluetoothAlert(BuildContext context) {
+ // showDialog(
+ // context: context,
+ // barrierDismissible: false,
+ // builder: (BuildContext context) {
+ // return AlertDialog(
+ // title: Text("Bluetooth disabled"),
+ // content: Text(
+ // "Please make sure your device's bluetooth and location services are turned on and this app has been granted permission to use them in the app's settings.\nThis alert can only be closed if these requirements are fulfilled."),
+ // actions: [
+ // TextButton(
+ // child: Text(
+ // 'Open App Settings',
+ // style: TextStyle(
+ // color: Theme.of(context).colorScheme.onBackground),
+ // ),
+ // onPressed: () {
+ // AppSettings.openAppSettings();
+ // },
+ // ),
+ // TextButton(
+ // child: Text('OK',
+ // style: TextStyle(
+ // color: Theme.of(context).colorScheme.onBackground)),
+ // onPressed: () {
+ // if (flutterReactiveBle.status == BleStatus.ready) {
+ // alertOpen = false;
+ // Navigator.of(context).pop();
+ // }
+ // },
+ // ),
+ // ],
+ // );
+ // },
+ // );
+ // }
void _onItemTapped(int index) {
setState(() {
@@ -187,157 +133,61 @@ class _MyHomePageState extends State {
@override
Widget build(BuildContext context) {
- if (Platform.isIOS) {
- return CupertinoTabScaffold(
- tabBar: CupertinoTabBar(
- backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor,
- items: [
- BottomNavigationBarItem(
- icon: Icon(CupertinoIcons.gear),
- label: 'Controls',
- ),
- BottomNavigationBarItem(
- icon: Icon(CupertinoIcons.heart),
- label: 'Sensor Data',
- ),
- BottomNavigationBarItem(
- icon: Icon(CupertinoIcons.square_grid_2x2),
- label: 'Apps',
+ return Scaffold(
+ backgroundColor: Theme.of(context).colorScheme.background,
+ appBar: AppBar(
+ title: Center(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ SizedBox(width: 50),
+ Image.asset(
+ 'assets/earable_logo.png',
+ width: 24,
+ height: 24,
),
+ SizedBox(width: 8),
+ Text('OpenEarable'),
],
- currentIndex: _selectedIndex,
- onTap: _onItemTapped,
- ),
- tabBuilder: (BuildContext context, int index) {
- return CupertinoPageScaffold(
- navigationBar: CupertinoNavigationBar(
- middle: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Image.asset(
- 'assets/earable_logo.png',
- width: 24,
- height: 24,
- ),
- SizedBox(width: 8),
- Text('OpenEarable'),
- ],
- ),
- trailing: CupertinoButton(
- padding: EdgeInsets.zero,
- child: Icon(
- CupertinoIcons.bluetooth,
- color: CupertinoTheme.of(context).primaryColor,
- ),
- onPressed: () {
- if (Provider.of(context, listen: false)
- .isV2) {
- Navigator.of(context).push(Platform.isIOS
- ? CupertinoPageRoute(
- builder: (context) => BLETabBarPage(
- index: OpenEarableSettingsV2()
- .selectedButtonIndex))
- : MaterialPageRoute(
- builder: (context) => BLETabBarPage(
- index: OpenEarableSettingsV2()
- .selectedButtonIndex)));
- } else {
- Navigator.of(context).push(Platform.isIOS
- ? CupertinoPageRoute(
- builder: (context) => CupertinoPageScaffold(
- backgroundColor: CupertinoTheme.of(context)
- .scaffoldBackgroundColor,
- navigationBar: CupertinoNavigationBar(
- middle: Text("Bluetooth Devices"),
- ),
- child: BLEPage(
- Provider.of(context,
- listen: false)
- .openEarableLeft,
- 0)))
- : MaterialPageRoute(
- builder: (context) => Scaffold(
- backgroundColor:
- Theme.of(context).colorScheme.background,
- appBar: AppBar(
- title: Text("Bluetooth Devices"),
- ),
- body: BLEPage(
- Provider.of(context,
- listen: false)
- .openEarableLeft,
- 0))));
- }
- },
- ),
- ),
- backgroundColor: CupertinoTheme.of(context).scaffoldBackgroundColor,
- child: _widgetOptions.elementAt(index),
- );
- },
- );
- } else {
- return Scaffold(
+ )),
+ actions: [
+ IconButton(
+ icon: Icon(Icons.bluetooth,
+ color: Theme.of(context).colorScheme.secondary),
+ onPressed: () {
+ Navigator.of(context).push(MaterialPageRoute(
+ builder: (context) => BLETabBarPage(
+ index: OpenEarableSettingsV2().selectedButtonIndex)));
+ },
+ ),
+ ],
+ ),
+ body: _widgetOptions.elementAt(_selectedIndex),
+ bottomNavigationBar: BottomNavigationBar(
backgroundColor: Theme.of(context).colorScheme.background,
- appBar: AppBar(
- title: Center(
- child: Row(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- SizedBox(width: 50),
- Image.asset(
- 'assets/earable_logo.png',
- width: 24,
- height: 24,
- ),
- SizedBox(width: 8),
- Text('OpenEarable'),
- ],
- )),
- actions: [
- IconButton(
- icon: Icon(Icons.bluetooth,
- color: Theme.of(context).colorScheme.secondary),
- onPressed: () {
- Navigator.of(context).push(Platform.isIOS
- ? CupertinoPageRoute(
- builder: (context) => BLETabBarPage(
- index: OpenEarableSettingsV2().selectedButtonIndex))
- : MaterialPageRoute(
- builder: (context) => BLETabBarPage(
- index:
- OpenEarableSettingsV2().selectedButtonIndex)));
- },
- ),
- ],
- ),
- body: _widgetOptions.elementAt(_selectedIndex),
- bottomNavigationBar: BottomNavigationBar(
- backgroundColor: Theme.of(context).colorScheme.background,
- items: const [
- BottomNavigationBarItem(
- icon: Padding(
- padding: EdgeInsets.only(bottom: 3.0),
- child: Icon(
- OpenEarableIcon.icon,
- size: 20.0,
- ),
+ items: const [
+ BottomNavigationBarItem(
+ icon: Padding(
+ padding: EdgeInsets.only(bottom: 3.0),
+ child: Icon(
+ OpenEarableIcon.icon,
+ size: 20.0,
),
- label: 'Controls',
- ),
- BottomNavigationBarItem(
- icon: Icon(Icons.monitor_heart_outlined),
- label: 'Sensor Data',
- ),
- BottomNavigationBarItem(
- icon: Icon(Icons.apps),
- label: 'Apps',
),
- ],
- currentIndex: _selectedIndex,
- onTap: _onItemTapped,
- ),
- );
- }
+ label: 'Controls',
+ ),
+ BottomNavigationBarItem(
+ icon: Icon(Icons.monitor_heart_outlined),
+ label: 'Sensor Data',
+ ),
+ BottomNavigationBarItem(
+ icon: Icon(Icons.apps),
+ label: 'Apps',
+ ),
+ ],
+ currentIndex: _selectedIndex,
+ onTap: _onItemTapped,
+ ),
+ );
}
}
diff --git a/open_earable/lib/sensor_data_tab/earable_3d_model.dart b/open_earable/lib/sensor_data_tab/earable_3d_model.dart
index b20986d..1903f77 100644
--- a/open_earable/lib/sensor_data_tab/earable_3d_model.dart
+++ b/open_earable/lib/sensor_data_tab/earable_3d_model.dart
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:model_viewer_plus/model_viewer_plus.dart';
import 'package:webview_flutter/webview_flutter.dart';
diff --git a/open_earable/lib/sensor_data_tab/sensor_chart.dart b/open_earable/lib/sensor_data_tab/sensor_chart.dart
index d7f6751..8e79c07 100644
--- a/open_earable/lib/sensor_data_tab/sensor_chart.dart
+++ b/open_earable/lib/sensor_data_tab/sensor_chart.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:open_earable/shared/earable_not_connected_warning.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:flutter/material.dart';
import 'package:community_charts_flutter/community_charts_flutter.dart' as charts;
import 'package:simple_kalman/simple_kalman.dart';
diff --git a/open_earable/lib/sensor_data_tab/sensor_data_tab.dart b/open_earable/lib/sensor_data_tab/sensor_data_tab.dart
index ea18419..1a423ab 100644
--- a/open_earable/lib/sensor_data_tab/sensor_data_tab.dart
+++ b/open_earable/lib/sensor_data_tab/sensor_data_tab.dart
@@ -3,7 +3,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:open_earable/ble/ble_controller.dart';
import 'package:open_earable/sensor_data_tab/earable_3d_model.dart';
-import 'package:open_earable_flutter/src/open_earable_flutter.dart';
+import 'package:open_earable_flutter/open_earable_flutter.dart';
import 'package:open_earable/sensor_data_tab/sensor_chart.dart';
import 'package:provider/provider.dart';
diff --git a/open_earable/lib/shared/dynamic_value_picker.dart b/open_earable/lib/shared/dynamic_value_picker.dart
index 67b191f..c1f7d8b 100644
--- a/open_earable/lib/shared/dynamic_value_picker.dart
+++ b/open_earable/lib/shared/dynamic_value_picker.dart
@@ -21,61 +21,36 @@ class DynamicValuePicker extends StatelessWidget {
@override
Widget build(BuildContext context) {
- if (Platform.isIOS) {
- return CupertinoButton(
- borderRadius: BorderRadius.all(Radius.circular(4.0)),
- disabledColor: Colors.grey[200]!,
- color: this.isFakeDisabled || !isConnected
- ? CupertinoColors.systemGrey
- : CupertinoColors.white,
- padding: EdgeInsets.fromLTRB(8, 0, 0, 0),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Text(
- currentValue,
- style: TextStyle(
- color: this.isFakeDisabled || !isConnected
- ? Colors.grey[700]
- : Colors.black,
- ),
+ return DropdownButton(
+ dropdownColor: Colors.white,
+ alignment: Alignment.centerRight,
+ value: currentValue,
+ onChanged: isConnected
+ ? (String? newValue) {
+ onValueChange(newValue!);
+ }
+ : null,
+ items: options.map((String value) {
+ return DropdownMenuItem(
+ alignment: Alignment.centerRight,
+ value: value,
+ child: Text(
+ value,
+ style: TextStyle(
+ color: this.isFakeDisabled || !isConnected
+ ? Colors.grey[700]
+ : Colors.black,
),
- ],
- ),
- onPressed: () => isConnected ? _showCupertinoPicker() : null,
- );
- } else {
- return DropdownButton(
- dropdownColor: Colors.white,
- alignment: Alignment.centerRight,
- value: currentValue,
- onChanged: isConnected
- ? (String? newValue) {
- onValueChange(newValue!);
- }
- : null,
- items: options.map((String value) {
- return DropdownMenuItem(
- alignment: Alignment.centerRight,
- value: value,
- child: Text(
- value,
- style: TextStyle(
- color: this.isFakeDisabled || !isConnected
- ? Colors.grey[700]
- : Colors.black,
- ),
- textAlign: TextAlign.end,
- ),
- );
- }).toList(),
- underline: Container(),
- icon: Icon(
- Icons.arrow_drop_down,
- color: isConnected ? Colors.black : Colors.grey[700],
- ),
- );
- }
+ textAlign: TextAlign.end,
+ ),
+ );
+ }).toList(),
+ underline: Container(),
+ icon: Icon(
+ Icons.arrow_drop_down,
+ color: isConnected ? Colors.black : Colors.grey[700],
+ ),
+ );
}
void _showCupertinoPicker() {
@@ -90,7 +65,8 @@ class DynamicValuePicker extends StatelessWidget {
child: CupertinoPicker(
scrollController: scrollController,
backgroundColor: isConnected ? Colors.white : Colors.grey[200],
- itemExtent: 32, // Height of each item
+ itemExtent: 32,
+ // Height of each item
onSelectedItemChanged: (int index) {
String newValue = options[index];
onValueChange(newValue);
diff --git a/open_earable/macos/Runner/DebugProfile.entitlements b/open_earable/macos/Runner/DebugProfile.entitlements
index dddb8a3..14a39b7 100644
--- a/open_earable/macos/Runner/DebugProfile.entitlements
+++ b/open_earable/macos/Runner/DebugProfile.entitlements
@@ -6,6 +6,8 @@
com.apple.security.cs.allow-jit
+ com.apple.security.device.bluetooth
+
com.apple.security.network.server
diff --git a/open_earable/macos/Runner/Info.plist b/open_earable/macos/Runner/Info.plist
index 4789daa..1349ea7 100644
--- a/open_earable/macos/Runner/Info.plist
+++ b/open_earable/macos/Runner/Info.plist
@@ -28,5 +28,9 @@
MainMenu
NSPrincipalClass
NSApplication
+ NSBluetoothAlwaysUsageDescription
+ Needs access to Bluetooth to connect to devices.
+ NSBluetoothPeripheralUsageDescription
+ Needs access to Bluetooth to communicate with peripherals.
diff --git a/open_earable/macos/Runner/Release.entitlements b/open_earable/macos/Runner/Release.entitlements
index 852fa1a..c269f52 100644
--- a/open_earable/macos/Runner/Release.entitlements
+++ b/open_earable/macos/Runner/Release.entitlements
@@ -4,5 +4,7 @@
com.apple.security.app-sandbox
+ com.apple.security.device.bluetooth
+
diff --git a/open_earable/pubspec.lock b/open_earable/pubspec.lock
index 27b9ff8..3d2d4e9 100644
--- a/open_earable/pubspec.lock
+++ b/open_earable/pubspec.lock
@@ -49,6 +49,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.11.0"
+ bluez:
+ dependency: transitive
+ description:
+ name: bluez
+ sha256: "203a1924e818a9dd74af2b2c7a8f375ab8e5edf0e486bba8f90a0d8a17ed9fce"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.8.2"
boolean_selector:
dependency: transitive
description:
@@ -153,6 +161,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
+ dbus:
+ dependency: transitive
+ description:
+ name: dbus
+ sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.10"
english_words:
dependency: "direct main"
description:
@@ -185,14 +201,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.0.0"
- fixnum:
- dependency: transitive
- description:
- name: fixnum
- sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
- url: "https://pub.dev"
- source: hosted
- version: "1.1.0"
flutter:
dependency: "direct main"
description: flutter
@@ -218,10 +226,10 @@ packages:
dependency: transitive
description:
name: flutter_inappwebview_android
- sha256: d247f6ed417f1f8c364612fa05a2ecba7f775c8d0c044c1d3b9ee33a6515c421
+ sha256: "62557c15a5c2db5d195cb3892aab74fcaec266d7b86d59a6f0027abd672cddba"
url: "https://pub.dev"
source: hosted
- version: "1.0.13"
+ version: "1.1.3"
flutter_inappwebview_internal_annotations:
dependency: transitive
description:
@@ -235,27 +243,27 @@ packages:
description:
path: flutter_inappwebview_ios
ref: master
- resolved-ref: c3553312a65780c402b95960d70c190367385652
+ resolved-ref: "683d1cace2fe0ca4284b1e940a13f56008e75c3d"
url: "https://github.com/pichillilorenzo/flutter_inappwebview"
source: git
- version: "1.0.14"
+ version: "1.1.2"
flutter_inappwebview_macos:
dependency: "direct overridden"
description:
path: flutter_inappwebview_macos
ref: master
- resolved-ref: c3553312a65780c402b95960d70c190367385652
+ resolved-ref: "683d1cace2fe0ca4284b1e940a13f56008e75c3d"
url: "https://github.com/pichillilorenzo/flutter_inappwebview"
source: git
- version: "1.0.12"
+ version: "1.1.2"
flutter_inappwebview_platform_interface:
dependency: transitive
description:
name: flutter_inappwebview_platform_interface
- sha256: "545fd4c25a07d2775f7d5af05a979b2cac4fbf79393b0a7f5d33ba39ba4f6187"
+ sha256: cf5323e194096b6ede7a1ca808c3e0a078e4b33cc3f6338977d75b4024ba2500
url: "https://pub.dev"
source: hosted
- version: "1.0.10"
+ version: "1.3.0+1"
flutter_inappwebview_web:
dependency: transitive
description:
@@ -285,32 +293,24 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.4.1"
- flutter_reactive_ble:
- dependency: "direct main"
- description:
- name: flutter_reactive_ble
- sha256: "247e2efa76de203d1ba11335c13754b5b9d0504b5423e5b0c93a600f016b24e0"
- url: "https://pub.dev"
- source: hosted
- version: "5.3.1"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
+ flutter_web_bluetooth:
+ dependency: transitive
+ description:
+ name: flutter_web_bluetooth
+ sha256: "52ce64f65d7321c4bf6abfe9dac02fb888731339a5e0ad6de59fb916c20c9f02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.2.3"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
- functional_data:
- dependency: transitive
- description:
- name: functional_data
- sha256: "76d17dc707c40e552014f5a49c0afcc3f1e3f05e800cd6b7872940bfe41a5039"
- url: "https://pub.dev"
- source: hosted
- version: "1.2.0"
html:
dependency: transitive
description:
@@ -375,6 +375,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.1"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
matcher:
dependency: transitive
description:
@@ -419,8 +427,8 @@ packages:
dependency: "direct main"
description:
path: "."
- ref: HEAD
- resolved-ref: e4c390516cfc753c18215d56591c2cfbc5b4296a
+ ref: web_compatibility
+ resolved-ref: "3a11438c399d98837c677d830356ca02724b68f8"
url: "https://github.com/OpenEarable/open_earable_flutter.git"
source: git
version: "0.0.2"
@@ -428,10 +436,66 @@ packages:
dependency: "direct main"
description:
name: open_file
- sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20
+ sha256: a5ef7162fb9b72955d42abab9f3159b2fd3ee81a27187535c8038dcd5d1fa7f2
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.5.4"
+ open_file_android:
+ dependency: transitive
+ description:
+ name: open_file_android
+ sha256: c29d96112e5092e4871e292b73f71ecf35f262364b11553852a16f36475fe5e0
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.5"
+ open_file_ios:
+ dependency: transitive
+ description:
+ name: open_file_ios
+ sha256: "8d9c03495cf14ca70bdbf191894b822ba3b2629cc0046ee311cbbe504db66c44"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ open_file_linux:
+ dependency: transitive
+ description:
+ name: open_file_linux
+ sha256: cd2088722048b9c40f8615c6d83005fe0726e0e447e9cdfb40c2b65477291f7d
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.4"
+ open_file_mac:
+ dependency: transitive
+ description:
+ name: open_file_mac
+ sha256: "9d809f528cccc6dc9390caf50893eae9a6944e0f3b8a2558c7ad19e91c9244a1"
url: "https://pub.dev"
source: hosted
- version: "3.3.2"
+ version: "1.0.1"
+ open_file_platform_interface:
+ dependency: transitive
+ description:
+ name: open_file_platform_interface
+ sha256: "14c50efb1a9667cb96e4fa68d601e6ad348fe337b02789834029b37ae3631498"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ open_file_web:
+ dependency: transitive
+ description:
+ name: open_file_web
+ sha256: ba35c6f38c21c2bb4268a80927bb828353dda0edfce92e274e0b9639e4f31360
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.2"
+ open_file_windows:
+ dependency: transitive
+ description:
+ name: open_file_windows
+ sha256: "2f4318d2d3958ec8d63b6dd4430c15b1fcb2fe7a2113e83c734584501a5c6d81"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.0.2"
path:
dependency: transitive
description:
@@ -452,10 +516,10 @@ packages:
dependency: transitive
description:
name: path_provider_android
- sha256: "6f01f8e37ec30b07bc424b4deabac37cacb1bc7e2e515ad74486039918a37eb7"
+ sha256: f7544c346a0742aee1450f9e5c0f5269d7c602b9c95fdbcd9fb8f5b1df13b1cc
url: "https://pub.dev"
source: hosted
- version: "2.2.10"
+ version: "2.2.11"
path_provider_foundation:
dependency: transitive
description:
@@ -516,18 +580,18 @@ packages:
dependency: transitive
description:
name: permission_handler_html
- sha256: d220eb8476b466d58b161e10b3001d93999010a26228a3fb89c4280db1249546
+ sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851
url: "https://pub.dev"
source: hosted
- version: "0.1.3+1"
+ version: "0.1.3+2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
- sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea
+ sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
url: "https://pub.dev"
source: hosted
- version: "4.2.2"
+ version: "4.2.3"
permission_handler_windows:
dependency: transitive
description:
@@ -560,14 +624,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.8"
- protobuf:
- dependency: transitive
- description:
- name: protobuf
- sha256: "01dd9bd0fa02548bf2ceee13545d4a0ec6046459d847b6b061d8a27237108a08"
- url: "https://pub.dev"
- source: hosted
- version: "2.1.0"
provider:
dependency: "direct main"
description:
@@ -576,22 +632,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "6.1.2"
- reactive_ble_mobile:
- dependency: transitive
- description:
- name: reactive_ble_mobile
- sha256: "9ec2b4c9c725e439950838d551579750060258fbccd5536d0543b4d07d225798"
- url: "https://pub.dev"
- source: hosted
- version: "5.3.1"
- reactive_ble_platform_interface:
- dependency: transitive
- description:
- name: reactive_ble_platform_interface
- sha256: "632c92401a2d69c9b94bd48f8fd47488a7013f3d1f9b291884350291a4a81813"
- url: "https://pub.dev"
- source: hosted
- version: "5.3.1"
shared_preferences:
dependency: "direct main"
description:
@@ -604,18 +644,18 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
- sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
+ sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab"
url: "https://pub.dev"
source: hosted
- version: "2.3.1"
+ version: "2.3.3"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
- sha256: c4b35f6cb8f63c147312c054ce7c2254c8066745125264f0c88739c417fc9d9f
+ sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d"
url: "https://pub.dev"
source: hosted
- version: "2.5.2"
+ version: "2.5.3"
shared_preferences_linux:
dependency: transitive
description:
@@ -717,6 +757,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.2"
+ universal_ble:
+ dependency: transitive
+ description:
+ name: universal_ble
+ sha256: "0dfbd6b64bff3ad61ed7a895c232530d9614e9b01ab261a74433a43267edb7f3"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.0"
universal_io:
dependency: transitive
description:
@@ -737,10 +785,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
- sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
+ sha256: "8fc3bae0b68c02c47c5c86fa8bfa74471d42687b0eded01b78de87872db745e2"
url: "https://pub.dev"
source: hosted
- version: "6.3.9"
+ version: "6.3.12"
url_launcher_ios:
dependency: transitive
description:
@@ -761,10 +809,10 @@ packages:
dependency: transitive
description:
name: url_launcher_macos
- sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
+ sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
url: "https://pub.dev"
source: hosted
- version: "3.2.0"
+ version: "3.2.1"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -817,18 +865,18 @@ packages:
dependency: transitive
description:
name: webview_flutter
- sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522"
+ sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736
url: "https://pub.dev"
source: hosted
- version: "4.8.0"
+ version: "4.9.0"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
- sha256: c66651fba15f9d7ddd31daec42da8d6bce46c85610a7127e3ebcb39a4395c3c9
+ sha256: "47a8da40d02befda5b151a26dba71f47df471cddd91dfdb7802d0a87c5442558"
url: "https://pub.dev"
source: hosted
- version: "3.16.6"
+ version: "3.16.9"
webview_flutter_platform_interface:
dependency: transitive
description:
@@ -841,18 +889,18 @@ packages:
dependency: transitive
description:
name: webview_flutter_wkwebview
- sha256: "9c62cc46fa4f2d41e10ab81014c1de470a6c6f26051a2de32111b2ee55287feb"
+ sha256: "1942a12224ab31e9508cf00c0c6347b931b023b8a4f0811e5dec3b06f94f117d"
url: "https://pub.dev"
source: hosted
- version: "3.14.0"
+ version: "3.15.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
- sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
+ sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
url: "https://pub.dev"
source: hosted
- version: "1.0.4"
+ version: "1.1.0"
xml:
dependency: transitive
description:
@@ -873,10 +921,10 @@ packages:
dependency: "direct main"
description:
name: youtube_player_flutter
- sha256: b670314008a9abd051f01f82df754d76fd1366340f03f4f8ff86fc3d6b03080c
+ sha256: "6de924ac24d7d9d0723fc47d2bbc71d656f089aba9b7f26d4e6855b5ea3bf3fe"
url: "https://pub.dev"
source: hosted
- version: "9.0.3"
+ version: "9.0.0"
sdks:
- dart: ">=3.4.0 <4.0.0"
- flutter: ">=3.22.0"
+ dart: ">=3.5.0 <4.0.0"
+ flutter: ">=3.24.0"
diff --git a/open_earable/pubspec.yaml b/open_earable/pubspec.yaml
index 6f290dc..aeeb8f1 100644
--- a/open_earable/pubspec.yaml
+++ b/open_earable/pubspec.yaml
@@ -35,9 +35,9 @@ dependencies:
open_earable_flutter:
git:
url: https://github.com/OpenEarable/open_earable_flutter.git
- youtube_player_flutter: ^9.0.3
+ ref: web_compatibility
+ youtube_player_flutter: 9.0.0
permission_handler: ^11.3.1
- flutter_reactive_ble: ^5.3.1
app_settings: ^5.1.1
# The following adds the Cupertino Icons font to your application.
@@ -101,7 +101,7 @@ flutter_native_splash:
# IMPORTANT NOTE: These parameter do not affect the configuration of Android 12 and later, which
# handle splash screens differently that prior versions of Android. Android 12 and later must be
# configured specifically in the android_12 section below.
-
+
# color or background_image is the only required parameter. Use color to set the background
# of your splash screen to a solid color. Use background_image to set the background of your
# splash screen to a png image. This is useful for gradients. The image will be stretch to the
diff --git a/open_earable/web/index.html b/open_earable/web/index.html
index 4458f60..0ec58c8 100644
--- a/open_earable/web/index.html
+++ b/open_earable/web/index.html
@@ -35,6 +35,7 @@
var serviceWorkerVersion = null;
+
@@ -56,6 +57,5 @@
});
});
-
-
-