diff --git a/experimental/veggieseasons/lib/data/preferences.dart b/experimental/veggieseasons/lib/data/preferences.dart index 01c345a8584..71baf69335c 100644 --- a/experimental/veggieseasons/lib/data/preferences.dart +++ b/experimental/veggieseasons/lib/data/preferences.dart @@ -50,6 +50,12 @@ class Preferences extends ChangeNotifier { notifyListeners(); } + Future restoreDefaults() async { + final prefs = await SharedPreferences.getInstance(); + await prefs.clear(); + load(); + } + void load() { _loading = _loadFromSharedPrefs(); } diff --git a/experimental/veggieseasons/lib/screens/settings.dart b/experimental/veggieseasons/lib/screens/settings.dart index 6accd80d6a9..b26b1ea5b51 100644 --- a/experimental/veggieseasons/lib/screens/settings.dart +++ b/experimental/veggieseasons/lib/screens/settings.dart @@ -23,7 +23,8 @@ class VeggieCategorySettingsScreen extends StatelessWidget { static Route _routeBuilder(BuildContext context, Object argument) { return CupertinoPageRoute( - builder: (context) => VeggieCategorySettingsScreen(restorationId: 'category'), + builder: (context) => + VeggieCategorySettingsScreen(restorationId: 'category'), title: 'Preferred Categories', ); } @@ -136,9 +137,10 @@ class CalorieSettingsScreen extends StatelessWidget { label: cals.toString(), icon: SettingsIcon( icon: Styles.checkIcon, - foregroundColor: snapshot.hasData && snapshot.data == cals - ? CupertinoColors.activeBlue - : Styles.transparentColor, + foregroundColor: + snapshot.hasData && snapshot.data == cals + ? CupertinoColors.activeBlue + : Styles.transparentColor, backgroundColor: Styles.transparentColor, ), onPress: snapshot.hasData @@ -211,6 +213,44 @@ class SettingsScreen extends StatelessWidget { ); } + SettingsItem _buildRestoreDefaultsItem( + BuildContext context, Preferences prefs) { + return SettingsItem( + label: 'Restore Defaults', + icon: SettingsIcon( + backgroundColor: CupertinoColors.systemRed, + icon: Styles.resetIcon, + ), + content: SettingsNavigationIndicator(), + onPress: () { + showCupertinoDialog( + context: context, + builder: (context) => CupertinoAlertDialog( + title: Text('Are you sure?'), + content: Text( + 'Are you sure you want to reset the current settings?', + ), + actions: [ + CupertinoDialogAction( + isDestructiveAction: true, + child: Text('Yes'), + onPressed: () async { + await prefs.restoreDefaults(); + Navigator.pop(context); + }, + ), + CupertinoDialogAction( + isDefaultAction: true, + child: Text('No'), + onPressed: () => Navigator.pop(context), + ) + ], + ), + ); + }, + ); + } + @override Widget build(BuildContext context) { final prefs = Provider.of(context); @@ -219,7 +259,8 @@ class SettingsScreen extends StatelessWidget { restorationId: restorationId, child: CupertinoPageScaffold( child: Container( - color: Styles.scaffoldBackground(CupertinoTheme.brightnessOf(context)), + color: + Styles.scaffoldBackground(CupertinoTheme.brightnessOf(context)), child: CustomScrollView( restorationId: 'list', slivers: [ @@ -235,6 +276,7 @@ class SettingsScreen extends StatelessWidget { items: [ _buildCaloriesItem(context, prefs), _buildCategoriesItem(context, prefs), + _buildRestoreDefaultsItem(context, prefs), ], ), ], diff --git a/experimental/veggieseasons/lib/styles.dart b/experimental/veggieseasons/lib/styles.dart index 3516ed60394..850d940074a 100644 --- a/experimental/veggieseasons/lib/styles.dart +++ b/experimental/veggieseasons/lib/styles.dart @@ -206,7 +206,7 @@ abstract class Styles { : CupertinoColors.darkBackgroundGray; static Color settingsLineation(Brightness brightness) => - brightness == Brightness.light ? Color(0xffbcbbc1) : Color(0xFF4C4B4B); + brightness == Brightness.light ? Color(0xffbcbbc1) : Color(0xff4c4b4b); static const Color settingsBackground = Color(0xffefeff4); @@ -222,6 +222,12 @@ abstract class Styles { fontPackage: CupertinoIcons.iconFontPackage, ); + static const resetIcon = IconData( + 0xf4c4, + fontFamily: CupertinoIcons.iconFont, + fontPackage: CupertinoIcons.iconFontPackage, + ); + static const calorieIcon = IconData( 0xf3bb, fontFamily: CupertinoIcons.iconFont, @@ -238,5 +244,5 @@ abstract class Styles { static const ColorFilter desaturatedColorFilter = // 222222 is a random color that has low color saturation. - ColorFilter.mode(Color(0xFF222222), BlendMode.saturation); + ColorFilter.mode(Color(0xff222222), BlendMode.saturation); }