Skip to content

Commit

Permalink
Merge pull request #87 from andreped:faster-exercise-logging
Browse files Browse the repository at this point in the history
Faster and more user-friendly exercise logging
  • Loading branch information
andreped authored Aug 6, 2024
2 parents 2f3fe0b + 99d543a commit f797f42
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 4 deletions.
23 changes: 23 additions & 0 deletions lib/core/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,27 @@ class DatabaseHelper {
}
return maxWeights;
}

Future<Map<String, dynamic>?> getLastLoggedExercise(String exerciseName) async {
final db = await database;
final List<Map<String, dynamic>> result = await db.query(
'exercises',
where: 'exercise = ?',
whereArgs: [exerciseName],
orderBy: 'timestamp DESC',
limit: 1, // Fetch only the latest entry
);

if (result.isNotEmpty) {
final row = result.first;
return {
'exercise': row['exercise'],
'weight': double.tryParse(row['weight']) ?? 0.0, // Convert weight to double
'reps': row['reps'] as int,
'sets': row['sets'] as int,
};
}
return null;
}

}
51 changes: 47 additions & 4 deletions lib/tabs/inputs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
final _newExerciseController = TextEditingController();
final _weightController = TextEditingController();
final _repsController = TextEditingController();
final _setsController = TextEditingController();
final _setsController = TextEditingController(text: '1'); // Default sets to 1
final DatabaseHelper _dbHelper = DatabaseHelper();

String? _selectedExercise;
bool _isAddingNewExercise = false;
String? _lastExerciseName;
double? _lastWeight;
int? _lastReps;
int? _lastSets;

List<String> _predefinedExercises = [];

Expand All @@ -34,9 +38,29 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
setState(() {
_predefinedExercises = exercises;
_selectedExercise = _predefinedExercises.isNotEmpty ? _predefinedExercises.first : null;
if (_selectedExercise != null) {
_loadLastLoggedExercise();
}
});
}

Future<void> _loadLastLoggedExercise() async {
if (_selectedExercise != null) {
final lastLogged = await _dbHelper.getLastLoggedExercise(_selectedExercise!);
if (lastLogged != null) {
setState(() {
_lastExerciseName = lastLogged['exercise'];
_lastWeight = lastLogged['weight'];
_lastReps = lastLogged['reps'];
_lastSets = lastLogged['sets'];
_weightController.text = _lastWeight?.toString() ?? '';
_repsController.text = _lastReps?.toString() ?? '';
_setsController.text = _lastSets?.toString() ?? '1';
});
}
}
}

Future<void> _addExercise() async {
if (_formKey.currentState!.validate()) {
final exerciseName = _isAddingNewExercise
Expand Down Expand Up @@ -75,12 +99,12 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
_predefinedExercises.add(exerciseName);
_selectedExercise = exerciseName;
});
} else {
// Refresh last logged exercise details
_loadLastLoggedExercise();
}

_newExerciseController.clear();
_weightController.clear();
_repsController.clear();
_setsController.clear();
setState(() {
_isAddingNewExercise = false;
});
Expand All @@ -94,9 +118,13 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
if (value == 'custom') {
_isAddingNewExercise = true;
_selectedExercise = null;
_weightController.clear();
_repsController.clear();
_setsController.text = '1';
} else {
_isAddingNewExercise = false;
_selectedExercise = value;
_loadLastLoggedExercise();
}
});
}
Expand Down Expand Up @@ -167,6 +195,11 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
}
return null;
},
onTap: () {
if (_weightController.text == (_lastWeight?.toString() ?? '')) {
_weightController.clear();
}
},
),
TextFormField(
controller: _repsController,
Expand All @@ -181,6 +214,11 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
}
return null;
},
onTap: () {
if (_repsController.text == (_lastReps?.toString() ?? '')) {
_repsController.clear();
}
},
),
TextFormField(
controller: _setsController,
Expand All @@ -195,6 +233,11 @@ class _ExerciseSetterState extends State<ExerciseSetter> {
}
return null;
},
onTap: () {
if (_setsController.text == (_lastSets?.toString() ?? '')) {
_setsController.clear();
}
},
),
const SizedBox(height: 16.0),
ElevatedButton(
Expand Down

0 comments on commit f797f42

Please sign in to comment.