| 
							
							
							
						 |  |  | @@ -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,18 @@ class ProjectionPage extends StatefulWidget { | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | class _ProjectionPageState extends State<ProjectionPage> { | 
		
	
		
			
				|  |  |  |  |   bool _showProjections = true; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   void dispose() { | 
		
	
		
			
				|  |  |  |  |     _assetTotal = -2; | 
		
	
		
			
				|  |  |  |  |     _expenseMonthly = -2; | 
		
	
		
			
				|  |  |  |  |     _expenseYearly = -2; | 
		
	
		
			
				|  |  |  |  |     _incomeMonthly = -2; | 
		
	
		
			
				|  |  |  |  |     _incomeYearly = -2; | 
		
	
		
			
				|  |  |  |  |     super.dispose(); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |   @override | 
		
	
		
			
				|  |  |  |  |   Widget build(BuildContext context) { | 
		
	
		
			
				|  |  |  |  |     // Summaries for display as well as calculation of totals for projections. | 
		
	
	
		
			
				
					
					|  |  |  | @@ -46,50 +60,82 @@ class _ProjectionPageState extends State<ProjectionPage> { | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     // 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)); | 
		
	
		
			
				|  |  |  |  |     Widget projections; | 
		
	
		
			
				|  |  |  |  |     if (_assetTotal < 0 || | 
		
	
		
			
				|  |  |  |  |         _incomeMonthly < 0 || | 
		
	
		
			
				|  |  |  |  |         _incomeYearly < 0 || | 
		
	
		
			
				|  |  |  |  |         _expenseMonthly < 0 || | 
		
	
		
			
				|  |  |  |  |         _expenseYearly < 0) { | 
		
	
		
			
				|  |  |  |  |       _showProjections = false; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  |     // 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 = 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 +145,7 @@ class _ProjectionPageState extends State<ProjectionPage> { | 
		
	
		
			
				|  |  |  |  |         incomeSummary, | 
		
	
		
			
				|  |  |  |  |         assetSummary, | 
		
	
		
			
				|  |  |  |  |         TitleCard(title: "Projections"), | 
		
	
		
			
				|  |  |  |  |         proj1, | 
		
	
		
			
				|  |  |  |  |         proj2, | 
		
	
		
			
				|  |  |  |  |         proj3, | 
		
	
		
			
				|  |  |  |  |         proj4, | 
		
	
		
			
				|  |  |  |  |         proj5, | 
		
	
		
			
				|  |  |  |  |         proj6, | 
		
	
		
			
				|  |  |  |  |         projections, | 
		
	
		
			
				|  |  |  |  |       ], | 
		
	
		
			
				|  |  |  |  |     ); | 
		
	
		
			
				|  |  |  |  |   } | 
		
	
	
		
			
				
					
					|  |  |  |   |