🐛 Dozens of bug fixes
This commit is contained in:
@@ -26,6 +26,7 @@ import 'package:relative_time/relative_time.dart';
|
|||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
|
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
|
||||||
import 'package:flutter_native_splash/flutter_native_splash.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:talker_riverpod_logger/talker_riverpod_logger.dart';
|
||||||
import 'package:url_launcher/url_launcher_string.dart';
|
import 'package:url_launcher/url_launcher_string.dart';
|
||||||
import 'package:window_manager/window_manager.dart';
|
import 'package:window_manager/window_manager.dart';
|
||||||
@@ -281,9 +282,15 @@ class IslandApp extends HookConsumerWidget {
|
|||||||
key: globalOverlay,
|
key: globalOverlay,
|
||||||
initialEntries: [
|
initialEntries: [
|
||||||
OverlayEntry(
|
OverlayEntry(
|
||||||
builder:
|
builder: (_) {
|
||||||
(_) =>
|
return TalkerWrapper(
|
||||||
WindowScaffold(child: child ?? const SizedBox.shrink()),
|
talker: talker,
|
||||||
|
options: const TalkerWrapperOptions(enableErrorAlerts: true),
|
||||||
|
child: WindowScaffold(
|
||||||
|
child: child ?? const SizedBox.shrink(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import "dart:async";
|
import "dart:async";
|
||||||
import "dart:convert";
|
import "dart:convert";
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:island/models/chat.dart";
|
import "package:island/models/chat.dart";
|
||||||
import "package:island/pods/lifecycle.dart";
|
import "package:island/pods/lifecycle.dart";
|
||||||
import "package:island/pods/chat/messages_notifier.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';
|
part 'chat_subscribe.g.dart';
|
||||||
|
|
||||||
|
final currentSubscribedChatIdProvider = StateProvider<String?>((ref) => null);
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
||||||
late final String _roomId;
|
late final String _roomId;
|
||||||
@@ -55,6 +58,10 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Future.microtask(
|
||||||
|
() => ref.read(currentSubscribedChatIdProvider.notifier).state = roomId,
|
||||||
|
);
|
||||||
|
|
||||||
// Send initial read receipt
|
// Send initial read receipt
|
||||||
sendReadReceipt();
|
sendReadReceipt();
|
||||||
|
|
||||||
@@ -123,6 +130,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
|
|
||||||
// Cleanup on dispose
|
// Cleanup on dispose
|
||||||
ref.onDispose(() {
|
ref.onDispose(() {
|
||||||
|
ref.read(currentSubscribedChatIdProvider.notifier).state = null;
|
||||||
wsState.sendMessage(
|
wsState.sendMessage(
|
||||||
jsonEncode(
|
jsonEncode(
|
||||||
WebSocketPacket(
|
WebSocketPacket(
|
||||||
|
@@ -2,6 +2,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|||||||
import 'package:island/models/chat.dart';
|
import 'package:island/models/chat.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/pods/websocket.dart';
|
import 'package:island/pods/websocket.dart';
|
||||||
|
import 'package:island/pods/chat/chat_subscribe.dart';
|
||||||
|
|
||||||
part 'chat_summary.g.dart';
|
part 'chat_summary.g.dart';
|
||||||
|
|
||||||
@@ -55,10 +56,12 @@ class ChatSummary extends _$ChatSummary {
|
|||||||
state.whenData((summaries) {
|
state.whenData((summaries) {
|
||||||
final summary = summaries[chatId];
|
final summary = summaries[chatId];
|
||||||
if (summary != null) {
|
if (summary != null) {
|
||||||
|
final currentSubscribed = ref.read(currentSubscribedChatIdProvider);
|
||||||
|
final increment = (chatId != currentSubscribed) ? 1 : 0;
|
||||||
state = AsyncData({
|
state = AsyncData({
|
||||||
...summaries,
|
...summaries,
|
||||||
chatId: SnChatSummary(
|
chatId: SnChatSummary(
|
||||||
unreadCount: summary.unreadCount + 1,
|
unreadCount: summary.unreadCount + increment,
|
||||||
lastMessage: message,
|
lastMessage: message,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
@@ -102,9 +102,10 @@ final apiClientProvider = Provider<Dio>((ref) {
|
|||||||
TalkerDioLogger(
|
TalkerDioLogger(
|
||||||
talker: talker,
|
talker: talker,
|
||||||
settings: const TalkerDioLoggerSettings(
|
settings: const TalkerDioLoggerSettings(
|
||||||
printRequestHeaders: true,
|
printRequestHeaders: false,
|
||||||
printResponseHeaders: true,
|
printResponseHeaders: false,
|
||||||
printResponseMessage: true,
|
printResponseMessage: false,
|
||||||
|
printRequestData: false,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
Reference in New Issue
Block a user