From 7e954f1d54014171dafd1eaa27c70e0590a23879 Mon Sep 17 00:00:00 2001 From: Florian <74116125+florianschndlr@users.noreply.github.com> Date: Fri, 30 Jun 2023 17:52:37 +0200 Subject: [PATCH] app name changed and changes to details view --- .../android/app/src/main/AndroidManifest.xml | 2 +- .../lib/frontend/views/details_view.dart | 262 ++++++++++-------- 2 files changed, 146 insertions(+), 118 deletions(-) diff --git a/trackeroo/android/app/src/main/AndroidManifest.xml b/trackeroo/android/app/src/main/AndroidManifest.xml index 2bf68e7..cbf8847 100644 --- a/trackeroo/android/app/src/main/AndroidManifest.xml +++ b/trackeroo/android/app/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.groupfive.trackeroo"> <application - android:label="trackeroo" + android:label="Trackeroo" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <activity diff --git a/trackeroo/lib/frontend/views/details_view.dart b/trackeroo/lib/frontend/views/details_view.dart index bde51a3..c1ab223 100644 --- a/trackeroo/lib/frontend/views/details_view.dart +++ b/trackeroo/lib/frontend/views/details_view.dart @@ -1,7 +1,10 @@ import 'package:flutter/material.dart'; import 'package:fl_chart/fl_chart.dart'; +import 'package:hive_flutter/hive_flutter.dart'; import 'package:trackeroo/frontend/utils/transaction_listtile.dart'; import 'package:trackeroo/logic/models/transaction.dart'; +import 'package:trackeroo/logic/services/locator.dart'; +import 'package:trackeroo/logic/services/transactions_controller.dart'; enum Timespan { daily, weekly, monthly, yearly, all } @@ -28,32 +31,30 @@ class _DetailsViewState extends State<DetailsView> { ]; Transaction trn = Transaction(title: "Bus Ticket VVS", amount: -5.32, categoryId: 'food_and_groceries', dueDate: DateTime.now()); Transaction trp = Transaction(title: "Gehalt", amount: 1300, categoryId: 'leisure_and_entertainment', dueDate: DateTime.now()); - + Timespan timespanView = Timespan.monthly; @override Widget build(BuildContext context) { return SingleChildScrollView( - /* backgroundColor: Colors.blueGrey[900],*/ padding: const EdgeInsets.all(16.0), child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: <Widget>[ - const Row( - children: [ - Text( - 'Datails chart', - style: TextStyle( - fontSize: 14.0, - fontWeight: FontWeight.bold - ), - ), - - ] - ), - const SizedBox(height: 20.0), + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + const Row( + children: [ + Text( + 'Datails chart', + style: TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.bold + ), + ), + ] + ), + const SizedBox(height: 20.0), Center( child : Container( width: 400, @@ -63,49 +64,48 @@ class _DetailsViewState extends State<DetailsView> { LineChartData( borderData: FlBorderData( show: true, - border: Border.all(width: 0.50, color: const Color(0xff37434d)) + border: Border.symmetric( + horizontal: BorderSide( + color: Theme.of(context).colorScheme.onSurface, + width: 0.5 + ) + ) ), gridData: FlGridData( show: true, getDrawingHorizontalLine: (value) { return FlLine( - color: const Color.fromARGB(255, 163, 177, 189), - strokeWidth: 1 - ); - }, - drawVerticalLine: true, - getDrawingVerticalLine: (value){ - return FlLine( - color: const Color.fromARGB(255, 163, 177, 189), - strokeWidth: 1 + color: Theme.of(context).colorScheme.onSurface, + strokeWidth: 0.5 ); }, + drawVerticalLine: false, ), - titlesData: FlTitlesData( - show: true, - rightTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false), - ), - topTitles: AxisTitles( - sideTitles: SideTitles(showTitles: false) + titlesData: FlTitlesData( + show: true, + rightTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false), + ), + topTitles: AxisTitles( + sideTitles: SideTitles(showTitles: false) + ), + bottomTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + reservedSize: 30, + interval: 1, ), - bottomTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - reservedSize: 30, - interval: 1, - ), + ), + leftTitles: AxisTitles( + sideTitles: SideTitles( + showTitles: true, + interval: 50, + reservedSize: 42, ), - leftTitles: AxisTitles( - sideTitles: SideTitles( - showTitles: true, - interval: 1, - reservedSize: 42, - ), - ), + ), ), - maxX: 8, - maxY: 8, + maxX: 12, + maxY: 200, minY: 0, minX: 0, lineBarsData: [ @@ -116,84 +116,112 @@ class _DetailsViewState extends State<DetailsView> { const FlSpot(7, 6), const FlSpot(8, 4), ], - isCurved: true, - gradient: LinearGradient( - colors: gradientColors - ), - barWidth: 5, + isCurved: false, + color: Colors.red, + barWidth: 3, isStrokeCapRound: true, - dotData: FlDotData( - show: true - - ) + dotData: FlDotData(show: false) ) ] ) - ), + ) ) ), - - const SizedBox(height: 10.0), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - FilterChip( - onSelected: (value) => setState(() { - timespanView = Timespan.daily; - }), - label: const Text('Daily'), - selected: timespanView == Timespan.daily, - showCheckmark: false - ), - FilterChip( - onSelected: (value) => setState(() { - timespanView = Timespan.weekly; - }), - label: const Text('Weekly'), - selected: timespanView == Timespan.weekly, - showCheckmark: false + const SizedBox(height: 5.0), + Row( + children: [ + IconButton.filledTonal( + visualDensity: VisualDensity.compact, + onPressed: () => showModalBottomSheet( + useSafeArea: true, + showDragHandle: true, + context: context, + builder: (context) => buildCategoriesModal(), ), - FilterChip( - onSelected: (value) => setState(() { - timespanView = Timespan.monthly; - }), - label: const Text('Montly'), - selected: timespanView == Timespan.monthly, - showCheckmark: false - ), - FilterChip( - onSelected: (value) => setState(() { - timespanView = Timespan.yearly; - }), - label: const Text('Yearly'), - selected: timespanView == Timespan.yearly, - showCheckmark: false + icon: const Row( + children: [ + Icon( + Icons.category_rounded, + size: 14.0, + ), + SizedBox(width: 5.0), + Text('Categories') + ], + ) + ), + const SizedBox(width: 10.0), + IconButton.filledTonal( + visualDensity: VisualDensity.compact, + onPressed: () => showModalBottomSheet( + context: context, + builder: (context) => buildTimespanModal(), ), - FilterChip( - onSelected: (value) => setState(() { - timespanView = Timespan.all; - }), - label: const Text('All'), - selected: timespanView == Timespan.all, - showCheckmark: false + icon: const Row( + children: [ + Icon( + Icons.date_range_rounded, + size: 14.0, + ), + SizedBox(width: 5.0), + Text('Timespan') + ], ) - ], - ), - const SizedBox(height: 20.0), - const Text( - 'Transactions', - style: TextStyle( - fontSize: 14.0, - fontWeight: FontWeight.bold ), + ], + ), + const SizedBox(height: 10.0), + const Text( + 'Transactions', + style: TextStyle( + fontSize: 14.0, + fontWeight: FontWeight.bold ), - const SizedBox(height: 5.0), - TransactionListtile(transaction: trn), - TransactionListtile(transaction: trn), - TransactionListtile(transaction: trn), - TransactionListtile(transaction: trp), - TransactionListtile(transaction: trn), - ] + ), + const SizedBox(height: 5.0), + ValueListenableBuilder( + valueListenable: locator.get<TransactionsController>().transactionsBox.listenable(), + builder: (context, Box<Transaction> box, child) { + List<Transaction> filteredTransList = box.values.toList(); + filteredTransList.sort((b, a) => a.createdAt.compareTo(b.createdAt)); + return ListView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: filteredTransList.length, + itemBuilder: (context, index) => TransactionListtile(transaction: filteredTransList[index]), + ); + }, + ), + ] + ), + ); + } + + Widget buildCategoriesModal() { + return buildModalScaffold( + [ + const Text( + 'Choose categories', + style: TextStyle( + fontSize: 16.0 + ), + ) + ] + ); + } + + Widget buildTimespanModal() { + return const SizedBox(); + } + + Widget buildModalScaffold(List<Widget> children) { + return SizedBox( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: children + ) ), ); } -- GitLab