Skip to content

Commit

Permalink
Added custom date
Browse files Browse the repository at this point in the history
  • Loading branch information
RedCommander735 committed Mar 3, 2024
1 parent 217b75a commit 0374e32
Show file tree
Hide file tree
Showing 6 changed files with 111 additions and 48 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ A simple app to keep track of how much fuel you're using on average.
- [x] ListView displays things
- [x] Delete things from ListView
- [x] Home screen works
- [ ] Make Date selectable on addItem
- [x] Make Date selectable on addItem
- [ ] Time date selector for overview
- [ ] Fun facts (how much money used for gas, etc.)
- [ ] Backup to csv/xslx/...?
68 changes: 31 additions & 37 deletions lib/Overview.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:spritverbrauch/compound_icon.dart';
import 'package:spritverbrauch/item_list_model.dart';
Expand All @@ -20,11 +21,11 @@ class Overview extends StatelessWidget {
builder: (BuildContext context, ItemListModel value, Widget? child) {
var items = value.items;

double lpk = 0.0;
double price = 0.0;
double dist = 0.0;
double ppl = 0.0;
double ppk = 0.0;
String lpk = "0.00";
String price = "0.00";
String dist = "0.00";
String ppl = "0.00";
String ppk = "0.00";

if (items.isNotEmpty) {
List<double> litersPerKilometer = [];
Expand All @@ -39,38 +40,31 @@ class Overview extends StatelessWidget {
liters.add(element.fuelInLiters);
}

lpk = roundDouble(
(litersPerKilometer.fold(0.0,
(previousValue, element) => previousValue + element)) /
litersPerKilometer.length *
100,
2);

price = roundDouble(
(priceTotal.fold(0.0,
(previousValue, element) => previousValue + element)) /
priceTotal.length,
2);

dist = roundDouble(
(distance.fold(0.0,
(previousValue, element) => previousValue + element)) /
distance.length,
2);

ppl = roundDouble(
(priceTotal.fold(0.0,
(previousValue, element) => previousValue + element)) /
(liters.fold(0.0,
(previousValue, element) => previousValue + element)),
3);

ppk = roundDouble(
(priceTotal.fold(0.0,
(previousValue, element) => previousValue + element)) /
(distance.fold(0.0,
(previousValue, element) => previousValue + element)),
3);
String locale = Intl.systemLocale;
var formatter = NumberFormat.decimalPatternDigits(
decimalDigits: 2, locale: locale);

lpk = formatter.format((litersPerKilometer.fold(
0.0, (previousValue, element) => previousValue + element)) /
litersPerKilometer.length);

price = formatter.format((priceTotal.fold(
0.0, (previousValue, element) => previousValue + element)) /
priceTotal.length);

dist = formatter.format((distance.fold(
0.0, (previousValue, element) => previousValue + element)) /
distance.length);

ppl = formatter.format((priceTotal.fold(
0.0, (previousValue, element) => previousValue + element)) /
(liters.fold(
0.0, (previousValue, element) => previousValue + element)));

ppk = formatter.format((priceTotal.fold(
0.0, (previousValue, element) => previousValue + element)) /
(distance.fold(
0.0, (previousValue, element) => previousValue + element)));
}

return Column(
Expand Down
65 changes: 60 additions & 5 deletions lib/add_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import 'package:provider/provider.dart';
import 'package:spritverbrauch/item_list_model.dart';
import 'package:spritverbrauch/sqlite_service.dart';

import 'package:intl/intl.dart'; //for date format
import 'package:intl/date_symbol_data_local.dart';

class AddItem extends StatefulWidget {
const AddItem({super.key});

Expand All @@ -16,6 +19,20 @@ class _AddItemState extends State<AddItem> {
late double fuelInLiters;
late double pricePerLiter;

final TextEditingController _dateController = TextEditingController();

DateTime _dateTime = DateTime.now();

@override
void initState() {
super.initState();
String locale = Intl.systemLocale;
var formatter = DateFormat.yMMMd(locale);
setState(() {
_dateController.text = formatter.format(DateTime.now());
});
}

@override
Widget build(BuildContext context) {
return Scaffold(
Expand All @@ -27,6 +44,29 @@ class _AddItemState extends State<AddItem> {
padding: const EdgeInsets.all(16),
child: Column(
children: [
TextFormField(
controller: _dateController,
keyboardType: TextInputType.datetime,
textInputAction: TextInputAction.next,
decoration: InputDecoration(
filled: true,
labelText: 'Datum',
prefixIcon: const Icon(Icons.calendar_today),
enabledBorder:
const OutlineInputBorder(borderSide: BorderSide.none),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(
color: Theme.of(context).colorScheme.primary),
),
),
readOnly: true,
onTap: () {
_selectDate();
},
),
const SizedBox(
height: 24,
),
// A text field that validates that the text is an adjective.
TextFormField(
keyboardType: TextInputType.number,
Expand Down Expand Up @@ -112,18 +152,14 @@ class _AddItemState extends State<AddItem> {

var item = ListEntity(
id: 0,
date: DateTime.now().millisecondsSinceEpoch,
date: _dateTime.millisecondsSinceEpoch,
distance: distance,
priceTotal: priceTotal,
fuelInLiters: fuelInLiters,
pricePerLiter: pricePerLiter,
litersPerKilometer: litersPerKilometer,
);

var sqlitesevice = SqliteService();

sqlitesevice.createItem(item);

Provider.of<ItemListModel>(context, listen: false)
.add(item);

Expand All @@ -142,4 +178,23 @@ class _AddItemState extends State<AddItem> {
),
);
}

Future<void> _selectDate() async {
DateTime? pickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(1970),
lastDate: DateTime.now(),
);

String locale = Intl.systemLocale;
var formatter = DateFormat.yMMMd(locale);

if (pickedDate != null) {
setState(() {
_dateController.text = formatter.format(pickedDate);
_dateTime = pickedDate;
});
}
}
}
15 changes: 10 additions & 5 deletions lib/list_item.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:spritverbrauch/compound_icon.dart';
import 'package:spritverbrauch/item_list_model.dart';
Expand Down Expand Up @@ -37,15 +38,19 @@ class _ListItemState extends State<ListItem> {
var month = date.month.toString().padLeft(2, '0');
var year = date.year.toString();

var litersPerKilometer = roundDouble(widget.item.litersPerKilometer, 2);
String locale = Intl.systemLocale;
var formatter =
NumberFormat.decimalPatternDigits(decimalDigits: 2, locale: locale);

var price = roundDouble(widget.item.priceTotal, 2);
var litersPerKilometer = formatter.format(widget.item.litersPerKilometer);

var distance = roundDouble(widget.item.distance, 2);
var price = formatter.format(widget.item.priceTotal);

var fuel = roundDouble(widget.item.fuelInLiters, 2);
var distance = formatter.format(widget.item.distance);

var pricePerLiter = roundDouble(widget.item.pricePerLiter, 3);
var fuel = formatter.format(widget.item.fuelInLiters);

var pricePerLiter = formatter.format(widget.item.pricePerLiter);

return DefaultTextStyle(
style: const TextStyle(fontSize: 16),
Expand Down
8 changes: 8 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.2"
intl:
dependency: "direct main"
description:
name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
url: "https://pub.dev"
source: hosted
version: "0.19.0"
json_annotation:
dependency: "direct main"
description:
Expand Down
1 change: 1 addition & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ dependencies:
sqflite: ^2.3.2
path: ^1.9.0
provider: ^6.1.2
intl: ^0.19.0

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 0374e32

Please sign in to comment.