readme
parent
8db659336c
commit
21c29308c2
|
@ -1,14 +1,17 @@
|
||||||
# My Finance Planer
|
# My Finance Planer
|
||||||
|
![Screenshot](1.png)
|
||||||
My Finance Planer is a fantastic application that helps you manage your finances and provides money-saving tips. It offers an intuitive user interface and useful features to help you achieve your financial goals.
|
My Finance Planer is a fantastic application that helps you manage your finances and provides money-saving tips. It offers an intuitive user interface and useful features to help you achieve your financial goals.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Financial Overview:** Display your account balances, income, and expenses in a clear and concise manner.
|
- **Financial Overview:** Display your account balances, income, and expenses in a clear and concise manner.
|
||||||
|
![Screenshot](3.png)
|
||||||
- **Budget Management:** Define budgets for different categories and keep track of your spending.
|
- **Budget Management:** Define budgets for different categories and keep track of your spending.
|
||||||
- **Savings Tips:** Receive regular savings tips and advice to reduce your expenses.
|
- **Savings Tips:** Receive regular savings tips and advice to reduce your expenses.
|
||||||
|
![Screenshot](5.png)
|
||||||
- **Custom Goals:** Set personalized financial goals and track your progress.
|
- **Custom Goals:** Set personalized financial goals and track your progress.
|
||||||
- **Monthly budget:** Set personalized monthly budget maximums and keep your spendings under control.
|
- **Monthly budget:** Set personalized monthly budget maximums and keep your spendings under control.
|
||||||
|
![Screenshot](4.png)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -21,8 +24,9 @@ My Finance Planer is a fantastic application that helps you manage your finances
|
||||||
1. Upon opening the app, you will need to create one or more accounts.
|
1. Upon opening the app, you will need to create one or more accounts.
|
||||||
2. Click on one account card to open the account details and add transactions.
|
2. Click on one account card to open the account details and add transactions.
|
||||||
3. Navigate through the various tabs to view your income, expense and budget check.
|
3. Navigate through the various tabs to view your income, expense and budget check.
|
||||||
4. Tap the info button in the app bar to access the saving tips.
|
4. Tap the info button in the app bar to access the saving tips.,
|
||||||
5. Configure your user settings and language through the settings menu.
|
5. Configure your user settings and language through the settings menu.
|
||||||
|
![Screenshot](2.png)
|
||||||
6. Regularly update your expenses to stay on top of your financial situation.
|
6. Regularly update your expenses to stay on top of your financial situation.
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
|
@ -186,6 +186,7 @@ class AccountDetailPageState extends State<AccountDetailPage>
|
||||||
TabBar(
|
TabBar(
|
||||||
controller: _tabController,
|
controller: _tabController,
|
||||||
labelColor: Colors.black,
|
labelColor: Colors.black,
|
||||||
|
labelStyle: const TextStyle(fontSize: 14),
|
||||||
unselectedLabelColor: Colors.black54,
|
unselectedLabelColor: Colors.black54,
|
||||||
indicator: MaterialIndicator(
|
indicator: MaterialIndicator(
|
||||||
height: 4,
|
height: 4,
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"title" : "Finanzplaner",
|
"title" : "My Finance Planner",
|
||||||
"delete" : "Löschen",
|
"delete" : "Löschen",
|
||||||
"deleteaccount" : "Account löschen",
|
"deleteaccount" : "Account löschen",
|
||||||
"sure" : "Sind Sie sicher, dass Sie dieses Konto löschen möchten?",
|
"sure" : "Sind Sie sicher, dass Sie dieses Konto löschen möchten?",
|
||||||
|
@ -22,5 +22,6 @@
|
||||||
"language": "Sprache",
|
"language": "Sprache",
|
||||||
"currency": "Währung",
|
"currency": "Währung",
|
||||||
"budget": "Budgetcheck",
|
"budget": "Budgetcheck",
|
||||||
"progress": "von deinem Budget ausgegeben"
|
"progress": "von deinem Budget ausgegeben",
|
||||||
|
"monthlyexpenses": "Monatliche Ausgaben"
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"title" : "Financial Planner",
|
"title" : "My Finance Planner",
|
||||||
"delete" : "Delete",
|
"delete" : "Delete",
|
||||||
"deleteaccount" : "Delete account",
|
"deleteaccount" : "Delete account",
|
||||||
"sure" : "Are you sure you want to delete this account?",
|
"sure" : "Are you sure you want to delete this account?",
|
||||||
|
@ -22,5 +22,6 @@
|
||||||
"language": "Language",
|
"language": "Language",
|
||||||
"currency": "Currency",
|
"currency": "Currency",
|
||||||
"budget": "Budget check",
|
"budget": "Budget check",
|
||||||
"progress": "of your budget spent"
|
"progress": "of your budget spent",
|
||||||
|
"monthlyexpenses": "Monthly Expenses"
|
||||||
}
|
}
|
|
@ -1,27 +1,54 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:syncfusion_flutter_charts/charts.dart';
|
import 'package:syncfusion_flutter_charts/charts.dart';
|
||||||
import 'expense_data.dart';
|
import 'expense_data.dart';
|
||||||
|
import 'package:flutter_neumorphic/flutter_neumorphic.dart';
|
||||||
|
|
||||||
class MonthlyExpensesChart extends StatelessWidget {
|
class MonthlyExpensesChart extends StatelessWidget {
|
||||||
final List<ExpenseData> data;
|
final List<ExpenseData> data;
|
||||||
|
|
||||||
const MonthlyExpensesChart({super.key, required this.data});
|
const MonthlyExpensesChart({Key? key, required this.data}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
height: 300,
|
height: 240,
|
||||||
child: SfCartesianChart(
|
child: Neumorphic(
|
||||||
primaryXAxis: CategoryAxis(),
|
style: NeumorphicStyle(
|
||||||
series: <ChartSeries>[
|
shape: NeumorphicShape.flat,
|
||||||
ColumnSeries<ExpenseData, String>(
|
depth: 8,
|
||||||
dataSource: data,
|
intensity: 0.6,
|
||||||
xValueMapper: (ExpenseData expense, _) => expense.month,
|
surfaceIntensity: 0.25,
|
||||||
yValueMapper: (ExpenseData expense, _) => expense.amount,
|
shadowLightColor: Colors.white,
|
||||||
color: Colors.blue,
|
shadowDarkColor: Colors.black87,
|
||||||
|
color: Colors.grey[100],
|
||||||
|
),
|
||||||
|
child: SfCartesianChart(
|
||||||
|
primaryXAxis: CategoryAxis(),
|
||||||
|
series: _buildChartSeries(),
|
||||||
|
tooltipBehavior: TooltipBehavior(enable: true),
|
||||||
|
title: ChartTitle(
|
||||||
|
text: 'monthlyexpenses'.tr(),
|
||||||
|
textStyle: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
legend: Legend(
|
||||||
|
isVisible: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
List<ChartSeries<ExpenseData, String>> _buildChartSeries() {
|
||||||
|
return [
|
||||||
|
ColumnSeries<ExpenseData, String>(
|
||||||
|
dataSource: data,
|
||||||
|
xValueMapper: (ExpenseData expense, _) => expense.month,
|
||||||
|
yValueMapper: (ExpenseData expense, _) => expense.amount,
|
||||||
|
color: Colors.blue.shade200,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'package:awesome_dialog/awesome_dialog.dart';
|
import 'package:awesome_dialog/awesome_dialog.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_neumorphic/flutter_neumorphic.dart';
|
import 'package:flutter_neumorphic/flutter_neumorphic.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:tests/preferences.dart';
|
import 'package:tests/preferences.dart';
|
||||||
|
@ -30,6 +31,7 @@ class FinancialPlannerApp extends StatelessWidget {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
localizationsDelegates: context.localizationDelegates,
|
localizationsDelegates: context.localizationDelegates,
|
||||||
supportedLocales: context.supportedLocales,
|
supportedLocales: context.supportedLocales,
|
||||||
|
@ -128,8 +130,9 @@ class HomePageState extends State<HomePage> {
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(right: 16.0, top: 3, bottom: 7),
|
padding: const EdgeInsets.only(right: 16.0, top: 2, bottom: 0),
|
||||||
child: NeumorphicButton(
|
child: NeumorphicButton(
|
||||||
|
margin: EdgeInsets.only(bottom: 10),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
await Navigator.push(
|
await Navigator.push(
|
||||||
context,
|
context,
|
||||||
|
|
Loading…
Reference in New Issue