mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
allow the users to hide / show all widgets in the home screen
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
@@ -29,13 +30,23 @@ class UserProvider with ChangeNotifier {
|
||||
ThemeMode themeMode = ThemeMode.system;
|
||||
final WgerBaseProvider baseProvider;
|
||||
late SharedPreferencesAsync prefs;
|
||||
bool hideNutrition = false;
|
||||
// bool hideNutrition = false;
|
||||
|
||||
// New: visibility state for dashboard widgets
|
||||
Map<String, bool> dashboardWidgetVisibility = {
|
||||
'routines': true,
|
||||
'weight': true,
|
||||
'measurements': true,
|
||||
'calendar': true,
|
||||
'nutrition': true,
|
||||
};
|
||||
|
||||
static const String PREFS_DASHBOARD_VISIBILITY = 'dashboardWidgetVisibility';
|
||||
|
||||
UserProvider(this.baseProvider, {SharedPreferencesAsync? prefs}) {
|
||||
this.prefs = prefs ?? PreferenceHelper.asyncPref;
|
||||
_loadThemeMode();
|
||||
_loadHideNutrition();
|
||||
|
||||
_loadDashboardVisibility();
|
||||
}
|
||||
|
||||
static const PROFILE_URL = 'userprofile';
|
||||
@@ -69,13 +80,34 @@ class UserProvider with ChangeNotifier {
|
||||
|
||||
notifyListeners();
|
||||
}
|
||||
Future<void> _loadDashboardVisibility() async {
|
||||
final jsonString = await prefs.getString(PREFS_DASHBOARD_VISIBILITY);
|
||||
|
||||
if (jsonString != null) {
|
||||
try {
|
||||
final decoded = jsonDecode(jsonString) as Map<String, dynamic>;
|
||||
dashboardWidgetVisibility =
|
||||
decoded.map((k, v) => MapEntry(k, v as bool));
|
||||
} catch (_) {
|
||||
// If parsing fails, keep defaults
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _loadHideNutrition() async {
|
||||
final val = await prefs.getBool('hideNutrition');
|
||||
hideNutrition = val ?? false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
bool isDashboardWidgetVisible(String key) {
|
||||
return dashboardWidgetVisibility[key] ?? true;
|
||||
}
|
||||
|
||||
Future<void> setDashboardWidgetVisible(String key, bool visible) async {
|
||||
dashboardWidgetVisibility[key] = visible;
|
||||
await prefs.setString(
|
||||
PREFS_DASHBOARD_VISIBILITY,
|
||||
jsonEncode(dashboardWidgetVisibility),
|
||||
);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// Change mode on switch button click
|
||||
void setThemeMode(ThemeMode mode) async {
|
||||
@@ -91,12 +123,6 @@ class UserProvider with ChangeNotifier {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void setHideNutrition(bool value) async {
|
||||
hideNutrition = value;
|
||||
await prefs.setBool('hideNutrition', value);
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Fetch the current user's profile
|
||||
Future<void> fetchAndSetProfile() async {
|
||||
final userData = await baseProvider.fetch(baseProvider.makeUrl(PROFILE_URL));
|
||||
|
||||
@@ -42,11 +42,16 @@ class DashboardScreen extends StatelessWidget {
|
||||
padding: const EdgeInsets.all(10),
|
||||
child: Column(
|
||||
children: [
|
||||
DashboardRoutineWidget(),
|
||||
DashboardWeightWidget(),
|
||||
DashboardMeasurementWidget(),
|
||||
DashboardCalendarWidget(),
|
||||
if (!user.hideNutrition) DashboardNutritionWidget(),
|
||||
if (user.isDashboardWidgetVisible('routines'))
|
||||
const DashboardRoutineWidget(),
|
||||
if (user.isDashboardWidgetVisible('weight'))
|
||||
const DashboardWeightWidget(),
|
||||
if (user.isDashboardWidgetVisible('measurements'))
|
||||
const DashboardMeasurementWidget(),
|
||||
if (user.isDashboardWidgetVisible('calendar'))
|
||||
const DashboardCalendarWidget(),
|
||||
if (user.isDashboardWidgetVisible('nutrition'))
|
||||
const DashboardNutritionWidget(),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -49,13 +49,39 @@ class SettingsPage extends StatelessWidget {
|
||||
const SettingsTheme(),
|
||||
Consumer<UserProvider>(
|
||||
builder: (context, user, _) {
|
||||
return SwitchListTile(
|
||||
title: const Text('Show nutrition section on dashboard'),
|
||||
value: !user.hideNutrition,
|
||||
onChanged: (v) {
|
||||
Provider.of<UserProvider>(context, listen: false)
|
||||
.setHideNutrition(!v);
|
||||
},
|
||||
return Column(
|
||||
children: [
|
||||
SwitchListTile(
|
||||
title: const Text('Show routines on dashboard'),
|
||||
value: user.isDashboardWidgetVisible('routines'),
|
||||
onChanged: (v) =>
|
||||
user.setDashboardWidgetVisible('routines', v),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: const Text('Show weight on dashboard'),
|
||||
value: user.isDashboardWidgetVisible('weight'),
|
||||
onChanged: (v) =>
|
||||
user.setDashboardWidgetVisible('weight', v),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: const Text('Show measurements on dashboard'),
|
||||
value: user.isDashboardWidgetVisible('measurements'),
|
||||
onChanged: (v) =>
|
||||
user.setDashboardWidgetVisible('measurements', v),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: const Text('Show calendar on dashboard'),
|
||||
value: user.isDashboardWidgetVisible('calendar'),
|
||||
onChanged: (v) =>
|
||||
user.setDashboardWidgetVisible('calendar', v),
|
||||
),
|
||||
SwitchListTile(
|
||||
title: const Text('Show nutrition on dashboard'),
|
||||
value: user.isDashboardWidgetVisible('nutrition'),
|
||||
onChanged: (v) =>
|
||||
user.setDashboardWidgetVisible('nutrition', v),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user