diff --git a/mobile/lib/controllers/chat.dart b/mobile/lib/controllers/chat.dart index e39196e..8893310 100644 --- a/mobile/lib/controllers/chat.dart +++ b/mobile/lib/controllers/chat.dart @@ -5,6 +5,9 @@ import '../models/conversation.dart'; import '../services/api.dart'; import '../services/ws.dart'; +import 'dart:async'; +import 'dart:isolate'; + class ChatController extends ChangeNotifier { final ApiService _api = ApiService(); final WebSocketService _ws = WebSocketService(); @@ -85,23 +88,18 @@ class ChatController extends ChangeNotifier { final res = await _api.getChatHistory(targetUid); dynamic targetData; - if (res.data is List) { - targetData = res.data; - } else if (res.data is Map) { - targetData = res.data['data'] ?? res.data['messages'] ?? res.data; - } - - if (targetData is List) { - activeChat = targetData + activeChat = await Isolate.run(() { + return targetList.reversed .map((json) => Message.fromJson(json)) - .toList() - .reversed .toList(); - } + }); _ws.sendReadReceipt(targetId: targetUid); _ws.sendRequestStatus(targetId: targetUid); - await loadInbox(); + + notifyListeners(); + + unawaited(loadInbox()); } catch (e) { debugPrint("Timeline tracking fail: $e"); } diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 4f6cde9..e6dd526 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -457,7 +457,7 @@ packages: source: hosted version: "0.2.2" intl: - dependency: transitive + dependency: "direct main" description: name: intl sha256: "1ca20c894b1717686a2319b8548763d812bc0aabdac580420a44c5178c57a867" diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 6bd337e..d637663 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -49,6 +49,7 @@ dependencies: flutter_secure_storage: ^10.3.1 dio: ^5.10.0 flutter_markdown_plus: ^1.0.7 + intl: ^0.20.3 launcher_name: default: "Elephant"