diff --git a/lib/domain/preferences.dart b/lib/domain/preferences.dart index d1218993..154e59a0 100644 --- a/lib/domain/preferences.dart +++ b/lib/domain/preferences.dart @@ -1,5 +1,16 @@ -import 'package:hooks_riverpod/all.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shared_preferences/shared_preferences.dart'; final sharedPreferencesProvider = Provider((ref) => SharedPreferences.getInstance()); + +/// Is set to bool after user has connected to their first watch. +/// ```dart +/// const futurePrefs = useProvider(sharedPreferencesProvider) +/// futurePrefs.then((prefs) { +/// // returns true if user has ever successfully connected to a watch, +/// // false otherwise +/// prefs.containsKey(hasBeenConnected) +/// }); +/// ``` +final hasBeenConnected = 'hasBeenConnected'; diff --git a/lib/ui/setup/boot/rebble_setup_fail.dart b/lib/ui/setup/boot/rebble_setup_fail.dart index 0ff88623..6803f9eb 100644 --- a/lib/ui/setup/boot/rebble_setup_fail.dart +++ b/lib/ui/setup/boot/rebble_setup_fail.dart @@ -22,14 +22,11 @@ class RebbleSetupFail extends StatelessWidget implements CobbleScreen { ), floatingActionButton: FloatingActionButton.extended( onPressed: () { - SharedPreferences.getInstance() - .then((value) => { - value.setBool("firstRun", false), - value.setBool("bootSetup", false) - }) - .then( - (value) => context.pushAndRemoveAllBelow(HomePage()), - ); + SharedPreferences.getInstance().then((prefs) { + prefs.setBool("bootSetup", false); + }).then((_) { + context.pushAndRemoveAllBelow(HomePage()); + }); }, label: Text("OKAY")), ); diff --git a/lib/ui/setup/boot/rebble_setup_success.dart b/lib/ui/setup/boot/rebble_setup_success.dart index 9202eee6..5714c1aa 100644 --- a/lib/ui/setup/boot/rebble_setup_success.dart +++ b/lib/ui/setup/boot/rebble_setup_success.dart @@ -1,3 +1,4 @@ +import 'package:cobble/domain/preferences.dart'; import 'package:cobble/infrastructure/datasources/web_services.dart'; import 'package:cobble/localization/localization.dart'; import 'package:cobble/ui/home/home_page.dart'; @@ -39,12 +40,12 @@ class _RebbleSetupSuccessState extends State { ), floatingActionButton: FloatingActionButton.extended( onPressed: () { - SharedPreferences.getInstance() - .then((value) => { - value.setBool("firstRun", false), - value.setBool("bootSetup", true) - }) - .then((value) => context.pushAndRemoveAllBelow(HomePage())); + SharedPreferences.getInstance().then((prefs) { + prefs.setBool(hasBeenConnected, true); + prefs.setBool("bootSetup", true); + }).then((_) { + context.pushAndRemoveAllBelow(HomePage()); + }); }, label: Text(tr.setup.success.fab)), ); diff --git a/lib/ui/setup/pair_page.dart b/lib/ui/setup/pair_page.dart index 04b0b9ae..697adf0b 100644 --- a/lib/ui/setup/pair_page.dart +++ b/lib/ui/setup/pair_page.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:cobble/domain/connection/pair_provider.dart'; import 'package:cobble/domain/connection/scan_provider.dart'; import 'package:cobble/domain/entities/pebble_scan_device.dart'; +import 'package:cobble/domain/preferences.dart'; import 'package:cobble/infrastructure/datasources/paired_storage.dart'; import 'package:cobble/infrastructure/pigeons/pigeons.g.dart'; import 'package:cobble/localization/localization.dart'; @@ -52,6 +53,7 @@ class PairPage extends HookWidget implements CobbleScreen { final pairedStorage = useProvider(pairedStorageProvider); final scan = useProvider(scanProvider.state); final pair = useProvider(pairProvider).data?.value; + final prefs = useProvider(sharedPreferencesProvider); useEffect(() { if (pair == null || scan.devices.isEmpty) return null; @@ -98,6 +100,7 @@ class PairPage extends HookWidget implements CobbleScreen { NumberWrapper addressWrapper = NumberWrapper(); addressWrapper.value = dev.address; uiConnectionControl.connectToWatch(addressWrapper); + prefs.then((pref) => pref.setBool(hasBeenConnected, true)); }; final title = tr.pairPage.title; diff --git a/lib/ui/splash/splash_page.dart b/lib/ui/splash/splash_page.dart index b34bf0b3..7efbe4f9 100644 --- a/lib/ui/splash/splash_page.dart +++ b/lib/ui/splash/splash_page.dart @@ -1,3 +1,4 @@ +import 'package:cobble/domain/preferences.dart'; import 'package:cobble/localization/localization.dart'; import 'package:cobble/main.dart'; import 'package:cobble/ui/common/components/cobble_button.dart'; @@ -17,7 +18,7 @@ class SplashPage extends StatefulWidget { class _SplashPageState extends State { void _openHome() { SharedPreferences.getInstance().then((prefs) { - if (!prefs.containsKey("firstRun")) { + if (!prefs.containsKey(hasBeenConnected)) { context.pushReplacement(FirstRunPage()); } else { context.pushReplacement(HomePage());