Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion apps/client/lib/src/screens/group_info_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import 'dart:convert';

import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,11 @@ extension _InviteSection on _GroupInfoScreenState {
if (response.statusCode == 201) {
final data = jsonDecode(response.body) as Map<String, dynamic>;
final url = data['url'] as String? ?? '';
await Clipboard.setData(ClipboardData(text: url));
if (mounted) {
ToastService.show(
await copyToClipboard(
context,
'Invite link copied to clipboard',
type: ToastType.success,
url,
successMessage: 'Invite link copied to clipboard',
);
}
} else {
Expand Down
23 changes: 10 additions & 13 deletions apps/client/lib/src/screens/settings/about_section.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
Expand All @@ -15,6 +14,7 @@ import '../../providers/crypto_provider.dart';
import '../../providers/server_url_provider.dart';
import '../../providers/update_provider.dart';
import '../../providers/websocket_provider.dart';
import '../../services/clipboard_service.dart';
import '../../services/debug_log_service.dart';
import '../../services/message_cache.dart';
import '../../services/secure_key_store.dart';
Expand Down Expand Up @@ -765,14 +765,12 @@ class _DebugLogsSubpageState extends State<_DebugLogsSubpage> {
};
buffer.writeln('$h:$m:$s [$level] ${e.source}: ${e.message}');
}
Clipboard.setData(ClipboardData(text: buffer.toString()));
if (mounted) {
ToastService.show(
context,
'${entries.length} log entries copied to clipboard',
type: ToastType.success,
);
}
if (!mounted) return;
copyToClipboard(
context,
buffer.toString(),
successMessage: '${entries.length} log entries copied to clipboard',
);
}

void _onLogsChanged() {
Expand Down Expand Up @@ -916,11 +914,10 @@ class _DebugLogEntryTileState extends State<_DebugLogEntryTile> {
LogLevel.fatal => 'FTL',
};
final text = '$h:$m:$s [$level] ${entry.source}: ${entry.message}';
Clipboard.setData(ClipboardData(text: text));
ToastService.show(
copyToClipboard(
context,
'Log entry copied to clipboard',
type: ToastType.success,
text,
successMessage: 'Log entry copied to clipboard',
);
}

Expand Down
15 changes: 7 additions & 8 deletions apps/client/lib/src/screens/settings/account_section.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:qr_flutter/qr_flutter.dart';

import '../../providers/auth_provider.dart';
import '../../providers/server_url_provider.dart';
import '../../services/clipboard_service.dart';
import '../../services/toast_service.dart';
import '../../services/upload_client.dart';
import '../../theme/echo_theme.dart';
Expand Down Expand Up @@ -340,11 +341,10 @@ class _AccountSectionState extends ConsumerState<AccountSection> {
if (username.isEmpty) return;
final link =
'https://echo-messenger.us/#/u/${Uri.encodeComponent(username)}';
Clipboard.setData(ClipboardData(text: link));
ToastService.show(
copyToClipboard(
context,
'Invite link copied to clipboard',
type: ToastType.success,
link,
successMessage: 'Invite link copied to clipboard',
);
}

Expand Down Expand Up @@ -409,11 +409,10 @@ class _AccountSectionState extends ConsumerState<AccountSection> {
const SizedBox(height: 12),
OutlinedButton.icon(
onPressed: () {
Clipboard.setData(ClipboardData(text: inviteLink));
ToastService.show(
copyToClipboard(
dialogContext,
'Invite link copied to clipboard',
type: ToastType.success,
inviteLink,
successMessage: 'Invite link copied to clipboard',
);
},
icon: const Icon(Icons.copy, size: 16),
Expand Down
11 changes: 4 additions & 7 deletions apps/client/lib/src/widgets/connection_status_badge.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

import '../providers/server_url_provider.dart';
import '../providers/websocket_provider.dart';
import '../services/toast_service.dart';
import '../services/clipboard_service.dart';
import '../theme/echo_theme.dart';
import '../version.dart';
import 'echo_bottom_sheet.dart';
Expand Down Expand Up @@ -461,12 +460,10 @@ class _ConnectionStatusPopoverState
serverUrl: serverUrl,
platform: Theme.of(context).platform,
);
await Clipboard.setData(ClipboardData(text: text));
if (!context.mounted) return;
ToastService.show(
await copyToClipboard(
context,
'Diagnostics copied',
type: ToastType.success,
text,
successMessage: 'Diagnostics copied',
);
},
)
Expand Down
13 changes: 5 additions & 8 deletions apps/client/lib/src/widgets/message_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import 'package:photo_manager/photo_manager.dart' show PhotoManager;

import '../models/chat_message.dart';
import '../providers/theme_provider.dart' show MessageLayout, UIDensity;
import '../services/clipboard_service.dart';
import '../services/message_cache.dart' show MessageCache;
import '../services/toast_service.dart';
import '../theme/echo_theme.dart';
Expand Down Expand Up @@ -1438,19 +1439,15 @@ class _MessageItemState extends State<MessageItem>

void _copyMessageText(ChatMessage msg, String? mediaUrl) {
final copyText = mediaUrl != null ? _resolveUrl(mediaUrl) : msg.content;
Clipboard.setData(ClipboardData(text: copyText));
if (!mounted) return;
ToastService.show(
copyToClipboard(
context,
mediaUrl != null ? 'Link copied' : 'Copied to clipboard',
type: ToastType.success,
copyText,
successMessage: mediaUrl != null ? 'Link copied' : 'Copied to clipboard',
);
}

void _copyMessageId(ChatMessage msg) {
Clipboard.setData(ClipboardData(text: msg.id));
if (!mounted) return;
ToastService.show(context, 'Message ID copied', type: ToastType.success);
copyToClipboard(context, msg.id, successMessage: 'Message ID copied');
}

/// Compose a single composite semantic label for the message bubble so
Expand Down
Loading