diff --git a/lib/providers/body_weight.dart b/lib/providers/body_weight.dart index 82b0ad4d4..46248d4fc 100644 --- a/lib/providers/body_weight.dart +++ b/lib/providers/body_weight.dart @@ -38,6 +38,8 @@ class BodyWeightProvider with ChangeNotifier { _entries = entries; } + bool wightDataInit = false; + /// Clears all lists void clear() { _entries = []; diff --git a/lib/providers/measurement.dart b/lib/providers/measurement.dart index 7f2c4ee32..2fc0fb52f 100644 --- a/lib/providers/measurement.dart +++ b/lib/providers/measurement.dart @@ -40,6 +40,8 @@ class MeasurementProvider with ChangeNotifier { _categories = []; } + bool measurementDataInit = false; + /// Finds the category by ID MeasurementCategory findCategoryById(int id) { return _categories.firstWhere( diff --git a/lib/providers/nutrition.dart b/lib/providers/nutrition.dart index 789008a30..4e726b59b 100644 --- a/lib/providers/nutrition.dart +++ b/lib/providers/nutrition.dart @@ -52,6 +52,8 @@ class NutritionPlansProvider with ChangeNotifier { return [..._plans]; } + bool nutritionDataInit = false; + set ingredients(items) { _ingredients = items; } diff --git a/lib/providers/workout_plans.dart b/lib/providers/workout_plans.dart index c5d2406aa..ba496c959 100644 --- a/lib/providers/workout_plans.dart +++ b/lib/providers/workout_plans.dart @@ -158,6 +158,8 @@ class WorkoutPlansProvider with ChangeNotifier { notifyListeners(); } + bool workoutPlansDatainit = false; + /// Fetches a workout plan sparsely, i.e. only with the data on the plan /// object itself and no child attributes Future<WorkoutPlan> fetchAndSetPlanSparse(int planId) async { diff --git a/lib/screens/home_tabs_screen.dart b/lib/screens/home_tabs_screen.dart index f74bc54ea..f1d00f316 100644 --- a/lib/screens/home_tabs_screen.dart +++ b/lib/screens/home_tabs_screen.dart @@ -74,23 +74,23 @@ class _HomeTabsScreenState extends State<HomeTabsScreen> with SingleTickerProvid final authProvider = context.read<AuthProvider>(); if (!authProvider.dataInit) { - final workoutPlansProvider = context.read<WorkoutPlansProvider>(); - final nutritionPlansProvider = context.read<NutritionPlansProvider>(); - final exercisesProvider = context.read<ExercisesProvider>(); - final galleryProvider = context.read<GalleryProvider>(); - final weightProvider = context.read<BodyWeightProvider>(); - final measurementProvider = context.read<MeasurementProvider>(); - final userProvider = context.read<UserProvider>(); + // final workoutPlansProvider = context.read<WorkoutPlansProvider>(); + // final nutritionPlansProvider = context.read<NutritionPlansProvider>(); + // final exercisesProvider = context.read<ExercisesProvider>(); + // final galleryProvider = context.read<GalleryProvider>(); + + // final userProvider = context.read<UserProvider>(); // Base data log('Loading base data'); try { await Future.wait([ authProvider.setServerVersion(), - userProvider.fetchAndSetProfile(), - workoutPlansProvider.fetchAndSetUnits(), - nutritionPlansProvider.fetchIngredientsFromCache(), - exercisesProvider.fetchAndSetExercises(), + context.read<UserProvider>().fetchAndSetProfile(), + context.read<WorkoutPlansProvider>().fetchAndSetUnits(), + context.read<NutritionPlansProvider>().fetchIngredientsFromCache(), + context.read<ExercisesProvider>().fetchAndSetExercises(), + context.read<GalleryProvider>().fetchAndSetGallery(), ]); } catch (e) { log('fire! fire!'); @@ -98,29 +98,29 @@ class _HomeTabsScreenState extends State<HomeTabsScreen> with SingleTickerProvid } // Plans, weight and gallery - log('Loading plans, weight, measurements and gallery'); - await Future.wait([ - galleryProvider.fetchAndSetGallery(), - nutritionPlansProvider.fetchAndSetAllPlansSparse(), - workoutPlansProvider.fetchAndSetAllPlansSparse(), - weightProvider.fetchAndSetEntries(), - measurementProvider.fetchAndSetAllCategoriesAndEntries(), - ]); + // log('Loading plans, weight, measurements and gallery'); + // await Future.wait([ + // galleryProvider.fetchAndSetGallery(), + // nutritionPlansProvider.fetchAndSetAllPlansSparse(), + // workoutPlansProvider.fetchAndSetAllPlansSparse(), + // weightProvider.fetchAndSetEntries(), + // measurementProvider.fetchAndSetAllCategoriesAndEntries(), + // ]); // Current nutritional plan - log('Loading current nutritional plan'); - if (nutritionPlansProvider.currentPlan != null) { - final plan = nutritionPlansProvider.currentPlan!; - await nutritionPlansProvider.fetchAndSetPlanFull(plan.id!); - } - - // Current workout plan - log('Loading current workout plan'); - if (workoutPlansProvider.activePlan != null) { - final planId = workoutPlansProvider.activePlan!.id!; - await workoutPlansProvider.fetchAndSetWorkoutPlanFull(planId); - workoutPlansProvider.setCurrentPlan(planId); - } + // log('Loading current nutritional plan'); + // if (nutritionPlansProvider.currentPlan != null) { + // final plan = nutritionPlansProvider.currentPlan!; + // await nutritionPlansProvider.fetchAndSetPlanFull(plan.id!); + // } + + // // Current workout plan + // log('Loading current workout plan'); + // if (workoutPlansProvider.activePlan != null) { + // final planId = workoutPlansProvider.activePlan!.id!; + // await workoutPlansProvider.fetchAndSetWorkoutPlanFull(planId); + // workoutPlansProvider.setCurrentPlan(planId); + // } } authProvider.dataInit = true; diff --git a/lib/widgets/dashboard/widgets.dart b/lib/widgets/dashboard/widgets.dart index 9310cd5a4..3ef1826c4 100644 --- a/lib/widgets/dashboard/widgets.dart +++ b/lib/widgets/dashboard/widgets.dart @@ -16,6 +16,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +import 'dart:developer'; + import 'package:carousel_slider/carousel_slider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; @@ -24,6 +26,7 @@ import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:wger/models/nutrition/nutritional_plan.dart'; import 'package:wger/models/workouts/workout_plan.dart'; +import 'package:wger/providers/auth.dart'; import 'package:wger/providers/body_weight.dart'; import 'package:wger/providers/measurement.dart'; import 'package:wger/providers/nutrition.dart'; @@ -57,8 +60,24 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> { @override void initState() { super.initState(); - _plan = Provider.of<NutritionPlansProvider>(context, listen: false).currentPlan; - _hasContent = _plan != null; + _initNutritionData(); + } + + Future<void> _initNutritionData() async { + final nutritionPlansProvider = context.read<NutritionPlansProvider>(); + + if (!nutritionPlansProvider.nutritionDataInit) { + log('Loading Nutrition plans'); + await Future.wait([ + nutritionPlansProvider.fetchAndSetAllPlansSparse(), + ]); + log('Loading current nutritional plan'); + if (nutritionPlansProvider.currentPlan != null) { + final plan = nutritionPlansProvider.currentPlan!; + await nutritionPlansProvider.fetchAndSetPlanFull(plan.id!); + } + nutritionPlansProvider.nutritionDataInit = true; + } } List<Widget> getContent() { @@ -156,6 +175,8 @@ class _DashboardNutritionWidgetState extends State<DashboardNutritionWidget> { @override Widget build(BuildContext context) { + _plan = Provider.of<NutritionPlansProvider>(context, listen: true).currentPlan; + _hasContent = _plan != null; return Card( child: Column( children: [ @@ -239,6 +260,24 @@ class DashboardWeightWidget extends StatefulWidget { class _DashboardWeightWidgetState extends State<DashboardWeightWidget> { late BodyWeightProvider weightEntriesData; + @override + void initState() { + // TODO: implement initState + super.initState(); + _initWeightData(); + } + + Future<void> _initWeightData() async { + final weightProvider = context.read<BodyWeightProvider>(); + if (!weightProvider.wightDataInit) { + log('Loading weight'); + await Future.wait([ + weightProvider.fetchAndSetEntries(), + ]); + weightProvider.wightDataInit = true; + } + } + @override Widget build(BuildContext context) { weightEntriesData = Provider.of<BodyWeightProvider>(context, listen: false); @@ -318,6 +357,24 @@ class _DashboardMeasurementWidgetState extends State<DashboardMeasurementWidget> int _current = 0; final CarouselController _controller = CarouselController(); + @override + void initState() { + // TODO: implement initState + super.initState(); + _initMeasurementData(); + } + + Future<void> _initMeasurementData() async { + final measurementProvider = context.read<MeasurementProvider>(); + if (!measurementProvider.measurementDataInit) { + log('Loading measurements'); + await Future.wait([ + measurementProvider.fetchAndSetAllCategoriesAndEntries(), + ]); + measurementProvider.measurementDataInit = true; + } + } + @override Widget build(BuildContext context) { final provider = Provider.of<MeasurementProvider>(context, listen: false); @@ -437,8 +494,29 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> { @override void initState() { super.initState(); - _workoutPlan = context.read<WorkoutPlansProvider>().activePlan; - _hasContent = _workoutPlan != null; + _initWorkoutPlansData(); + } + + Future<void> _initWorkoutPlansData() async { + final workoutPlansProvider = context.read<WorkoutPlansProvider>(); + + if (!workoutPlansProvider.workoutPlansDatainit) { + log('Loading Workout plans'); + try { + await Future.wait([ + workoutPlansProvider.fetchAndSetAllPlansSparse(), + ]); + } catch (e, _) { + log(e.toString()); + } + log('Loading current workout plan'); + if (workoutPlansProvider.activePlan != null) { + final planId = workoutPlansProvider.activePlan!.id!; + await workoutPlansProvider.fetchAndSetWorkoutPlanFull(planId); + workoutPlansProvider.setCurrentPlan(planId); + } + workoutPlansProvider.workoutPlansDatainit = true; + } } Widget getTrailing() { @@ -522,6 +600,8 @@ class _DashboardWorkoutWidgetState extends State<DashboardWorkoutWidget> { @override Widget build(BuildContext context) { + _workoutPlan = Provider.of<WorkoutPlansProvider>(context, listen: true).activePlan; + _hasContent = _workoutPlan != null; return Card( child: Column( children: [ diff --git a/lib/widgets/measurements/charts.dart b/lib/widgets/measurements/charts.dart index 66f08c5a8..a772f89d6 100644 --- a/lib/widgets/measurements/charts.dart +++ b/lib/widgets/measurements/charts.dart @@ -135,7 +135,7 @@ class _MeasurementChartWidgetFlState extends State<MeasurementChartWidgetFl> { color: Theme.of(context).colorScheme.secondary, barWidth: 2, isStrokeCapRound: true, - dotData: const FlDotData( + dotData: FlDotData( show: true, ), ), diff --git a/lib/widgets/nutrition/charts.dart b/lib/widgets/nutrition/charts.dart index cefc84346..129c45051 100644 --- a/lib/widgets/nutrition/charts.dart +++ b/lib/widgets/nutrition/charts.dart @@ -253,17 +253,17 @@ class NutritionalDiaryChartWidgetFlState extends State<NutritionalDiaryChartWidg getTitlesWidget: leftTitles, ), ), - topTitles: const AxisTitles( + topTitles: AxisTitles( sideTitles: SideTitles(showTitles: false), ), - rightTitles: const AxisTitles( + rightTitles: AxisTitles( sideTitles: SideTitles(showTitles: false), ), ), gridData: FlGridData( show: true, checkToShowHorizontalLine: (value) => value % 10 == 0, - getDrawingHorizontalLine: (value) => const FlLine( + getDrawingHorizontalLine: (value) => FlLine( color: Colors.black, strokeWidth: 1, ), diff --git a/pubspec.lock b/pubspec.lock index c8ea958d8..d211803b1 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,18 +5,18 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "64.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.2.0" android_metadata: dependency: "direct main" description: @@ -221,10 +221,10 @@ packages: dependency: "direct main" description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.17.2" convert: dependency: transitive description: @@ -269,10 +269,10 @@ packages: dependency: transitive description: name: dart_style - sha256: "1efa911ca7086affd35f463ca2fc1799584fb6aa89883cf0af8e3664d6a02d55" + sha256: abd7625e16f51f554ea244d090292945ec4d4be7bfbaf2ec8cccea568919d334 url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3" equatable: dependency: "direct main" description: @@ -760,10 +760,10 @@ packages: dependency: transitive description: name: meta - sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.9.1" mime: dependency: transitive description: @@ -880,18 +880,18 @@ packages: dependency: transitive description: name: platform - sha256: ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102 + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.1.7" pointer_interceptor: dependency: transitive description: @@ -1093,18 +1093,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.1" stream_transform: dependency: transitive description: @@ -1149,10 +1149,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.6.0" timing: dependency: transitive description: @@ -1189,10 +1189,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: "4ac97281cf60e2e8c5cc703b2b28528f9b50c8f7cebc71df6bdf0845f647268a" + sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 url: "https://pub.dev" source: hosted - version: "6.2.0" + version: "6.2.1" url_launcher_linux: dependency: transitive description: @@ -1301,10 +1301,10 @@ packages: dependency: transitive description: name: video_player_avfoundation - sha256: fe73d636f82286a3739f5e644f95f09442cacdc436ebbe5436521dc915f3ecac + sha256: bc923884640d6dc403050586eb40713cdb8d1d84e6886d8aca50ab04c59124c2 url: "https://pub.dev" source: hosted - version: "2.5.1" + version: "2.5.2" video_player_platform_interface: dependency: transitive description: @@ -1325,10 +1325,10 @@ packages: dependency: transitive description: name: vm_service - sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 + sha256: c620a6f783fa22436da68e42db7ebbf18b8c44b9a46ab911f666ff09ffd9153f url: "https://pub.dev" source: hosted - version: "11.10.0" + version: "11.7.1" watcher: dependency: transitive description: @@ -1341,10 +1341,10 @@ packages: dependency: transitive description: name: web - sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -1365,10 +1365,10 @@ packages: dependency: transitive description: name: win32 - sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + sha256: "7c99c0e1e2fa190b48d25c81ca5e42036d5cac81430ef249027d97b0935c553f" url: "https://pub.dev" source: hosted - version: "5.0.9" + version: "5.1.0" xdg_directories: dependency: transitive description: @@ -1394,5 +1394,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.2.0-194.0.dev <4.0.0" + dart: ">=3.1.0 <4.0.0" flutter: ">=3.13.0" diff --git a/pubspec.yaml b/pubspec.yaml index 840833e58..76f0b2770 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,6 +62,9 @@ dependencies: flex_seed_scheme: ^1.4.0 flex_color_scheme: ^7.3.1 +dependency_overrides: + intl: any + dev_dependencies: flutter_test: sdk: flutter