Skip to content

Commit

Permalink
change interval field
Browse files Browse the repository at this point in the history
  • Loading branch information
Antoine Bernier committed Apr 23, 2024
1 parent a3e3797 commit bd277f0
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 32 deletions.
90 changes: 60 additions & 30 deletions lib/components/task_dialog.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:ttc_app/components/content_box.dart';
import 'package:ttc_app/models/task.dart';
import 'package:ttc_app/theme.dart';
Expand All @@ -16,23 +17,30 @@ class TaskDialog extends StatefulWidget {

class _TaskDialogState extends State<TaskDialog> {
late String id;
late String title;
late String description;
late Duration interval;
late TextEditingController titleController;
late TextEditingController descriptionController;
late TextEditingController daysIntervalController;
late TextEditingController hoursIntervalController;
late TextEditingController minutesIntervalController;
late DateTime lastReset;

@override
void initState() {
id = widget.task.title;
title = widget.task.title;
description = widget.task.description;
interval = widget.task.interval;
lastReset = widget.task.lastReset;
titleController = TextEditingController(text: widget.task.title);
descriptionController = TextEditingController(text: widget.task.description);
daysIntervalController = TextEditingController(text: widget.task.interval.inDays.toString());
hoursIntervalController = TextEditingController(text: (widget.task.interval - Duration(days: widget.task.interval.inDays)).inHours.toString());
minutesIntervalController = TextEditingController(text: (widget.task.interval - Duration(days: widget.task.interval.inDays, hours: (widget.task.interval - Duration(days: widget.task.interval.inDays)).inHours)).inMinutes.toString());
super.initState();
}

@override
void dispose() {
titleController.dispose();
descriptionController.dispose();
daysIntervalController.dispose();
super.dispose();
}

Expand Down Expand Up @@ -60,36 +68,54 @@ class _TaskDialogState extends State<TaskDialog> {
'Title',
style: Theme.of(context).textTheme.displayMedium,
),
TextFormField(
initialValue: title,
onChanged: (value) => setState(() => title = value),
),
TextFormField(controller: titleController),
const SizedBox(height: 30),
Text(
'Description',
style: Theme.of(context).textTheme.displayMedium,
),
TextFormField(
initialValue: description,
onChanged: (value) => setState(() => description = value),
),
TextFormField(controller: descriptionController),
const SizedBox(height: 30),
Text(
'Interval (days)',
'Interval',
style: Theme.of(context).textTheme.displayMedium,
),
TextFormField(
initialValue: interval.inDays.toString(),
onChanged: (value) {
try {
interval = Duration(days: int.parse(value));
return;
} catch (exception) {
log(exception.toString());
}
interval = Duration.zero;
},
keyboardType: TextInputType.number,
Row(
children: [
Flexible(
child: TextFormField(
decoration: const InputDecoration(label: Text('Days')),
controller: daysIntervalController,
onChanged: (value) {
String filteredVal = (int.tryParse(daysIntervalController.text) ?? 0).toString();
daysIntervalController.text = filteredVal;
},
keyboardType: TextInputType.number,
),
),
Flexible(
child: TextFormField(
decoration: const InputDecoration(label: Text('Hours')),
controller: hoursIntervalController,
onChanged: (value) {
String filteredVal = (int.tryParse(hoursIntervalController.text) ?? 0).toString();
hoursIntervalController.text = filteredVal;
},
keyboardType: TextInputType.number,
),
),
Flexible(
child: TextFormField(
decoration: const InputDecoration(label: Text('Minutes')),
controller: minutesIntervalController,
onChanged: (value) {
String filteredVal = (int.tryParse(minutesIntervalController.text) ?? 0).toString();
minutesIntervalController.text = filteredVal;
},
keyboardType: TextInputType.number,
),
),
],
),
const SizedBox(height: 30),
Row(
Expand All @@ -107,9 +133,13 @@ class _TaskDialogState extends State<TaskDialog> {
onPressed: () {
Navigator.of(context).pop(Task(
id: widget.task.id,
title: title,
description: description,
interval: interval,
title: titleController.text,
description: descriptionController.text,
interval: Duration(
days: int.tryParse(daysIntervalController.text) ?? 1,
hours: int.tryParse(hoursIntervalController.text) ?? 1,
minutes: int.tryParse(minutesIntervalController.text) ?? 1,
),
lastReset: lastReset,
));
},
Expand Down
4 changes: 4 additions & 0 deletions lib/models/task.dart
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ class Task {
return 'TIME TO CLEAN';
}

int get timeLeftMilliseconds {
return doItBy.difference(DateTime.now()).inMilliseconds;
}

double get progressDecimalPercent {
Duration diff = doItBy.difference(DateTime.now());
return max(0, min(1, 1 - (diff.inSeconds / interval.inSeconds)));
Expand Down
2 changes: 1 addition & 1 deletion lib/provider/task_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class TaskProvider {
List<Task> taskList = [];
List<Task> get sortedTaskList {
List<Task> l = List<Task>.from(taskList);
l.sort((a, b) => b.progressDecimalPercent.compareTo(a.progressDecimalPercent));
l.sort((a, b) => a.timeLeftMilliseconds.compareTo(b.timeLeftMilliseconds));
return l;
}

Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ttc_app
description: "Time to clean"
publish_to: 'none'
version: 1.0.0+1
version: 1.0.1+1

environment:
sdk: '>=3.3.2 <4.0.0'
Expand Down

0 comments on commit bd277f0

Please sign in to comment.