Compare commits
8 Commits
e896611bd1
...
0.1.3
Author | SHA1 | Date | |
---|---|---|---|
70c26be8e3 | |||
b177b6317e | |||
3c52239efc | |||
de4f8306d7 | |||
f77cf7bd38 | |||
716d40c694 | |||
d9f8536f26 | |||
1966f72c93 |
@ -1 +1,4 @@
|
|||||||
include: package:flutter_lints/flutter.yaml
|
include: package:flutter_lints/flutter.yaml
|
||||||
|
analyzer:
|
||||||
|
errors:
|
||||||
|
unreachable_switch_default: ignore
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
// Flutter
|
// Flutter
|
||||||
|
import '/models/item_type.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
|
|
||||||
|
// Local
|
||||||
|
import '/widgets/cards.dart';
|
||||||
|
|
||||||
_launchSite(String url) async {
|
_launchSite(String url) async {
|
||||||
try {
|
try {
|
||||||
if (await canLaunchUrlString(url)) {
|
if (await canLaunchUrlString(url)) {
|
||||||
@ -38,23 +42,34 @@ class HelpPage extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
child: Column(
|
child: Column(
|
||||||
children: [
|
children: [
|
||||||
|
TitleCard(title: "Help"),
|
||||||
Text(
|
Text(
|
||||||
"\t\t This app is meant to be a simple budgeting tool,"
|
"\t\t This app is meant to be a simple budgeting tool,"
|
||||||
" allowing you to view your income and expenses at a high"
|
" allowing you to view your income and expenses at a high"
|
||||||
" level without micro managing specific budget items or"
|
" 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(
|
Text(
|
||||||
"\n\t\t Tracked items can be swiped left to right for"
|
"\n\t\t Tracked items can be swiped left to right for"
|
||||||
" Deletion or right to left for Editing. Items are sorted"
|
" Deletion or right to left for Editing. Items are sorted"
|
||||||
" from highest to lowest so that the biggest impacts are"
|
" from highest to lowest so that the biggest impacts are"
|
||||||
" always in view.",
|
" always in view."
|
||||||
|
"",
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
"\n\t\t To subscribe to app updates, install the Obtanium"
|
"\n\t\t To subscribe to Android updates, install Obtanium,"
|
||||||
" app, then use the URL from the Source Code button below."
|
" then use the URL from the Source Code button below."
|
||||||
" Otherwise the app needs installed manually by downloading"
|
" 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.")
|
//Text("Another paragraph.")
|
||||||
],
|
],
|
||||||
|
@ -9,7 +9,6 @@ import '/pages/tracked_item.dart';
|
|||||||
import '/pages/report.dart';
|
import '/pages/report.dart';
|
||||||
import '/pages/settings.dart';
|
import '/pages/settings.dart';
|
||||||
import '/pages/help.dart';
|
import '/pages/help.dart';
|
||||||
import '/db.dart';
|
|
||||||
|
|
||||||
class HomePage extends StatefulWidget {
|
class HomePage extends StatefulWidget {
|
||||||
const HomePage({
|
const HomePage({
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
// Flutter
|
// Flutter
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '/models/item_type.dart';
|
import '/models/item_type.dart';
|
||||||
|
|
||||||
@ -12,8 +11,6 @@ import '/models/tracked_item.dart';
|
|||||||
/// TODO:
|
/// TODO:
|
||||||
/// - Projected Assets:
|
/// - Projected Assets:
|
||||||
/// - Allow customization?
|
/// - 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,
|
double _assetTotal = -1,
|
||||||
_expenseMonthly = -1,
|
_expenseMonthly = -1,
|
||||||
@ -68,18 +65,14 @@ class _ProjectionPageState extends State<ProjectionPage> {
|
|||||||
_expenseYearly < 0) {
|
_expenseYearly < 0) {
|
||||||
_showProjections = false;
|
_showProjections = false;
|
||||||
|
|
||||||
projections = Center(
|
|
||||||
child: SizedBox(
|
|
||||||
child: CircularProgressIndicator(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
Future.delayed(Duration(seconds: 1), () {
|
Future.delayed(Duration(seconds: 1), () {
|
||||||
setState(() {
|
setState(() {
|
||||||
_showProjections = true;
|
_showProjections = true;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
}
|
||||||
|
|
||||||
|
if (_showProjections) {
|
||||||
double oneMonth = _assetTotal + _incomeMonthly - _expenseMonthly,
|
double oneMonth = _assetTotal + _incomeMonthly - _expenseMonthly,
|
||||||
threeMonths = _assetTotal + (3 * (_incomeMonthly - _expenseMonthly)),
|
threeMonths = _assetTotal + (3 * (_incomeMonthly - _expenseMonthly)),
|
||||||
sixMonths = _assetTotal + (6 * (_incomeMonthly - _expenseMonthly)),
|
sixMonths = _assetTotal + (6 * (_incomeMonthly - _expenseMonthly)),
|
||||||
@ -135,6 +128,12 @@ class _ProjectionPageState extends State<ProjectionPage> {
|
|||||||
proj6,
|
proj6,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
projections = Center(
|
||||||
|
child: SizedBox(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return all of the UI elements.
|
// Return all of the UI elements.
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
|
// Flutter
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
// Local
|
||||||
|
import '/widgets/cards.dart';
|
||||||
|
|
||||||
/// TODO:
|
/// TODO:
|
||||||
/// - Export DB (JSON?)
|
/// - Export DB (JSON?)
|
||||||
/// - Import DB (JSON?)
|
/// - Import DB (JSON?)
|
||||||
@ -14,8 +18,14 @@ class SettingsPage extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Center(
|
return Center(
|
||||||
child: Text(
|
child: Column(
|
||||||
"No settings yet. :)",
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: [
|
||||||
|
TitleCard(title: "Settings"),
|
||||||
|
Text(
|
||||||
|
"No settings exist yet. :)",
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import '/models/item_type.dart';
|
|||||||
import '/models/expense.dart';
|
import '/models/expense.dart';
|
||||||
import '/models/frequency.dart';
|
import '/models/frequency.dart';
|
||||||
import '/db.dart';
|
import '/db.dart';
|
||||||
|
import '/widgets/cards.dart';
|
||||||
|
|
||||||
class TrackedItemPage extends StatefulWidget {
|
class TrackedItemPage extends StatefulWidget {
|
||||||
final ItemType assetType;
|
final ItemType assetType;
|
||||||
@ -64,14 +65,7 @@ class _TrackedItemPageState extends State<TrackedItemPage> {
|
|||||||
)
|
)
|
||||||
: Column(
|
: Column(
|
||||||
children: [
|
children: [
|
||||||
Text(
|
TitleCard(title: widget.assetType.plural),
|
||||||
"${widget.assetType.plural}",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 24.0,
|
|
||||||
decoration: TextDecoration.underline,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
/*Text(
|
/*Text(
|
||||||
"${widget.assetType.description}",
|
"${widget.assetType.description}",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
@ -401,7 +395,6 @@ class _TrackedItemInputDialogState extends State<TrackedItemInputDialog> {
|
|||||||
: Text("Edit ${_type!.title}"),
|
: Text("Edit ${_type!.title}"),
|
||||||
),
|
),
|
||||||
content: FutureBuilder<List<TrackedItem>>(
|
content: FutureBuilder<List<TrackedItem>>(
|
||||||
// TODO / TBD -- This should no longer only be Expenses.
|
|
||||||
future: items,
|
future: items,
|
||||||
builder: (BuildContext context,
|
builder: (BuildContext context,
|
||||||
AsyncSnapshot<List<TrackedItem>> snapshot) {
|
AsyncSnapshot<List<TrackedItem>> snapshot) {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// Flutter
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class TitleCard extends StatelessWidget {
|
class TitleCard extends StatelessWidget {
|
||||||
@ -15,7 +16,11 @@ class TitleCard extends StatelessWidget {
|
|||||||
child: Center(
|
child: Center(
|
||||||
child: Text(
|
child: Text(
|
||||||
title,
|
title,
|
||||||
style: TextStyle(fontSize: 20),
|
style: TextStyle(
|
||||||
|
fontSize: 20,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
Reference in New Issue
Block a user