8 Commits

7 changed files with 52 additions and 28 deletions

View File

@ -1 +1,4 @@
include: package:flutter_lints/flutter.yaml
analyzer:
errors:
unreachable_switch_default: ignore

View File

@ -1,7 +1,11 @@
// Flutter
import '/models/item_type.dart';
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher_string.dart';
// Local
import '/widgets/cards.dart';
_launchSite(String url) async {
try {
if (await canLaunchUrlString(url)) {
@ -38,23 +42,34 @@ class HelpPage extends StatelessWidget {
),
child: Column(
children: [
TitleCard(title: "Help"),
Text(
"\t\t This app is meant to be a simple budgeting tool,"
" allowing you to view your income and expenses at a high"
" level without micro managing specific budget items or"
" adding receipts.",
" adding receipts."
"",
),
Text(
"\n\t\t ${ItemType.expense.plural} are defined as ${ItemType.expense.description.toLowerCase()}"
" ${ItemType.income.title} is defined as ${ItemType.income.description.toLowerCase()}"
" ${ItemType.asset.plural} are defined as ${ItemType.asset.description.toLowerCase()}"
"",
),
Text(
"\n\t\t Tracked items can be swiped left to right for"
" Deletion or right to left for Editing. Items are sorted"
" from highest to lowest so that the biggest impacts are"
" always in view.",
" always in view."
"",
),
Text(
"\n\t\t To subscribe to app updates, install the Obtanium"
" app, then use the URL from the Source Code button below."
"\n\t\t To subscribe to Android updates, install Obtanium,"
" then use the URL from the Source Code button below."
" Otherwise the app needs installed manually by downloading"
" APKs from the Source Code /releases/ page.",
" APKs from the Source Code /releases/ page. Linux users"
" currently need to install and update manually."
"",
),
//Text("Another paragraph.")
],

View File

@ -9,7 +9,6 @@ import '/pages/tracked_item.dart';
import '/pages/report.dart';
import '/pages/settings.dart';
import '/pages/help.dart';
import '/db.dart';
class HomePage extends StatefulWidget {
const HomePage({

View File

@ -1,6 +1,5 @@
// Flutter
import 'dart:async';
import 'package:flutter/material.dart';
import '/models/item_type.dart';
@ -12,8 +11,6 @@ import '/models/tracked_item.dart';
/// TODO:
/// - Projected Assets:
/// - Allow customization?
/// - 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 = -1,
_expenseMonthly = -1,
@ -68,18 +65,14 @@ class _ProjectionPageState extends State<ProjectionPage> {
_expenseYearly < 0) {
_showProjections = false;
projections = Center(
child: SizedBox(
child: CircularProgressIndicator(),
),
);
Future.delayed(Duration(seconds: 1), () {
setState(() {
_showProjections = true;
});
});
} else {
}
if (_showProjections) {
double oneMonth = _assetTotal + _incomeMonthly - _expenseMonthly,
threeMonths = _assetTotal + (3 * (_incomeMonthly - _expenseMonthly)),
sixMonths = _assetTotal + (6 * (_incomeMonthly - _expenseMonthly)),
@ -135,6 +128,12 @@ class _ProjectionPageState extends State<ProjectionPage> {
proj6,
],
);
} else {
projections = Center(
child: SizedBox(
child: CircularProgressIndicator(),
),
);
}
// Return all of the UI elements.

View File

@ -1,5 +1,9 @@
// Flutter
import 'package:flutter/material.dart';
// Local
import '/widgets/cards.dart';
/// TODO:
/// - Export DB (JSON?)
/// - Import DB (JSON?)
@ -14,8 +18,14 @@ class SettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Text(
"No settings yet. :)",
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
TitleCard(title: "Settings"),
Text(
"No settings exist yet. :)",
),
],
),
);
}

View File

@ -9,6 +9,7 @@ import '/models/item_type.dart';
import '/models/expense.dart';
import '/models/frequency.dart';
import '/db.dart';
import '/widgets/cards.dart';
class TrackedItemPage extends StatefulWidget {
final ItemType assetType;
@ -64,14 +65,7 @@ class _TrackedItemPageState extends State<TrackedItemPage> {
)
: Column(
children: [
Text(
"${widget.assetType.plural}",
style: TextStyle(
fontSize: 24.0,
decoration: TextDecoration.underline,
fontWeight: FontWeight.bold,
),
),
TitleCard(title: widget.assetType.plural),
/*Text(
"${widget.assetType.description}",
style: TextStyle(
@ -401,7 +395,6 @@ class _TrackedItemInputDialogState extends State<TrackedItemInputDialog> {
: Text("Edit ${_type!.title}"),
),
content: FutureBuilder<List<TrackedItem>>(
// TODO / TBD -- This should no longer only be Expenses.
future: items,
builder: (BuildContext context,
AsyncSnapshot<List<TrackedItem>> snapshot) {

View File

@ -1,3 +1,4 @@
// Flutter
import 'package:flutter/material.dart';
class TitleCard extends StatelessWidget {
@ -15,7 +16,11 @@ class TitleCard extends StatelessWidget {
child: Center(
child: Text(
title,
style: TextStyle(fontSize: 20),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
decoration: TextDecoration.underline,
),
),
),
);