Files
.github
.vscode
android
assets
buildtools
ios
lib
database
models
pods
call.dart
call.freezed.dart
call.g.dart
chat_summary.dart
chat_summary.g.dart
config.dart
config.freezed.dart
config.g.dart
database.dart
message.dart
network.dart
theme.dart
userinfo.dart
websocket.dart
websocket.freezed.dart
websocket.g.dart
screens
services
widgets
firebase_options.dart
main.dart
route.dart
route.gr.dart
linux
macos
web
windows
.gitignore
.metadata
README.md
analysis_options.yaml
build.yaml
devtools_options.yaml
firebase.json
pubspec.lock
pubspec.yaml
App/lib/pods/chat_summary.dart
2025-05-24 01:34:20 +08:00

65 lines
1.6 KiB
Dart

import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:island/models/chat.dart';
import 'package:island/pods/network.dart';
part 'chat_summary.g.dart';
@riverpod
class ChatSummary extends _$ChatSummary {
@override
Future<Map<String, SnChatSummary>> build() async {
final client = ref.watch(apiClientProvider);
final resp = await client.get('/chat/summary');
final Map<String, dynamic> data = resp.data;
return data.map(
(key, value) => MapEntry(key, SnChatSummary.fromJson(value)),
);
}
Future<void> clearUnreadCount(String chatId) async {
state.whenData((summaries) {
final summary = summaries[chatId];
if (summary != null) {
state = AsyncData({
...summaries,
chatId: SnChatSummary(
unreadCount: 0,
lastMessage: summary.lastMessage,
),
});
}
});
}
void updateLastMessage(String chatId, SnChatMessage message) {
state.whenData((summaries) {
final summary = summaries[chatId];
if (summary != null) {
state = AsyncData({
...summaries,
chatId: SnChatSummary(
unreadCount: summary.unreadCount + 1,
lastMessage: message,
),
});
}
});
}
void incrementUnreadCount(String chatId) {
state.whenData((summaries) {
final summary = summaries[chatId];
if (summary != null) {
state = AsyncData({
...summaries,
chatId: SnChatSummary(
unreadCount: summary.unreadCount + 1,
lastMessage: summary.lastMessage,
),
});
}
});
}
}