Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 60 additions & 43 deletions lib/presentation/activities/list/screen/activities_screen.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'dart:io' show Platform;

import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
Expand Down Expand Up @@ -141,51 +142,67 @@ Widget _buildGroupedActivities(
return seconds ~/ 60;
}

return ListView.builder(
controller: scrollController,
physics: const ScrollPhysics(),
itemCount: activities?.length ?? 0,
itemBuilder: (context, index) {
final date = activities?.keys.elementAt(index);
final activityList = activities?[date]! ?? [];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (date != null && activityList.isNotEmpty)
Padding(
padding:
const EdgeInsets.only(top: 16.0, left: 16.0, right: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
DateFormat("dd. MMMM yyyy").format(date),
style: const TextStyle(fontWeight: FontWeight.bold),
),
Text(
getDuration(getActivityMinutes(activityList), context),
style: const TextStyle(fontWeight: FontWeight.bold),
return LayoutBuilder(
builder: (context, constraints) {
return SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
controller: scrollController,
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: constraints.maxHeight,
),
child: ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: activities?.length ?? 0,
itemBuilder: (context, index) {
final date = activities?.keys.elementAt(index);
final activityList = activities?[date]! ?? [];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (date != null && activityList.isNotEmpty)
Padding(
padding: const EdgeInsets.only(
top: 16.0, left: 16.0, right: 16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
DateFormat("dd. MMMM yyyy").format(date),
style:
const TextStyle(fontWeight: FontWeight.bold),
),
Text(
getDuration(
getActivityMinutes(activityList), context),
style:
const TextStyle(fontWeight: FontWeight.bold),
),
]),
),
]),
),
const Divider(),
...activityList.map(
(activity) => _buildActivityItem(context, activity),
const Divider(),
...activityList.map(
(activity) => _buildActivityItem(context, activity),
),
// Add a loading indicator at the end of the list,
if (index == activities!.length - 1 && isLoading)
const Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: Center(child: CircularProgressIndicator()),
) // Show loading
// Show no more entries text if end is reached
else if (index == activities.length - 1 && !isLoading)
const Padding(
padding: EdgeInsets.all(16.0),
child: Center(
child: Text("No more entries"),
)),
],
);
},
),
// Add a loading indicator at the end of the list,
if (index == activities!.length - 1 && isLoading)
const Padding(
padding: EdgeInsets.symmetric(vertical: 8.0),
child: Center(child: CircularProgressIndicator()),
) // Show loading
// Show no more entries text if end is reached
else if (index == activities.length - 1 && !isLoading)
const Padding(
padding: EdgeInsets.all(16.0),
child: Center(
child: Text("No more entries"),
)),
],
),
);
},
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class ActivitiesViewModel extends StateNotifier<ActivitiesState> {

for (int i = 0; i < workouts.length; i++) {
ActivityPreview workout = workouts[i];

state.icons ??= {};
if (state.icons!.containsKey(workout.sourceId)) {
workouts[i].icon = state.icons?[workout.sourceId];
Expand All @@ -63,8 +64,10 @@ class ActivitiesViewModel extends StateNotifier<ActivitiesState> {
state.icons![workout.sourceId] = workouts[i].icon;
state = state.copyWith(newIcons: state.icons);
}
// Convert the start date to local time
final startDateLocal = toLocal(workout.start);
DateTime day = DateTime(
workout.start.year, workout.start.month, workout.start.day);
startDateLocal.year, startDateLocal.month, startDateLocal.day);
if (workoutsByDay[day] == null) {
workoutsByDay[day] = [];
}
Expand Down
Loading