diff --git a/lib/main.dart b/lib/main.dart index aafe9fe3..46c4c372 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -26,6 +26,7 @@ import 'package:relative_time/relative_time.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:image_picker_platform_interface/image_picker_platform_interface.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; +import 'package:talker_flutter/talker_flutter.dart'; import 'package:talker_riverpod_logger/talker_riverpod_logger.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:window_manager/window_manager.dart'; @@ -281,9 +282,15 @@ class IslandApp extends HookConsumerWidget { key: globalOverlay, initialEntries: [ OverlayEntry( - builder: - (_) => - WindowScaffold(child: child ?? const SizedBox.shrink()), + builder: (_) { + return TalkerWrapper( + talker: talker, + options: const TalkerWrapperOptions(enableErrorAlerts: true), + child: WindowScaffold( + child: child ?? const SizedBox.shrink(), + ), + ); + }, ), ], ); diff --git a/lib/pods/chat/chat_subscribe.dart b/lib/pods/chat/chat_subscribe.dart index 70868d7b..a373e2fc 100644 --- a/lib/pods/chat/chat_subscribe.dart +++ b/lib/pods/chat/chat_subscribe.dart @@ -1,6 +1,7 @@ import "dart:async"; import "dart:convert"; import "package:flutter/material.dart"; +import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:island/models/chat.dart"; import "package:island/pods/lifecycle.dart"; import "package:island/pods/chat/messages_notifier.dart"; @@ -11,6 +12,8 @@ import "package:riverpod_annotation/riverpod_annotation.dart"; part 'chat_subscribe.g.dart'; +final currentSubscribedChatIdProvider = StateProvider((ref) => null); + @riverpod class ChatSubscribeNotifier extends _$ChatSubscribeNotifier { late final String _roomId; @@ -55,6 +58,10 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier { ), ); + Future.microtask( + () => ref.read(currentSubscribedChatIdProvider.notifier).state = roomId, + ); + // Send initial read receipt sendReadReceipt(); @@ -123,6 +130,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier { // Cleanup on dispose ref.onDispose(() { + ref.read(currentSubscribedChatIdProvider.notifier).state = null; wsState.sendMessage( jsonEncode( WebSocketPacket( diff --git a/lib/pods/chat/chat_summary.dart b/lib/pods/chat/chat_summary.dart index ac810417..a101ed44 100644 --- a/lib/pods/chat/chat_summary.dart +++ b/lib/pods/chat/chat_summary.dart @@ -2,6 +2,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:island/models/chat.dart'; import 'package:island/pods/network.dart'; import 'package:island/pods/websocket.dart'; +import 'package:island/pods/chat/chat_subscribe.dart'; part 'chat_summary.g.dart'; @@ -55,10 +56,12 @@ class ChatSummary extends _$ChatSummary { state.whenData((summaries) { final summary = summaries[chatId]; if (summary != null) { + final currentSubscribed = ref.read(currentSubscribedChatIdProvider); + final increment = (chatId != currentSubscribed) ? 1 : 0; state = AsyncData({ ...summaries, chatId: SnChatSummary( - unreadCount: summary.unreadCount + 1, + unreadCount: summary.unreadCount + increment, lastMessage: message, ), }); diff --git a/lib/pods/network.dart b/lib/pods/network.dart index 0afbd9c6..2d348992 100644 --- a/lib/pods/network.dart +++ b/lib/pods/network.dart @@ -102,9 +102,10 @@ final apiClientProvider = Provider((ref) { TalkerDioLogger( talker: talker, settings: const TalkerDioLoggerSettings( - printRequestHeaders: true, - printResponseHeaders: true, - printResponseMessage: true, + printRequestHeaders: false, + printResponseHeaders: false, + printResponseMessage: false, + printRequestData: false, ), ), ]);