Skip to content

Commit

Permalink
Merge pull request #56 from andreped/fix-visualization
Browse files Browse the repository at this point in the history
Fixed unresponsive dropdown in visualization tab
  • Loading branch information
andreped authored Aug 4, 2024
2 parents bff0284 + 1dc8c7f commit 55ee007
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 28 deletions.
6 changes: 3 additions & 3 deletions lib/tabs/home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@ class _ExerciseStoreHomePageState extends State<ExerciseStoreHomePage> with Sing
tabs: const [
Tab(icon: Icon(Icons.add), text: 'Log\nExercise'),
Tab(icon: Icon(Icons.calendar_today), text: 'Summary'),
Tab(icon: Icon(Icons.celebration), text: 'Records'), // New Records tab
Tab(icon: Icon(Icons.show_chart), text: 'Visualize\nData'),
Tab(icon: Icon(Icons.table_chart), text: 'View\nTable'),
Tab(icon: Icon(Icons.celebration), text: 'Records'), // New Records tab
],
),
),
Expand All @@ -135,6 +135,8 @@ class _ExerciseStoreHomePageState extends State<ExerciseStoreHomePage> with Sing
selectedDay: _selectedDay,
onDateSelected: _onDateSelected,
),
// Records Tab
RecordsTab(), // New Records tab
// Visualize Data Tab
Padding(
padding: const EdgeInsets.all(16.0),
Expand Down Expand Up @@ -195,8 +197,6 @@ class _ExerciseStoreHomePageState extends State<ExerciseStoreHomePage> with Sing
),
),
),
// Records Tab
RecordsTab(), // New Records tab
],
),
),
Expand Down
61 changes: 36 additions & 25 deletions lib/tabs/visualization.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,39 +23,48 @@ class _VisualizationTabState extends State<VisualizationTab> with AutomaticKeepA
}

Future<void> _fetchExerciseNames() async {
final variables = await _dbHelper.getExercises();
final names = variables.map((exercise) => exercise['exercise'] as String).toSet().toList();
setState(() {
_exerciseNames = names;
});
try {
final variables = await _dbHelper.getExercises();
print('Fetched exercises: $variables');
final names = variables.map((exercise) => exercise['exercise'] as String).toSet().toList();
setState(() {
_exerciseNames = names;
});
} catch (e) {
print('Error fetching exercise names: $e');
}
}

Future<void> _fetchDataPoints(String exerciseName) async {
final exercises = await _dbHelper.getExercises();
final filteredExercises = exercises.where((exercise) => exercise['exercise'] == exerciseName).toList();
try {
final exercises = await _dbHelper.getExercises();
final filteredExercises = exercises.where((exercise) => exercise['exercise'] == exerciseName).toList();

// Sort the filtered exercises by timestamp in descending order
filteredExercises.sort((a, b) => DateTime.parse(b['timestamp']).compareTo(DateTime.parse(a['timestamp'])));
// Sort the filtered exercises by timestamp in descending order
filteredExercises.sort((a, b) => DateTime.parse(b['timestamp']).compareTo(DateTime.parse(a['timestamp'])));

// Get the earliest date (ignoring the time part)
final earliestDate = DateUtils.dateOnly(DateTime.parse(filteredExercises.last['timestamp']));
// Get the earliest date (ignoring the time part)
final earliestDate = DateUtils.dateOnly(DateTime.parse(filteredExercises.last['timestamp']));

final dataPoints = filteredExercises.map((exercise) {
final dateTime = DateUtils.dateOnly(DateTime.parse(exercise['timestamp']));
final dataPoints = filteredExercises.map((exercise) {
final dateTime = DateUtils.dateOnly(DateTime.parse(exercise['timestamp']));

// Calculate the difference in days, ignoring hours time information
final dayDifference = dateTime.difference(earliestDate).inDays.toDouble();
return ScatterSpot(dayDifference, double.parse(exercise['weight']));
}).toList();
// Calculate the difference in days, ignoring hours time information
final dayDifference = dateTime.difference(earliestDate).inDays.toDouble();
return ScatterSpot(dayDifference, double.parse(exercise['weight']));
}).toList();

setState(() {
_dataPoints = dataPoints;
});
setState(() {
_dataPoints = dataPoints;
});
} catch (e) {
print('Error fetching data points: $e');
}
}

@override
Widget build(BuildContext context) {
super.build(context); // Required by AutomaticKeepAliveClientMixin
super.build(context); // Required by AutomaticKeepAliveClientMixin
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
Expand All @@ -64,10 +73,12 @@ class _VisualizationTabState extends State<VisualizationTab> with AutomaticKeepA
hint: const Text('Select an exercise'),
value: _selectedExercise,
onChanged: (newValue) {
setState(() {
_selectedExercise = newValue;
_fetchDataPoints(newValue!);
});
if (newValue != null) {
setState(() {
_selectedExercise = newValue;
});
_fetchDataPoints(newValue);
}
},
items: _exerciseNames.map((exerciseName) {
return DropdownMenuItem<String>(
Expand Down

0 comments on commit 55ee007

Please sign in to comment.