Skip to content

Commit 738c50c

Browse files
add refresh indicator on community screen
1 parent c15de3c commit 738c50c

4 files changed

Lines changed: 46 additions & 29 deletions

File tree

lib/presentation/common/core/utils/activity_utils.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import '../../../new_activity/view_model/sum_up_view_model.dart';
1111
import '../enums/infinite_scroll_list.enum.dart';
1212
import '../widgets/view_model/infinite_scroll_list_view_model.dart';
1313

14+
enum ActivityUpdateActionEnum { add, edit, remove }
15+
1416
/// Utility class for activity-related operations.
1517
class ActivityUtils {
1618
/// Returns the icon associated with the given activity type.
@@ -118,8 +120,8 @@ class ActivityUtils {
118120
return activities;
119121
}
120122

121-
static Future<void> updateActivity(
122-
Ref<Object?> ref, Activity updatedActivity, String action) async {
123+
static Future<void> updateActivity(Ref<Object?> ref, Activity updatedActivity,
124+
ActivityUpdateActionEnum action) async {
123125
await _updateActivityList(
124126
ref,
125127
InfiniteScrollListEnum.myActivities.toString(),
@@ -139,18 +141,18 @@ class ActivityUtils {
139141
}
140142

141143
static Future<void> _updateActivityList(Ref<Object?> ref, String listType,
142-
Activity updatedActivity, String action) async {
144+
Activity updatedActivity, ActivityUpdateActionEnum action) async {
143145
var data = ref.read(infiniteScrollListViewModelProvider(listType)).data;
144146

145147
List<List<Activity>> newData = [];
146148

147-
if (action == 'edit') {
149+
if (action == ActivityUpdateActionEnum.edit) {
148150
newData = ActivityUtils.replaceActivity(
149151
data as List<List<Activity>>, updatedActivity);
150-
} else if (action == 'remove') {
152+
} else if (action == ActivityUpdateActionEnum.remove) {
151153
newData = ActivityUtils.deleteActivity(
152154
data as List<List<Activity>>, updatedActivity);
153-
} else if (action == 'add') {
155+
} else if (action == ActivityUpdateActionEnum.add) {
154156
newData = ActivityUtils.prependActivity(
155157
data as List<List<Activity>>, updatedActivity);
156158
}

lib/presentation/community/screens/community_screen.dart

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ class CommunityScreen extends HookConsumerWidget {
2121

2222
CommunityScreen({super.key});
2323

24+
final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey = GlobalKey();
25+
2426
final pendingRequestsDataFutureProvider = FutureProvider<int>((ref) async {
2527
final pendingRequestsProvider =
2628
ref.watch(pendingRequestsViewModelProvider.notifier);
@@ -40,7 +42,6 @@ class CommunityScreen extends HookConsumerWidget {
4042
var provider = ref.read(communityViewModelProvider.notifier);
4143
var pendingRequestsStateProvider =
4244
ref.watch(pendingRequestsDataFutureProvider);
43-
//var pendingRequestsState = ref.watch(pendingRequestsViewModelProvider);
4445
var communityStateProvider = ref.watch(communityDataFutureProvider);
4546

4647
return Scaffold(
@@ -112,25 +113,35 @@ class CommunityScreen extends HookConsumerWidget {
112113
return Text('$error');
113114
},
114115
),
115-
communityStateProvider.when(
116-
data: (initialData) {
117-
return ActivityList(
118-
id: InfiniteScrollListEnum.community.toString(),
119-
activities: initialData.list,
120-
total: initialData.total,
121-
displayUserName: true,
122-
canOpenActivity: false,
123-
bottomListScrollFct:
124-
provider.getInitialMyAndMyFriendsActivities,
125-
);
126-
},
127-
loading: () {
128-
return Center(child: UIUtils.loader);
129-
},
130-
error: (error, stackTrace) {
131-
return Text('$error');
132-
},
133-
)
116+
Expanded(
117+
child: RefreshIndicator(
118+
key: _refreshIndicatorKey,
119+
onRefresh: () async {
120+
provider.refreshList();
121+
return ref.refresh(communityDataFutureProvider);
122+
},
123+
child: Column(children: [
124+
communityStateProvider.when(
125+
data: (initialData) {
126+
return ActivityList(
127+
id: InfiniteScrollListEnum.community.toString(),
128+
activities: initialData.list,
129+
total: initialData.total,
130+
displayUserName: true,
131+
canOpenActivity: false,
132+
bottomListScrollFct:
133+
provider.getInitialMyAndMyFriendsActivities,
134+
);
135+
},
136+
loading: () {
137+
return Center(child: UIUtils.loader);
138+
},
139+
error: (error, stackTrace) {
140+
return Text('$error');
141+
},
142+
)
143+
])),
144+
),
134145
]));
135146
}
136147
}

lib/presentation/my_activities/view_model/activity_details_view_model.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ class ActivityDetailsViewModel extends StateNotifier<ActivityDetailsState> {
6363
locations: const [],
6464
user: activity.user,
6565
comments: activity.comments);
66-
ActivityUtils.updateActivity(ref, activityWithoutLocations, 'remove');
66+
ActivityUtils.updateActivity(
67+
ref, activityWithoutLocations, ActivityUpdateActionEnum.remove);
6768

6869
navigatorKey.currentState?.pop();
6970
navigatorKey.currentState?.pop();
@@ -108,7 +109,8 @@ class ActivityDetailsViewModel extends StateNotifier<ActivityDetailsState> {
108109
StorageUtils.removeCachedDataFromUrl(
109110
'${ActivityApi.url}${activityEdited.id}');
110111
state = state.copyWith(activity: activityEdited);
111-
ActivityUtils.updateActivity(ref, activityEdited, 'edit');
112+
ActivityUtils.updateActivity(
113+
ref, activityEdited, ActivityUpdateActionEnum.edit);
112114
}).whenComplete(() {
113115
state = state.copyWith(isLoading: false);
114116
});

lib/presentation/new_activity/view_model/sum_up_view_model.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ class SumUpViewModel extends StateNotifier<SumUpState> {
5959
locations: locations,
6060
))
6161
.then((value) async {
62-
if (value != null) ActivityUtils.updateActivity(ref, value, 'add');
62+
if (value != null) {
63+
ActivityUtils.updateActivity(ref, value, ActivityUpdateActionEnum.add);
64+
}
6365
ref.read(timerViewModelProvider.notifier).resetTimer();
6466
ref.read(locationViewModelProvider.notifier).resetSavedPositions();
6567
ref.read(metricsViewModelProvider.notifier).reset();

0 commit comments

Comments
 (0)