Don't load entries with a future

All the data is now loaded on first login and should be always kept in sync
when entries are added or edited. This makes the application more responsive.
This commit is contained in:
Roland Geider
2021-01-31 17:32:36 +01:00
parent d3eaa11cf9
commit 6887db4159
5 changed files with 15 additions and 33 deletions

View File

@@ -39,13 +39,6 @@ class NutritionalPlanScreen extends StatefulWidget {
}
class _NutritionalPlanScreenState extends State<NutritionalPlanScreen> {
Future<NutritionalPlan> _loadNutritionalPlanDetail(BuildContext context, int planId) async {
var plan = Provider.of<Nutrition>(context, listen: false).findById(planId);
await Provider.of<Nutrition>(context, listen: false).fetchAndSetLogs(plan);
return plan;
}
Widget getAppBar(NutritionalPlan plan) {
return AppBar(
title: Text(AppLocalizations.of(context).nutritionalPlan),
@@ -90,16 +83,10 @@ class _NutritionalPlanScreenState extends State<NutritionalPlanScreen> {
final nutritionalPlan = ModalRoute.of(context).settings.arguments as NutritionalPlan;
return Scaffold(
appBar: getAppBar(nutritionalPlan),
//appBar: getAppBar(nutritionalPlan),
//drawer: AppDrawer(),
body: FutureBuilder<NutritionalPlan>(
future: _loadNutritionalPlanDetail(context, nutritionalPlan.id),
builder: (context, AsyncSnapshot<NutritionalPlan> snapshot) =>
snapshot.connectionState == ConnectionState.waiting
? Center(child: CircularProgressIndicator())
: Consumer<Nutrition>(
builder: (context, nutrition, _) => NutritionalPlanDetailWidget(snapshot.data),
),
body: Consumer<Nutrition>(
builder: (context, nutrition, _) => NutritionalPlanDetailWidget(nutritionalPlan),
),
);
}

View File

@@ -20,7 +20,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:wger/locale/locales.dart';
import 'package:wger/models/nutrition/nutritional_plan.dart';
import 'package:wger/providers/workout_plans.dart';
import 'package:wger/providers/nutrition.dart';
import 'package:wger/widgets/app_drawer.dart';
import 'package:wger/widgets/core/bottom_sheet.dart';
import 'package:wger/widgets/nutrition/forms.dart';
@@ -56,8 +56,8 @@ class _NutritionScreenState extends State<NutritionScreen> {
//await showNutritionalPlanSheet(context, nutritionalPlan);
},
),
body: Consumer<WorkoutPlans>(
builder: (context, productsData, child) => NutritionalPlansList(),
body: Consumer<Nutrition>(
builder: (context, nutritionProvider, child) => NutritionalPlansList(nutritionProvider),
),
);
}

View File

@@ -57,13 +57,8 @@ class _WeightScreenState extends State<WeightScreen> {
);
},
),
body: FutureBuilder(
future: Provider.of<BodyWeight>(context, listen: false).fetchAndSetEntries(),
builder: (context, snapshot) => snapshot.connectionState == ConnectionState.waiting
? Center(child: CircularProgressIndicator())
: Consumer<BodyWeight>(
builder: (context, weightProvider, child) => WeightEntriesList(weightProvider),
),
body: Consumer<BodyWeight>(
builder: (context, weightProvider, child) => WeightEntriesList(weightProvider),
),
);
}

View File

@@ -18,24 +18,25 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:wger/providers/nutrition.dart';
import 'package:wger/screens/nutritional_plan_screen.dart';
class NutritionalPlansList extends StatelessWidget {
Nutrition _nutritrionProvider;
NutritionalPlansList(this._nutritrionProvider);
@override
Widget build(BuildContext context) {
final nutritrionalPlansData = Provider.of<Nutrition>(context);
return ListView.builder(
padding: const EdgeInsets.all(10.0),
itemCount: nutritrionalPlansData.items.length,
itemCount: _nutritrionProvider.items.length,
itemBuilder: (context, index) {
final currentPlan = nutritrionalPlansData.items[index];
final currentPlan = _nutritrionProvider.items[index];
return Dismissible(
key: Key(currentPlan.id.toString()),
onDismissed: (direction) {
// Delete workout from DB
Provider.of<Nutrition>(context, listen: false).deletePlan(currentPlan.id);
_nutritrionProvider.deletePlan(currentPlan.id);
// and inform the user
Scaffold.of(context).showSnackBar(

View File

@@ -18,7 +18,6 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:wger/locale/locales.dart';
import 'package:wger/providers/body_weight.dart';
import 'package:wger/widgets/core/bottom_sheet.dart';
@@ -51,7 +50,7 @@ class WeightEntriesList extends StatelessWidget {
onDismissed: (direction) {
if (direction == DismissDirection.endToStart) {
// Delete entry from DB
Provider.of<BodyWeight>(context, listen: false).deleteEntry(currentEntry.id);
_weightProvider.deleteEntry(currentEntry.id);
// and inform the user
Scaffold.of(context).showSnackBar(