diff --git a/lib/backend/api.dart b/lib/backend/api.dart index 72f987c..6a84839 100644 --- a/lib/backend/api.dart +++ b/lib/backend/api.dart @@ -14,7 +14,6 @@ import '../core/utils/logger.dart'; import 'package:device_info_plus/device_info_plus.dart'; import 'dart:io'; import 'package:timezone/data/latest_all.dart' as tz; -import 'package:timezone/timezone.dart' as tz; import 'package:flutter_timezone/flutter_timezone.dart'; enum SessionState { disconnected, connecting, connected, online } @@ -279,7 +278,7 @@ class Api { final delaySec = (2 * (1 << _reconnectAttempts)).clamp(2, 30); _reconnectAttempts++; - logger.i('Реконнект через ${delaySec}с (попытка $_reconnectAttempts)'); + logger.i('Реконнект через $delaySecс (попытка $_reconnectAttempts)'); _reconnectTimer?.cancel(); _reconnectTimer = Timer(Duration(seconds: delaySec), connect); diff --git a/lib/backend/modules/calls.dart b/lib/backend/modules/calls.dart index 2182af0..4593e48 100644 --- a/lib/backend/modules/calls.dart +++ b/lib/backend/modules/calls.dart @@ -1,5 +1,4 @@ // Backend module for parsing calls from Komet platform -import '../../core/storage/app_database.dart'; import 'contacts.dart'; import '../api.dart'; import '../../core/protocol/opcode_map.dart'; @@ -57,10 +56,6 @@ class CallsModule { final recentContacts = await ContactsModule.getContacts(accountId); final contactsMap = {for (final c in recentContacts) c.id: c}; - print('DEBUG: Loaded ${recentContacts.length} contacts'); - print('DEBUG: Contact IDs: ${contactsMap.keys.toList()}'); - print('DEBUG: Current user ID: $currentUserId'); - final List extractedCalls = []; for (final item in history.whereType()) { @@ -90,13 +85,7 @@ class CallsModule { peerId = senderId; } - print( - 'DEBUG: Call - isOutgoing: $isOutgoing, peerId: $peerId, senderId: $senderId', - ); final contact = contactsMap[peerId]; - print( - 'DEBUG: Contact found: ${contact != null}, firstName: "${contact?.firstName}", lastName: "${contact?.lastName}"', - ); final status = _parseCallStatus(callAttach, isOutgoing); final time = (msg['time'] as int?) ?? 0; final msgId = @@ -107,8 +96,6 @@ class CallsModule { ? '${contact!.firstName} ${contact.lastName ?? ''}'.trim() : 'Неизвестный'; - print('DEBUG: Creating CallLogEntry with name: "$name"'); - extractedCalls.add( CallLogEntry( id: msgId, @@ -139,8 +126,9 @@ class CallsModule { if (hangupType == 'CANCELED' || hangupType == 'REJECTED' || hangupType == 'MISSED' || - duration == 0) + duration == 0) { return CallStatus.missed; + } return CallStatus.incoming; } } diff --git a/lib/core/protocol/opcode_map.dart b/lib/core/protocol/opcode_map.dart index 75cc983..edc40e5 100644 --- a/lib/core/protocol/opcode_map.dart +++ b/lib/core/protocol/opcode_map.dart @@ -2,7 +2,7 @@ /// /// Naming follows the server-side convention. /// Use [Opcode.name] to get a human-readable label for logging. -/// +/// /// файл писла нейронка (я че ебанутый чтоль чтобы вручную хуярить опкоды и их значения) abstract class Opcode { // ── Session ──────────────────────────────────────────────────────── @@ -124,7 +124,7 @@ abstract class Opcode { // ── Sessions ─────────────────────────────────────────────────────── static const int sessionsInfo = 96; // Запрос активных сессий static const int sessionsClose = 97; // Закрытие всех сессий - static const int phoneBind_request = 98; // Запрос привязки телефона + static const int phoneBindRequest = 98; // Запрос привязки телефона static const int phoneBindConfirm = 99; // Подтверждение привязки телефона // ── Bots ─────────────────────────────────────────────────────────── @@ -297,7 +297,7 @@ abstract class Opcode { audioPlay: 'AUDIO_PLAY', sessionsInfo: 'SESSIONS_INFO', sessionsClose: 'SESSIONS_CLOSE', - phoneBind_request: 'PHONE_BIND_REQUEST', + phoneBindRequest: 'PHONE_BIND_REQUEST', phoneBindConfirm: 'PHONE_BIND_CONFIRM', chatComplain: 'CHAT_COMPLAIN', msgSendCallback: 'MSG_SEND_CALLBACK', diff --git a/lib/core/protocol/packet.dart b/lib/core/protocol/packet.dart index 8bd0bc4..7a0a320 100644 --- a/lib/core/protocol/packet.dart +++ b/lib/core/protocol/packet.dart @@ -137,9 +137,7 @@ Future unpackPacket(Uint8List packet) async { _maxDecompressedSize, ); } catch (e) { - // В изоляте нельзя использовать логгер, который пишет в терминал через зависимости Flutter, - // но простой print или throw сработает - print("LZ4 decompression error: $e"); + throw Exception("LZ4 decompression error: $e"); } } } @@ -148,7 +146,7 @@ Future unpackPacket(Uint8List packet) async { payload = msgpack.deserialize(payloadBytes); } catch (e) { if (payloadBytes.isNotEmpty) { - print("MsgPack deserialization error: $e"); + throw Exception("MsgPack deserialization error: $e"); } } } diff --git a/lib/core/storage/app_database.dart b/lib/core/storage/app_database.dart index 97b80a9..ccd6191 100644 --- a/lib/core/storage/app_database.dart +++ b/lib/core/storage/app_database.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:path/path.dart'; -import 'package:sqflite/sqflite.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; class ProfileData { diff --git a/lib/frontend/screens/calls/calls_tab.dart b/lib/frontend/screens/calls/calls_tab.dart index 241bc6a..09edce7 100644 --- a/lib/frontend/screens/calls/calls_tab.dart +++ b/lib/frontend/screens/calls/calls_tab.dart @@ -32,12 +32,6 @@ class _CallsTabState extends State { final callsModule = CallsModule(api); final calls = await callsModule.fetchHistory(p.id, p.id); - print('DEBUG UI: Received ${calls.length} calls'); - for (final call in calls.take(3)) { - print('DEBUG UI: Call name="${call.name}", peerId=${call.peerId}'); - } - - // Группируем подряд идущие звонки одному и тому же абоненту в один день с одним и тем же статусом final List grouped = []; for (final call in calls) { if (grouped.isNotEmpty && @@ -169,7 +163,7 @@ class _CallsTabState extends State { ? Image.network( call.avatarUrl!, fit: BoxFit.cover, - errorBuilder: (context, _, ___) => + errorBuilder: (context, error, stackTrace) => _buildPlaceholderAvatar(cs, call.name), ) : _buildPlaceholderAvatar(cs, call.name), diff --git a/lib/frontend/screens/chats/chat_list_screen.dart b/lib/frontend/screens/chats/chat_list_screen.dart index 321f739..1db8a08 100644 --- a/lib/frontend/screens/chats/chat_list_screen.dart +++ b/lib/frontend/screens/chats/chat_list_screen.dart @@ -4,7 +4,6 @@ import 'package:material_symbols_icons/symbols.dart'; import 'dart:math'; import 'dart:ui' as ui; import 'package:flutter/gestures.dart'; -import 'package:flutter/rendering.dart'; import 'chat_screen.dart'; import '../calls/calls_tab.dart'; @@ -25,8 +24,8 @@ class _StoriesScrollPhysics extends BouncingScrollPhysics { const _StoriesScrollPhysics({ required this.blockPositive, required this.allowPullOverscrollTop, - ScrollPhysics? parent, - }) : super(parent: parent); + super.parent, + }); @override _StoriesScrollPhysics applyTo(ScrollPhysics? ancestor) { @@ -382,10 +381,10 @@ class _ChatListScreenState extends State return _folderChatScrollControllers.first; } final p = _folderPageController.page; - final i = (p != null - ? p.round() - : _selectedFolderIndex) - .clamp(0, _folderChatScrollControllers.length - 1); + final i = (p != null ? p.round() : _selectedFolderIndex).clamp( + 0, + _folderChatScrollControllers.length - 1, + ); return _folderChatScrollControllers[i]; } @@ -795,10 +794,10 @@ class _ChatListScreenState extends State vertical: 8, ), decoration: BoxDecoration( - color: cs.errorContainer.withOpacity(0.3), + color: cs.errorContainer.withValues(alpha: 0.3), borderRadius: BorderRadius.circular(12), border: Border.all( - color: cs.error.withOpacity(0.2), + color: cs.error.withValues(alpha: 0.2), ), ), child: Row( @@ -933,27 +932,24 @@ class _ChatListScreenState extends State ), slivers: [ SliverList( - delegate: SliverChildBuilderDelegate( - (context, index) { - if (_isInitialLoading) { - return _buildChatShimmer(); - } - final chat = chats[index]; - return _buildChatItem( - chat.id.toString(), - chat.title ?? 'Чат', - chat.lastMsgText ?? '', - _formatTime(chat.lastMsgTime), - (chat.iconUrl != null && chat.iconUrl!.isNotEmpty) - ? chat.iconUrl! - : '', - isOnline: chat.isOnline, - unreadCount: chat.unreadCount, - isMuted: chat.dontDisturbUntil > 0, - ); - }, - childCount: _isInitialLoading ? 10 : chats.length, - ), + delegate: SliverChildBuilderDelegate((context, index) { + if (_isInitialLoading) { + return _buildChatShimmer(); + } + final chat = chats[index]; + return _buildChatItem( + chat.id.toString(), + chat.title ?? 'Чат', + chat.lastMsgText ?? '', + _formatTime(chat.lastMsgTime), + (chat.iconUrl != null && chat.iconUrl!.isNotEmpty) + ? chat.iconUrl! + : '', + isOnline: chat.isOnline, + unreadCount: chat.unreadCount, + isMuted: chat.dontDisturbUntil > 0, + ); + }, childCount: _isInitialLoading ? 10 : chats.length), ), SliverPadding( padding: EdgeInsets.only( @@ -1371,7 +1367,7 @@ class _ChatListScreenState extends State color: cs.surface, boxShadow: [ BoxShadow( - color: Colors.black.withOpacity(0.1), + color: Colors.black.withValues(alpha: 0.1), blurRadius: 10, offset: const Offset(0, 2), ), @@ -1575,7 +1571,9 @@ class _ChatListScreenState extends State onLongPress: () => _toggleSelection(id), child: AnimatedContainer( duration: const Duration(milliseconds: 200), - color: isSelected ? cs.primary.withOpacity(0.08) : Colors.transparent, + color: isSelected + ? cs.primary.withValues(alpha: 0.08) + : Colors.transparent, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: Row( diff --git a/lib/frontend/screens/contacts/contacts_tab.dart b/lib/frontend/screens/contacts/contacts_tab.dart index fffa416..3d86580 100644 --- a/lib/frontend/screens/contacts/contacts_tab.dart +++ b/lib/frontend/screens/contacts/contacts_tab.dart @@ -87,7 +87,7 @@ class _ContactsTabState extends State { ? Image.network( contact.baseUrl!, fit: BoxFit.cover, - errorBuilder: (context, _, ___) => + errorBuilder: (context, error, stackTrace) => _buildPlaceholderAvatar(cs, nameToDisplay), ) : _buildPlaceholderAvatar(cs, nameToDisplay), diff --git a/lib/frontend/screens/profile/settings_tab.dart b/lib/frontend/screens/profile/settings_tab.dart index 1f6a0ba..6efef04 100644 --- a/lib/frontend/screens/profile/settings_tab.dart +++ b/lib/frontend/screens/profile/settings_tab.dart @@ -151,7 +151,7 @@ class _SettingsTabState extends State { ? Image.network( _profile!.baseUrl!, fit: BoxFit.cover, - errorBuilder: (context, _, __) => + errorBuilder: (context, error, stackTrace) => _buildPlaceholderAvatar(cs, name), ) : _buildPlaceholderAvatar(cs, name), diff --git a/lib/main.dart b/lib/main.dart index e95dcfa..979aec2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -74,7 +74,7 @@ class KometAppState extends State { final navState = KometApp.navigatorKey.currentState; if (navState != null) { final overlayContext = navState.overlay?.context; - if (overlayContext != null) { + if (overlayContext != null && overlayContext.mounted) { showCustomNotification(overlayContext, e.message); }