Skip to content

Commit dce396d

Browse files
Implement chat history management and profile screen enhancements
- Added clearAllChats method to ChatNotifier for deleting chat history - Updated ProfileScreen to dynamically display chat statistics - Implemented chat and user data clearing in logout and clear history actions - Enhanced saved users sheet with improved styling and user removal feedback - Added mounted checks to prevent state updates after widget disposal
1 parent 0ab57df commit dce396d

File tree

2 files changed

+53
-18
lines changed

2 files changed

+53
-18
lines changed

lib/data/providers/chat_provider.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,9 @@ class ChatNotifier extends StateNotifier<List<Chat>> {
8888
// Save updated chats to storage
8989
await _storage.saveChats(state);
9090
}
91+
92+
Future<void> clearAllChats() async {
93+
state = [];
94+
await _storage.saveChats(state);
95+
}
9196
}

lib/data/view/profile/profile_screen.dart

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import '../../../configs/constants/app_images.dart';
77
import '../../../configs/theme/app_theme.dart';
88
import '../../../configs/routes/routes_name.dart';
99
import '../../services/shared_prefs_service.dart';
10+
import '../../providers/chat_provider.dart';
1011

1112
class ProfileScreen extends ConsumerStatefulWidget {
1213
const ProfileScreen({super.key});
@@ -18,6 +19,16 @@ class ProfileScreen extends ConsumerStatefulWidget {
1819
class _ProfileScreenState extends ConsumerState<ProfileScreen> {
1920
@override
2021
Widget build(BuildContext context) {
22+
final chats = ref.watch(chatProvider); // Get chats from provider
23+
24+
// Calculate stats
25+
final totalChats = chats.length;
26+
final totalMessages = chats.fold<int>(
27+
0,
28+
(sum, chat) => sum + chat.messages.length,
29+
);
30+
final totalImages = 0; // TODO: Implement image tracking
31+
2132
return Scaffold(
2233
extendBodyBehindAppBar: true,
2334
appBar: AppBar(
@@ -124,9 +135,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
124135
Row(
125136
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
126137
children: [
127-
_buildStatItem('Chats', '23'),
128-
_buildStatItem('Messages', '142'),
129-
_buildStatItem('Images', '15'),
138+
_buildStatItem('Chats', totalChats.toString()),
139+
_buildStatItem('Messages', totalMessages.toString()),
140+
_buildStatItem('Images', totalImages.toString()),
130141
],
131142
),
132143
const SizedBox(height: 32),
@@ -219,13 +230,16 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
219230
child: const Text('Cancel'),
220231
),
221232
TextButton(
222-
onPressed: () {
223-
// TODO: Implement clear chat history
224-
Navigator.pop(context);
225-
Utils.flushBarSuccessMessage(
226-
'Chat history cleared',
227-
context,
228-
);
233+
onPressed: () async {
234+
// Clear all chats
235+
await ref.read(chatProvider.notifier).clearAllChats();
236+
if (mounted) {
237+
Navigator.pop(context);
238+
Utils.flushBarSuccessMessage(
239+
'Chat history cleared',
240+
context,
241+
);
242+
}
229243
},
230244
child: const Text('Clear'),
231245
),
@@ -249,12 +263,21 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
249263
child: const Text('Cancel'),
250264
),
251265
TextButton(
252-
onPressed: () {
253-
Navigator.pushNamedAndRemoveUntil(
254-
context,
255-
RoutesName.login,
256-
(route) => false,
257-
);
266+
onPressed: () async {
267+
// Clear saved user data
268+
final currentUser = await SharedPrefsService.getSavedUsers().then((users) => users.firstOrNull);
269+
if (currentUser != null) {
270+
await SharedPrefsService.removeSavedUser(currentUser.email);
271+
}
272+
// Clear chat history
273+
await ref.read(chatProvider.notifier).clearAllChats();
274+
if (mounted) {
275+
Navigator.pushNamedAndRemoveUntil(
276+
context,
277+
RoutesName.login,
278+
(route) => false,
279+
);
280+
}
258281
},
259282
child: const Text('Logout'),
260283
),
@@ -326,15 +349,22 @@ class _SavedUsersSheet extends StatelessWidget {
326349
final user = snapshot.data![index];
327350
return ListTile(
328351
leading: const CircleAvatar(
329-
child: Icon(Icons.person),
352+
backgroundColor: AppTheme.primaryColor,
353+
child: Icon(Icons.person, color: Colors.white),
330354
),
331355
title: Text(user.email),
332356
subtitle: Text(user.name ?? ''),
333357
trailing: IconButton(
334358
icon: const Icon(Icons.delete),
335359
onPressed: () async {
336360
await SharedPrefsService.removeSavedUser(user.email);
337-
Navigator.pop(context);
361+
if (context.mounted) {
362+
Navigator.pop(context);
363+
Utils.flushBarSuccessMessage(
364+
'User removed',
365+
context,
366+
);
367+
}
338368
},
339369
),
340370
);

0 commit comments

Comments
 (0)