From 6f9d0d8afba228e7a6803dafe8079ff20bc91883 Mon Sep 17 00:00:00 2001 From: Hyperling Date: Wed, 26 Mar 2025 12:39:09 -0700 Subject: [PATCH] The initial page load now delays properly and shows the correct value rather than 0. Updating an item and going back to the page still shows old data though. --- lib/pages/report.dart | 136 +++++++++++++++++++++++++----------------- 1 file changed, 82 insertions(+), 54 deletions(-) diff --git a/lib/pages/report.dart b/lib/pages/report.dart index 07ff1e7..60e86b6 100644 --- a/lib/pages/report.dart +++ b/lib/pages/report.dart @@ -1,4 +1,6 @@ // Flutter +import 'dart:async'; + import 'package:flutter/material.dart'; import '/models/item_type.dart'; @@ -13,11 +15,11 @@ import '/models/tracked_item.dart'; /// - Fix bug where editing an item does not reflect immediately when returning to Reports page. /// - Currently reflects after going back to Reports the 2nd time. -double _assetTotal = 0, - _expenseMonthly = 0, - _expenseYearly = 0, - _incomeMonthly = 0, - _incomeYearly = 0; +double _assetTotal = -1, + _expenseMonthly = -1, + _expenseYearly = -1, + _incomeMonthly = -1, + _incomeYearly = -1; class ProjectionPage extends StatefulWidget { const ProjectionPage({ @@ -29,6 +31,8 @@ class ProjectionPage extends StatefulWidget { } class _ProjectionPageState extends State { + bool? _showProjections = true; + @override Widget build(BuildContext context) { // Summaries for display as well as calculation of totals for projections. @@ -46,50 +50,79 @@ class _ProjectionPageState extends State { ); // Calculations for the projections. - double oneMonth = _assetTotal + _incomeMonthly - _expenseMonthly, - threeMonths = _assetTotal + (3 * (_incomeMonthly - _expenseMonthly)), - sixMonths = _assetTotal + (6 * (_incomeMonthly - _expenseMonthly)), - oneYear = _assetTotal + (_incomeYearly - _expenseYearly), - twoYears = _assetTotal + (2 * (_incomeYearly - _expenseYearly)), - fiveYears = _assetTotal + (5 * (_incomeYearly - _expenseYearly)); - // Widgets to show the projections. - Widget proj1 = SummaryCard( - name: "One month from now...", - leftText: "", - middleText: oneMonth.toStringAsFixed(2), - rightText: "", - ); - Widget proj2 = SummaryCard( - name: "Three months from now...", - leftText: "", - middleText: threeMonths.toStringAsFixed(2), - rightText: "", - ); - Widget proj3 = SummaryCard( - name: "Half a year from now...", - leftText: "", - middleText: sixMonths.toStringAsFixed(2), - rightText: "", - ); - Widget proj4 = SummaryCard( - name: "One year from now...", - leftText: "", - middleText: oneYear.toStringAsFixed(2), - rightText: "", - ); - Widget proj5 = SummaryCard( - name: "Two years from now...", - leftText: "", - middleText: twoYears.toStringAsFixed(2), - rightText: "", - ); - Widget proj6 = SummaryCard( - name: "Five years from now...", - leftText: "", - middleText: fiveYears.toStringAsFixed(2), - rightText: "", - ); + Widget projections; + if (_assetTotal < 0 || + _incomeMonthly < 0 || + _incomeYearly < 0 || + _expenseMonthly < 0 || + _expenseYearly < 0) { + _showProjections = false; + + projections = Center(child: SizedBox(child: CircularProgressIndicator())); + + Future.delayed(Duration(seconds: 1), () { + setState(() { + _showProjections = true; + }); + }); + } else { + double oneMonth = _assetTotal + _incomeMonthly - _expenseMonthly, + threeMonths = _assetTotal + (3 * (_incomeMonthly - _expenseMonthly)), + sixMonths = _assetTotal + (6 * (_incomeMonthly - _expenseMonthly)), + oneYear = _assetTotal + (_incomeYearly - _expenseYearly), + twoYears = _assetTotal + (2 * (_incomeYearly - _expenseYearly)), + fiveYears = _assetTotal + (5 * (_incomeYearly - _expenseYearly)); + + // Widgets to show the projections. + Widget proj1 = SummaryCard( + name: "One month from now...", + leftText: "", + middleText: oneMonth.toStringAsFixed(2), + rightText: "", + ); + Widget proj2 = SummaryCard( + name: "Three months from now...", + leftText: "", + middleText: threeMonths.toStringAsFixed(2), + rightText: "", + ); + Widget proj3 = SummaryCard( + name: "Half a year from now...", + leftText: "", + middleText: sixMonths.toStringAsFixed(2), + rightText: "", + ); + Widget proj4 = SummaryCard( + name: "One year from now...", + leftText: "", + middleText: oneYear.toStringAsFixed(2), + rightText: "", + ); + Widget proj5 = SummaryCard( + name: "Two years from now...", + leftText: "", + middleText: twoYears.toStringAsFixed(2), + rightText: "", + ); + Widget proj6 = SummaryCard( + name: "Five years from now...", + leftText: "", + middleText: fiveYears.toStringAsFixed(2), + rightText: "", + ); + + projections = Column( + children: [ + proj1, + proj2, + proj3, + proj4, + proj5, + proj6, + ], + ); + } // Return all of the UI elements. return ListView( @@ -99,12 +132,7 @@ class _ProjectionPageState extends State { incomeSummary, assetSummary, TitleCard(title: "Projections"), - proj1, - proj2, - proj3, - proj4, - proj5, - proj6, + projections, ], ); }