diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml
index 48d4975f..81669419 100644
--- a/.github/workflows/integrate.yaml
+++ b/.github/workflows/integrate.yaml
@@ -23,8 +23,6 @@ jobs:
run: git diff --exit-code pubspec.lock
- name: Check formatting
run: dart format lib/ test/ --set-exit-if-changed
- - name: Check import formatting
- run: dart run import_sorter:main --no-comments --exit-if-changed
- name: Check license compliance
run: dart run license_checker check-licenses -c licenses.yaml --problematic
- run: flutter analyze
@@ -107,7 +105,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- name: Install dependencies
- run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y
+ run: sudo apt-get update && sudo apt-get install git wget curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
- run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV
- name: Install Flutter
run: |
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 56c3800c..5c94ada7 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -114,7 +114,7 @@ jobs:
steps:
- uses: actions/checkout@v6
- name: Install dependencies
- run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libwebkit2gtk-4.1-dev -y
+ run: sudo apt-get update && sudo apt-get install curl clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev liblzma-dev libjsoncpp-dev cmake-data libsecret-1-dev libsecret-1-0 librhash0 libssl-dev libwebkit2gtk-4.1-dev -y
- run: echo "FLUTTER_VERSION=$(yq '.environment.flutter' < .tool_versions.yaml)" >> $GITHUB_ENV
- name: Install Flutter
run: |
diff --git a/.tool_versions.yaml b/.tool_versions.yaml
index 65c36746..a06ba450 100644
--- a/.tool_versions.yaml
+++ b/.tool_versions.yaml
@@ -1,2 +1,2 @@
environment:
- flutter: 3.41.4
\ No newline at end of file
+ flutter: 3.41.5 # Keep in sync with snap/snapcraft.yaml
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index d7e23866..79ce38d3 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,10 +1,7 @@
{
- "emeraldwalk.runonsave": {
- "commands": [
- {
- "match": "\\.dart$",
- "cmd": "dart run import_sorter:main --no-comments ${fileBasename}"
- }
+ "[dart]": {
+ "editor.codeActionsOnSave": [
+ "source.organizeImports"
]
}
}
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6c192cc4..b1321195 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -11,9 +11,8 @@ To improve the process please make sure that you read the following guidelines c
4. Every Pull Request should change only one thing. For bigger changes it is often better to split them up in multiple Pull Requests.
5. [Sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits).
6. Format the commit message as [Conventional Commits](https://www.conventionalcommits.org).
-7. Format (`flutter format lib`) and sort impots (`dart run import_sorter:main --no-comments`) in all code files.
-8. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined.
-9. Prefer simple and easy to maintain solutions over complexity and fancy ones.
+7. For bigger or complex changes (more than a couple of code lines) write an issue or refer to an existing issue and ask for approval from the maintainers (@krille-chan) **before** starting to implement it. This way you reduce the risk that your Pull Request get's declined.
+8. Prefer simple and easy to maintain solutions over complexity and fancy ones.
# Code Style
diff --git a/analysis_options.yaml b/analysis_options.yaml
index 0b19afcf..05852ec2 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -2,6 +2,7 @@ include: package:flutter_lints/flutter.yaml
linter:
rules:
+ - directives_ordering
- avoid_print
- constant_identifier_names
- prefer_final_locals
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 12d88e56..81733047 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -106,7 +106,7 @@
-
+
diff --git a/integration_test/flows/auth_flows.dart b/integration_test/flows/auth_flows.dart
index e16fd686..d5aebf91 100644
--- a/integration_test/flows/auth_flows.dart
+++ b/integration_test/flows/auth_flows.dart
@@ -1,9 +1,13 @@
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
import '../data/environment_constants.dart';
import '../utils/fluffy_chat_tester.dart';
+Future finalLogout(WidgetTester widgetTester) =>
+ widgetTester.startFluffyChatTest().then((tester) => tester.logout());
+
extension AuthFlows on FluffyChatTester {
Future login() async {
await waitFor('Sign in');
@@ -18,6 +22,7 @@ extension AuthFlows on FluffyChatTester {
}
Future logout() async {
+ await ensureLoggedIn();
await tapOn(Key('accounts_and_settings_buttons'));
await tapOn('Settings');
await scrollUntilVisible('Logout');
diff --git a/integration_test/flows/basic_messaging.dart b/integration_test/flows/basic_messaging.dart
index eb3e0944..c0c2547c 100644
--- a/integration_test/flows/basic_messaging.dart
+++ b/integration_test/flows/basic_messaging.dart
@@ -1,10 +1,9 @@
-import 'package:fluffychat/pages/chat_list/chat_list.dart';
-import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import '../utils/fluffy_chat_tester.dart';
import 'auth_flows.dart';
+import 'chat_flows.dart';
Future basicMessaging(WidgetTester widgetTester) => widgetTester
.startFluffyChatTest()
@@ -12,31 +11,13 @@ Future basicMessaging(WidgetTester widgetTester) => widgetTester
extension on FluffyChatTester {
Future _basicMessaging() async {
- final shouldLogout = await ensureLoggedIn();
+ await ensureLoggedIn();
+ await ensureGroupChatCreated();
- // Create a new group chat
- await tapOn(FloatingActionButton);
- await tapOn('Create group');
- await enterText(TextField, 'Test Group 01');
- await tapOn('Create a group and invite users');
- await waitFor('Invite contact');
- await goBack();
-
- // Send a message
+ await tapOn(ChatFlows.groupChatName);
const testMessage = 'Hello from integration test!';
await enterText(Key('chat_input_field'), testMessage);
await tapOn(Key('send_button'));
-
- // Ensure message is visible
await waitFor(testMessage);
-
- // Archive the chat
- await tapOn(ChatSettingsPopupMenu);
- await tapOn('Leave');
- await waitFor('Are you sure?');
- await tapOn('Leave');
- await waitFor(ChatList);
-
- if (shouldLogout) await logout();
}
}
diff --git a/integration_test/flows/chat_flows.dart b/integration_test/flows/chat_flows.dart
new file mode 100644
index 00000000..512a6af2
--- /dev/null
+++ b/integration_test/flows/chat_flows.dart
@@ -0,0 +1,35 @@
+import 'package:fluffychat/pages/chat_list/chat_list.dart';
+import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../utils/fluffy_chat_tester.dart';
+import 'auth_flows.dart';
+
+Future archiveChats(WidgetTester widgetTester) =>
+ widgetTester.startFluffyChatTest().then((tester) => tester._archiveChats());
+
+extension ChatFlows on FluffyChatTester {
+ static const String groupChatName = 'Test Group 01';
+
+ Future ensureGroupChatCreated() async {
+ if (await isVisible(groupChatName)) return;
+ await tapOn(FloatingActionButton);
+ await tapOn('Create group');
+ await enterText(TextField, groupChatName);
+ await tapOn('Create a group and invite users');
+ await waitFor('Invite contact');
+ await goBack();
+ await goBack();
+ }
+
+ Future _archiveChats() async {
+ await ensureLoggedIn();
+ await ensureGroupChatCreated();
+ await tapOn(ChatSettingsPopupMenu);
+ await tapOn('Leave');
+ await waitFor('Are you sure?');
+ await tapOn('Leave');
+ await waitFor(ChatList);
+ }
+}
diff --git a/integration_test/mobile_test.dart b/integration_test/mobile_test.dart
index fe10b949..8da68b0a 100644
--- a/integration_test/mobile_test.dart
+++ b/integration_test/mobile_test.dart
@@ -1,7 +1,9 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
+import 'flows/auth_flows.dart';
import 'flows/basic_messaging.dart';
+import 'flows/chat_flows.dart';
import 'flows/login_and_chat_backup.dart';
void main() {
@@ -10,5 +12,7 @@ void main() {
group('FluffyChat Integration Tests', () {
testWidgets('Login and logout flow', loginAndChatBackup);
testWidgets('Basic Messaging', basicMessaging);
+ testWidgets('Archive chats', archiveChats);
+ testWidgets('Final logout', finalLogout);
});
}
diff --git a/integration_test/utils/fluffy_chat_tester.dart b/integration_test/utils/fluffy_chat_tester.dart
index fe3f754a..03fa7da7 100644
--- a/integration_test/utils/fluffy_chat_tester.dart
+++ b/integration_test/utils/fluffy_chat_tester.dart
@@ -1,6 +1,6 @@
+import 'package:fluffychat/main.dart' as app;
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';
-import 'package:fluffychat/main.dart' as app;
extension type FluffyChatTester(WidgetTester tester) {
static int _printCounter = 1;
@@ -67,10 +67,7 @@ extension type FluffyChatTester(WidgetTester tester) {
await tester.pumpAndSettle();
}
- Future goBack() async {
- _print('🔙 Going a page back');
- await tester.pageBack();
- }
+ Future goBack() => tapOn(find.byTooltip('Back'));
Future enterText(Object object, String text, {int? index}) async {
final finder = await _ensureVisible(object, index: index);
diff --git a/lib/config/app_config.dart b/lib/config/app_config.dart
index 8eae9406..ad595036 100644
--- a/lib/config/app_config.dart
+++ b/lib/config/app_config.dart
@@ -31,6 +31,7 @@ abstract class AppConfig {
'https://fluffychat.im/faq/#how_do_i_get_stickers';
static const String appId = 'im.fluffychat.FluffyChat';
static const String appOpenUrlScheme = 'im.fluffychat';
+ static const String appSsoUrlScheme = 'im.fluffychat.auth';
static const String sourceCodeUrl =
'https://github.com/krille-chan/fluffychat';
diff --git a/lib/config/routes.dart b/lib/config/routes.dart
index 6ae9d3b6..c6c683eb 100644
--- a/lib/config/routes.dart
+++ b/lib/config/routes.dart
@@ -1,10 +1,5 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/archive/archive.dart';
import 'package:fluffychat/pages/bootstrap/bootstrap_dialog.dart';
@@ -39,6 +34,9 @@ import 'package:fluffychat/widgets/layouts/two_column_layout.dart';
import 'package:fluffychat/widgets/log_view.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/share_scaffold_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
abstract class AppRoutes {
static FutureOr loggedInRedirect(
diff --git a/lib/config/setting_keys.dart b/lib/config/setting_keys.dart
index 6cbc1127..ea4d66f5 100644
--- a/lib/config/setting_keys.dart
+++ b/lib/config/setting_keys.dart
@@ -1,14 +1,12 @@
import 'dart:convert';
-import 'package:flutter/foundation.dart';
-
import 'package:async/async.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:matrix/matrix_api_lite/utils/logs.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
-
enum AppSettings {
textMessageMaxLength('textMessageMaxLength', 16384),
audioRecordingNumChannels('audioRecordingNumChannels', 1),
@@ -40,6 +38,8 @@ enum AppSettings {
showPresences('chat.fluffy.show_presences', true),
displayNavigationRail('chat.fluffy.display_navigation_rail', false),
experimentalVoip('chat.fluffy.experimental_voip', false),
+ jitsiFeature('chat.fluffy.enable_jitsi', false),
+ jitsiDomain('chat.fluffy.jitsi_domain', 'meet.jit.si'),
shareKeysWith('chat.fluffy.share_keys_with_2', 'all'),
noEncryptionWarningShown(
'chat.fluffy.no_encryption_warning_shown',
diff --git a/lib/config/themes.dart b/lib/config/themes.dart
index 42d83dc9..a84d8219 100644
--- a/lib/config/themes.dart
+++ b/lib/config/themes.dart
@@ -1,9 +1,8 @@
+import 'package:fluffychat/config/app_config.dart';
+import 'package:fluffychat/config/setting_keys.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-import 'package:fluffychat/config/setting_keys.dart';
-import 'app_config.dart';
-
abstract class FluffyThemes {
static const double columnWidth = 380.0;
diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb
index 80d52545..1b7af928 100644
--- a/lib/l10n/intl_de.arb
+++ b/lib/l10n/intl_de.arb
@@ -1551,7 +1551,7 @@
"type": "String",
"placeholders": {}
},
- "skip": "Überspringe",
+ "skip": "Überspringen",
"@skip": {
"type": "String",
"placeholders": {}
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index cf52814c..febc7ce0 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -2794,5 +2794,13 @@
"iDoNotWantToSupport": "I do not want to support",
"iAlreadySupportFluffyChat": "I already support FluffyChat",
"setLowPriority": "Set low priority",
- "unsetLowPriority": "Unset low priority"
-}
+ "unsetLowPriority": "Unset low priority",
+ "removeCallFromChat": "Remove call from chat",
+ "removeCallFromChatDescription": "Do you want to remove the call from the chat for all members?",
+ "removeCallForEveryone": "Remove call for everyone",
+ "startVoiceCall": "Start voice call",
+ "startVideoCall": "Start video call",
+ "joinVoiceCall": "Join voice call",
+ "joinVideoCall": "Join video call",
+ "live": "Live"
+}
\ No newline at end of file
diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb
index 7357fe1c..33c9f309 100644
--- a/lib/l10n/intl_et.arb
+++ b/lib/l10n/intl_et.arb
@@ -2395,7 +2395,7 @@
"gallery": "Galerii",
"files": "Failid",
"swipeRightToLeftToReply": "Vastamiseks viipa paremalt vasakule",
- "alwaysUse24HourFormat": "false",
+ "alwaysUse24HourFormat": "väär",
"@alwaysUse24HourFormat": {
"description": "Set to true to always display time of day in 24 hour format."
},
@@ -2800,5 +2800,13 @@
"skipSupportingFluffyChat": "Jäta FluffyChati toetamine vahele",
"iDoNotWantToSupport": "Ma ei soovi toetada",
"setLowPriority": "Märgi vähetähtsaks",
- "unsetLowPriority": "Eemalda märkimine vähetähtsaks"
+ "unsetLowPriority": "Eemalda märkimine vähetähtsaks",
+ "removeCallFromChat": "Eemalda kõne vestlusest",
+ "removeCallFromChatDescription": "Kas sa soovid antud kõne selle vestluse kõikidelt kasutajatelt eemaldada?",
+ "removeCallForEveryone": "Eemalda kõne kõigilt",
+ "startVoiceCall": "Algata häälkõne",
+ "startVideoCall": "Algata videokõne",
+ "joinVoiceCall": "Liitu häälkõnega",
+ "joinVideoCall": "Liitu videokõnega",
+ "live": "Reaalajas"
}
diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb
index 11ab1f12..6639f37c 100644
--- a/lib/l10n/intl_fa.arb
+++ b/lib/l10n/intl_fa.arb
@@ -36,7 +36,7 @@
"type": "String",
"placeholders": {}
},
- "allChats": "همه گپها",
+ "allChats": "همه چت ها",
"@allChats": {
"type": "String",
"placeholders": {}
@@ -121,7 +121,7 @@
"type": "String",
"placeholders": {}
},
- "banFromChat": "محروم کردن از گپ",
+ "banFromChat": "بن کردن از چت",
"@banFromChat": {
"type": "String",
"placeholders": {}
@@ -135,7 +135,7 @@
}
}
},
- "areGuestsAllowedToJoin": "آیا مهمانان اجازه پیوستن دارند",
+ "areGuestsAllowedToJoin": "آیا مهمانان اجازه پیوستن دارند؟",
"@areGuestsAllowedToJoin": {
"type": "String",
"placeholders": {}
@@ -151,7 +151,7 @@
"type": "String",
"placeholders": {}
},
- "changedTheChatDescriptionTo": "{username} توضیح گپ را به '{description}' تغییر داد",
+ "changedTheChatDescriptionTo": "{username} توضیح چت را به '{description}' تغییر داد",
"@changedTheChatDescriptionTo": {
"type": "String",
"placeholders": {
@@ -163,7 +163,7 @@
}
}
},
- "changedTheChatPermissions": "{username} دسترسیهای گپ را تغییر داد",
+ "changedTheChatPermissions": "{username} دسترسیهای چت را تغییر داد",
"@changedTheChatPermissions": {
"type": "String",
"placeholders": {
@@ -172,7 +172,7 @@
}
}
},
- "changedTheChatNameTo": "{username} نام گپ را به '{chatname}' تغییر داد",
+ "changedTheChatNameTo": "{username} نام چت را به '{chatname}' تغییر داد",
"@changedTheChatNameTo": {
"type": "String",
"placeholders": {
@@ -232,7 +232,7 @@
}
}
},
- "changedTheChatAvatar": "{username} نماد گپ را تغییر داد",
+ "changedTheChatAvatar": "{username} نماد چت را تغییر داد",
"@changedTheChatAvatar": {
"type": "String",
"placeholders": {
@@ -259,7 +259,7 @@
}
}
},
- "chats": "گپها",
+ "chats": "چت ها",
"@chats": {
"type": "String",
"placeholders": {}
@@ -362,7 +362,7 @@
"type": "String",
"placeholders": {}
},
- "yourChatBackupHasBeenSetUp": "پشتیبان گپ شما تنظیم شد.",
+ "yourChatBackupHasBeenSetUp": "پشتیبان چت شما تنظیم شد.",
"changeTheme": "تغییر پوسته",
"@changeTheme": {
"type": "String",
@@ -384,12 +384,12 @@
"placeholders": {}
},
"clearArchive": "پاک کردن بایگانی",
- "commandHint_create": "ساختن یک گپ گروهی خالی\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید",
+ "commandHint_create": "ساختن یک چت گروهی خالی\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید",
"@commandHint_create": {
"type": "String",
"description": "Usage hint for the command /create"
},
- "commandHint_dm": "شروع یک گپ مستقیم\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید",
+ "commandHint_dm": "شروع یک چت مستقیم\nاز «--no-encryption» برای غیرفعال کردن رمزنگاری استفاده کنید",
"@commandHint_dm": {
"type": "String",
"description": "Usage hint for the command /dm"
@@ -409,7 +409,7 @@
}
}
},
- "chatDetails": "جزئیات گپ",
+ "chatDetails": "جزئیات چت",
"@chatDetails": {
"type": "String",
"placeholders": {}
@@ -490,12 +490,12 @@
"type": "String",
"placeholders": {}
},
- "chat": "گپ",
+ "chat": "چت",
"@chat": {
"type": "String",
"placeholders": {}
},
- "chatBackup": "پشتیبان گپ",
+ "chatBackup": "پشتیبان چت",
"@chatBackup": {
"type": "String",
"placeholders": {}
@@ -765,7 +765,7 @@
"type": "String",
"placeholders": {}
},
- "emptyChat": "گپ خالی",
+ "emptyChat": "چت خالی",
"@emptyChat": {
"type": "String",
"placeholders": {}
@@ -775,7 +775,7 @@
"type": "String",
"placeholders": {}
},
- "createdTheChat": "💬 {username} گپ را ساخت",
+ "createdTheChat": "💬 {username} چت را ساخت",
"@createdTheChat": {
"type": "String",
"placeholders": {
@@ -789,7 +789,7 @@
"type": "String",
"placeholders": {}
},
- "directChats": "گپهای مستقیم",
+ "directChats": "چت های مستقیم",
"@directChats": {
"type": "String",
"placeholders": {}
@@ -848,7 +848,7 @@
"type": "String",
"placeholders": {}
},
- "configureChat": "پیکربندی گپ",
+ "configureChat": "تنظیمات چت",
"@configureChat": {
"type": "String",
"placeholders": {}
@@ -1091,12 +1091,12 @@
"type": "String",
"placeholders": {}
},
- "muteChat": "بیصدا کردن گپ",
+ "muteChat": "بیصدا کردن چت",
"@muteChat": {
"type": "String",
"placeholders": {}
},
- "newChat": "گپ جدید",
+ "newChat": "چت جدید",
"@newChat": {
"type": "String",
"placeholders": {}
@@ -1258,12 +1258,12 @@
}
}
},
- "kickFromChat": "بیرون کردن از گپ",
+ "kickFromChat": "بیرون کردن از چت",
"@kickFromChat": {
"type": "String",
"placeholders": {}
},
- "leftTheChat": "گپ را ترک کرد",
+ "leftTheChat": "چت را ترک کرد",
"@leftTheChat": {
"type": "String",
"placeholders": {}
@@ -1380,7 +1380,7 @@
}
}
},
- "joinedTheChat": "👋 {username} به گپ پیوست",
+ "joinedTheChat": "👋 {username} به چت پیوست",
"@joinedTheChat": {
"type": "String",
"placeholders": {
@@ -1551,7 +1551,7 @@
}
}
},
- "unbanFromChat": "لغو محرومیت از گپ",
+ "unbanFromChat": "لغو محرومیت از چت",
"@unbanFromChat": {
"type": "String",
"placeholders": {}
@@ -1665,7 +1665,7 @@
}
}
},
- "wasDirectChatDisplayName": "گپ خالی (پیشتر {oldDisplayName} بود)",
+ "wasDirectChatDisplayName": "چت خالی (قبلا {oldDisplayName} بود)",
"@wasDirectChatDisplayName": {
"type": "String",
"placeholders": {
@@ -1674,15 +1674,15 @@
}
}
},
- "newSpaceDescription": "فضاها امکان یکپارچهسازی گپها و ساخت جوامع خصوصی یا عمومی را فراهم میکنند.",
- "encryptThisChat": "رمزنگاری این گپ",
+ "newSpaceDescription": "فضاها امکان یکپارچهسازی چت ها و ساخت جوامع خصوصی یا عمومی را فراهم میکنند.",
+ "encryptThisChat": "رمزنگاری این چت",
"sorryThatsNotPossible": "متأسفیم... این ممکن نیست",
"deviceKeys": "کلیدهای دستگاه:",
"fileIsTooBigForServer": "نمیتوان فرستاد! سرور تنها از پیوست های تا {max} پشتیبانی میکند.",
"jumpToLastReadMessage": "پرش به آخرین پیام خواندهشده",
"doNotShowAgain": "دوباره نمایش نده",
"readUpToHere": "خواندهشده تا اینجا",
- "noBackupWarning": "هشدار! بدون فعال کردن پشتیبان گپ، دسترسی به پیامهای رمزنگاریشده خود را از دست خواهید داد. پیشنهاد میشود پیش از خروج، پشتیبان گپ را فعال کنید.",
+ "noBackupWarning": "هشدار! بدون فعال کردن پشتیبان چت، دسترسی به پیامهای رمزنگاریشده خود را از دست خواهید داد. پیشنهاد میشود پیش از خروج، پشتیبان چت را فعال کنید.",
"noOtherDevicesFound": "دستگاه دیگری پیدا نشد",
"countFiles": "{count} پرونده",
"@countFiles": {
@@ -1692,8 +1692,8 @@
}
}
},
- "noKeyForThisMessage": "اگر پیام پیش از ورود به حساب در این دستگاه فرستاده شده باشد، این مشکل ممکن است رخ دهد.\n\nهمچنین ممکن است فرستنده دستگاه شما را مسدود کرده باشد یا مشکلی در اتصال اینترنت وجود داشته باشد.\n\nآیا میتوانید پیام را در نشست دیگری بخوانید؟ در این صورت، میتوانید آن را منتقل کنید! به تنظیمات > دستگاهها بروید و مطمئن شوید دستگاههایتان یکدیگر را بازبینی کردهاند. هنگام باز کردن دوباره اتاق و فعال بودن هر دو نشست، کلیدها بهصورت خودکار منتقل میشوند.\n\nآیا نمیخواهید هنگام خروج یا تغییر دستگاه کلیدها را گم کنید؟ مطمئن شوید پشتیبان گپ را در تنظیمات فعال کردهاید.",
- "disableEncryptionWarning": "به دلایل امنیتی نمیتوانید رمزنگاری را در گپی که فعال شده غیرفعال کنید.",
+ "noKeyForThisMessage": "اگر پیام پیش از ورود به حساب در این دستگاه فرستاده شده باشد، این مشکل ممکن است رخ دهد.\n\nهمچنین ممکن است فرستنده دستگاه شما را مسدود کرده باشد یا مشکلی در اتصال اینترنت وجود داشته باشد.\n\nآیا میتوانید پیام را در نشست دیگری بخوانید؟ در این صورت، میتوانید آن را منتقل کنید! به تنظیمات > دستگاهها بروید و مطمئن شوید دستگاههایتان یکدیگر را بازبینی کردهاند. هنگام باز کردن دوباره اتاق و فعال بودن هر دو نشست، کلیدها بهصورت خودکار منتقل میشوند.\n\nآیا نمیخواهید هنگام خروج یا تغییر دستگاه کلیدها را گم کنید؟ مطمئن شوید پشتیبان چت را در تنظیمات فعال کردهاید.",
+ "disableEncryptionWarning": "به دلایل امنیتی نمیتوانید رمزنگاری را در چتی که فعال شده غیرفعال کنید.",
"newGroup": "گروه جدید",
"foregroundServiceRunning": "این آگاهساز زمانی ظاهر میشود که خدمت پیشزمینه فعال است.",
"storeSecurlyOnThisDevice": "ذخیره امن در این دستگاه",
@@ -1706,8 +1706,8 @@
"custom": "سفارشی",
"screenSharingTitle": "همرسانی صفحهنمایش",
"whyIsThisMessageEncrypted": "چرا این پیام خوانا نیست؟",
- "reopenChat": "باز کردن دوباره گپ",
- "unmuteChat": "فعال کردن صدای گپ",
+ "reopenChat": "باز کردن دوباره چت",
+ "unmuteChat": "فعال کردن صدای چت",
"@unmuteChat": {
"type": "String",
"placeholders": {}
@@ -1768,7 +1768,7 @@
"type": "String",
"placeholders": {}
},
- "youHaveBeenBannedFromThisChat": "شما از این گپ محروم شدهاید",
+ "youHaveBeenBannedFromThisChat": "شما از این چت محروم شدهاید",
"@youHaveBeenBannedFromThisChat": {
"type": "String",
"placeholders": {}
@@ -1873,7 +1873,7 @@
"type": "String",
"placeholders": {}
},
- "youAreNoLongerParticipatingInThisChat": "شما دیگر در این گپ شرکت نمیکنید",
+ "youAreNoLongerParticipatingInThisChat": "شما دیگر در این چت شرکت نمیکنید",
"@youAreNoLongerParticipatingInThisChat": {
"type": "String",
"placeholders": {}
@@ -1925,7 +1925,7 @@
"type": "String",
"placeholders": {}
},
- "openChat": "باز کردن گپ",
+ "openChat": "باز کردن چت",
"dismiss": "رد کردن",
"unsupportedAndroidVersion": "نسخه اندروید پشتیبانینشده",
"youUnbannedUser": "شما محرومیت {user} را برداشتید",
@@ -1987,7 +1987,7 @@
}
}
},
- "userLeftTheChat": "👋 {username} گپ را ترک کرد",
+ "userLeftTheChat": "👋 {username} چت را ترک کرد",
"@userLeftTheChat": {
"type": "String",
"placeholders": {
@@ -2001,7 +2001,7 @@
"type": "String",
"placeholders": {}
},
- "visibilityOfTheChatHistory": "قابلیت دیدن تاریخچه گپ",
+ "visibilityOfTheChatHistory": "قابلیت دیدن تاریخچه چت",
"@visibilityOfTheChatHistory": {
"type": "String",
"placeholders": {}
@@ -2016,7 +2016,7 @@
"type": "String",
"placeholders": {}
},
- "wipeChatBackup": "برای ایجاد کلید بازیابی جدید، پشتیبان گپ خود را پاک میکنید؟",
+ "wipeChatBackup": "برای ایجاد کلید بازیابی جدید، پشتیبان چت خود را پاک میکنید؟",
"@wipeChatBackup": {
"type": "String",
"placeholders": {}
@@ -2083,7 +2083,7 @@
"pinMessage": "سنجاق کردن به اتاق",
"emojis": "شکلکها",
"voiceCall": "تماس صوتی",
- "youJoinedTheChat": "شما به گپ پیوستید",
+ "youJoinedTheChat": "شما به چت پیوستید",
"youBannedUser": "شما {user} را محروم کردید",
"@youBannedUser": {
"placeholders": {
@@ -2146,8 +2146,8 @@
"appLockDescription": "قفل کردن برنامه با رمز کوتاه هنگام عدم استفاده",
"sendTypingNotifications": "فرستادن آگاهسازهای نوشتن",
"swipeRightToLeftToReply": "کشیدن از راست به چپ برای پاسخ",
- "noMoreChatsFound": "گپ دیگری پیدا نشد...",
- "noChatsFoundHere": "اینجا هنوز گپی پیدا نشد. با استفاده از دکمه زیر گپ جدیدی با کسی شروع کنید. ⤵️",
+ "noMoreChatsFound": "چت دیگری پیدا نشد...",
+ "noChatsFoundHere": "اینجا هنوز چتی پیدا نشد. با استفاده از دکمه زیر چت جدیدی با کسی شروع کنید. ⤵️",
"unread": "خواندهنشده",
"space": "فضا",
"spaces": "فضاها",
@@ -2162,28 +2162,28 @@
}
},
"createGroup": "ساختن گروه",
- "chatPermissions": "دسترسیهای گپ",
+ "chatPermissions": "دسترسیهای چت",
"emoteKeyboardNoRecents": "شکلکهایی که به تازگی استفادهشده اینجا نمایش داده میشوند...",
"@emoteKeyboardNoRecents": {
"type": "String",
"placeholders": {}
},
- "globalChatId": "شناسه گپ سراسری",
+ "globalChatId": "شناسه سراسری چت",
"accessAndVisibility": "دسترسی و قابلیت دید",
- "accessAndVisibilityDescription": "چه کسی اجازه پیوستن به این گپ را دارد و گپ چگونه قابل کشف است.",
+ "accessAndVisibilityDescription": "چه کسی اجازه پیوستن به این چت را دارد و چت چگونه قابل پیدا شدن است.",
"calls": "تماسها",
"customEmojisAndStickers": "شکلکها و برچسبهای سفارشی",
- "customEmojisAndStickersBody": "افزودن یا همرسانی شکلکها یا برچسبهای سفارشی که در هر گپ قابل استفادهاند.",
- "chatDescription": "توضیح گپ",
- "chatDescriptionHasBeenChanged": "توضیح گپ تغییر کرد",
+ "customEmojisAndStickersBody": "افزودن یا اشتراک گذاری ایموجی ها یا استیکر های سفارشی که در هر چت قابل استفادهاند.",
+ "chatDescription": "توضیحات چت",
+ "chatDescriptionHasBeenChanged": "توضیحات چت تغییر کرد",
"hideRedactedMessages": "پنهان کردن پیامهای ویرایششده",
- "hideRedactedMessagesBody": "اگر کسی پیامی را ویرایش کند، دیگر نمیتوان آن پیام را در گپ دید.",
+ "hideRedactedMessagesBody": "اگر کسی پیامی را ویرایش کند، دیگر نمیتوان آن پیام را در چت دید.",
"hideInvalidOrUnknownMessageFormats": "پنهان کردن قالبهای پیام نامعتبر یا ناشناخته",
"block": "مسدود کردن",
"blockedUsers": "کاربران مسدودشده",
"blockListDescription": "میتوانید کاربرانی که مزاحم شما هستند را مسدود کنید. از کاربران موجود در فهرست مسدود شخصی، پیام یا دعوت به اتاق دریافت نخواهید کرد.",
"blockUsername": "چشمپوشی از نام کاربری",
- "noChatDescriptionYet": "هنوز توضیح گپی ساخته نشده است.",
+ "noChatDescriptionYet": "هنوز توضیحات چتی نوشته نشده است.",
"tryAgain": "تلاش دوباره",
"invalidServerName": "نام سرور نامعتبر",
"redactMessageDescription": "پیام برای همه شرکتکنندگان در این گفتگو ویرایش خواهد شد. این کار برگشتناپذیر است.",
@@ -2201,7 +2201,7 @@
}
}
},
- "directChat": "گپ مستقیم",
+ "directChat": "چت مستقیم",
"redactedByBecause": "ویرایششده بهدست {username} زیرا: «{reason}»",
"@redactedByBecause": {
"type": "String",
@@ -2223,7 +2223,7 @@
}
}
},
- "setChatDescription": "تنظیم توضیح گپ",
+ "setChatDescription": "تنظیم توضیحات چت",
"presencesToggle": "نمایش پیامهای وضعیت از دیگر کاربران",
"@presencesToggle": {
"type": "String",
@@ -2260,7 +2260,7 @@
"hidePresences": "پنهان کردن فهرست وضعیت؟",
"setColorTheme": "تنظیم پوسته رنگی:",
"invite": "دعوت",
- "inviteGroupChat": "📨 دعوت به گپ گروهی",
+ "inviteGroupChat": "📨 دعوت به چت گروهی",
"invalidInput": "ورودی نامعتبر!",
"wrongPinEntered": "رمز کوتاه نادرست وارد شد! {seconds} ثانیه دیگر دوباره تلاش کنید...",
"@wrongPinEntered": {
@@ -2272,12 +2272,12 @@
}
},
"pleaseEnterANumber": "لطفاً عددی بزرگتر از ۰ وارد کنید",
- "archiveRoomDescription": "گپ به بایگانی خواهد رفت. کاربران دیگر میتوانند ببینند که شما گپ را ترک کردهاید.",
- "roomUpgradeDescription": "گپ با نگارش جدید اتاق بازسازی خواهد شد. به همه شرکتکنندگان آگاهیرسانی میشود که باید به گپ جدید بروند. دادههای بیشتر درباره نگارشهای اتاق در https://spec.matrix.org/latest/rooms/",
+ "archiveRoomDescription": "چت به بایگانی خواهد رفت. کاربران دیگر میتوانند ببینند که شما چت را ترک کردهاید.",
+ "roomUpgradeDescription": "چت با نگارش جدید اتاق بازسازی خواهد شد. به همه شرکتکنندگان آگاهیرسانی میشود که باید به چت جدید بروند. دادههای بیشتر درباره نگارشهای اتاق در https://spec.matrix.org/latest/rooms/",
"removeDevicesDescription": "از این دستگاه خارج خواهید شد و دیگر نمیتوانید پیام دریافت کنید.",
- "banUserDescription": "کاربر از گپ محروم خواهد شد و تا زمانی که محرومیت برداشته نشود، نمیتواند دوباره وارد گپ شود.",
- "unbanUserDescription": "کاربر در صورت تلاش دوباره میتواند وارد گپ شود.",
- "kickUserDescription": "کاربر از گپ بیرون میشود اما محروم نمیشود. در گپهای عمومی، کاربر میتواند هر زمان دوباره بپیوندد.",
+ "banUserDescription": "کاربر از چت محروم خواهد شد و تا زمانی که محرومیت برداشته نشود، نمیتواند دوباره وارد چت شود.",
+ "unbanUserDescription": "کاربر در صورت تلاش دوباره میتواند وارد چت شود.",
+ "kickUserDescription": "کاربر از چت بیرون میشود اما محروم نمیشود. در چت های عمومی، کاربر میتواند هر زمان دوباره بپیوندد.",
"makeAdminDescription": "پس از مدیر کردن این کاربر، ممکن است نتوانید این کار را لغو کنید، زیرا آنها همان دسترسیهای شما را خواهند داشت.",
"pushNotificationsNotAvailable": "آگاهسازهای فشاری در دسترس نیستند",
"learnMore": "بیشتر بدانید",
@@ -2292,7 +2292,7 @@
}
},
"knocking": "در زدن",
- "chatCanBeDiscoveredViaSearchOnServer": "گپ با جستجو در {server} قابل کشف است",
+ "chatCanBeDiscoveredViaSearchOnServer": "چت با جستجو در {server} قابل کشف است",
"@chatCanBeDiscoveredViaSearchOnServer": {
"type": "String",
"placeholders": {
@@ -2301,13 +2301,13 @@
}
}
},
- "searchChatsRooms": "جستجو برای #گپها، @کاربران...",
+ "searchChatsRooms": "جستجو برای #چت ها، @کاربران...",
"nothingFound": "چیزی پیدا نشد...",
"groupName": "نام گروه",
"createGroupAndInviteUsers": "ساختن گروه و دعوت کاربران",
"groupCanBeFoundViaSearch": "گروه با جستجو قابل یافتن است",
"wrongRecoveryKey": "متأسفیم... به نظر میرسد این کلید بازیابی درست نباشد.",
- "commandHint_sendraw": "فرستادن JSON خام",
+ "commandHint_sendraw": "فرستادن json خام",
"databaseMigrationTitle": "پایگاه داده بهینهسازی شد",
"databaseMigrationBody": "لطفاً صبر کنید. این ممکن است لحظهای طول بکشد.",
"leaveEmptyToClearStatus": "برای پاک کردن وضعیت، خالی بگذارید.",
@@ -2318,13 +2318,13 @@
"pleaseChooseAStrongPassword": "لطفاً یک گذرواژه قوی انتخاب کنید",
"passwordsDoNotMatch": "گذرواژهها همخوانی ندارند",
"passwordIsWrong": "گذرواژه واردشده نادرست است",
- "publicChatAddresses": "نشانیهای گپ عمومی",
+ "publicChatAddresses": "آدرس های چت عمومی",
"createNewAddress": "ساختن نشانی جدید",
"joinSpace": "پیوستن به فضا",
"publicSpaces": "فضاهای عمومی",
- "addChatOrSubSpace": "افزودن گپ یا زیرفضا",
+ "addChatOrSubSpace": "افزودن چت یا زیرفضا",
"thisDevice": "این دستگاه:",
- "searchIn": "جستجو در گپ «{chat}»...",
+ "searchIn": "جستجو در چت «{chat}»...",
"@searchIn": {
"type": "String",
"placeholders": {
@@ -2361,8 +2361,8 @@
}
},
"sendReadReceipts": "فرستادن رسیدهای خواندن",
- "sendTypingNotificationsDescription": "دیگر شرکتکنندگان در گپ میتوانند ببینند که شما در حال تایپ پیام جدید هستید.",
- "sendReadReceiptsDescription": "دیگر شرکتکنندگان در گپ میتوانند ببینند که شما پیام را خواندهاید.",
+ "sendTypingNotificationsDescription": "دیگر شرکتکنندگان در چت میتوانند ببینند که شما در حال تایپ پیام جدید هستید.",
+ "sendReadReceiptsDescription": "دیگر شرکتکنندگان در چت میتوانند ببینند که شما پیام را خواندهاید.",
"formattedMessages": "پیامهای قالببندیشده",
"formattedMessagesDescription": "نمایش محتوای پیام غنی مانند متن پررنگ با استفاده از مارکداون.",
"verifyOtherUser": "🔐 بازبینی کاربر دیگر",
@@ -2429,7 +2429,7 @@
"discover": "کشف",
"commandHint_ignore": "چشمپوشی از شناسه ماتریکس دادهشده",
"commandHint_unignore": "لغو چشمپوشی از شناسه ماتریکس دادهشده",
- "unreadChatsInApp": "{appname}: {unread} گپ خواندهنشده",
+ "unreadChatsInApp": "{appname}: {unread} چت خواندهنشده",
"@unreadChatsInApp": {
"type": "String",
"placeholders": {
@@ -2482,14 +2482,14 @@
}
}
},
- "changeGeneralChatSettings": "تغییر تنظیمات عمومی گپ",
- "inviteOtherUsers": "دعوت کاربران دیگر به این گپ",
- "changeTheChatPermissions": "تغییر دسترسیهای گپ",
- "changeTheVisibilityOfChatHistory": "تغییر قابلیت دید تاریخچه گپ",
- "changeTheCanonicalRoomAlias": "تغییر نشانی اصلی گپ عمومی",
+ "changeGeneralChatSettings": "تغییر تنظیمات عمومی چت",
+ "inviteOtherUsers": "دعوت کاربران دیگر به این چت",
+ "changeTheChatPermissions": "تغییر دسترسیهای چت",
+ "changeTheVisibilityOfChatHistory": "تغییر قابلیت دید تاریخچه چت",
+ "changeTheCanonicalRoomAlias": "تغییر نشانی اصلی چت عمومی",
"sendRoomNotifications": "فرستادن آگاهسازهای @room",
- "changeTheDescriptionOfTheGroup": "تغییر توضیح گپ",
- "chatPermissionsDescription": "مشخص کنید کدام سطح دسترسی برای اقدامات خاصی در این گپ لازم است. سطحهای دسترسی ۰، ۵۰ و ۱۰۰ معمولاً نشاندهنده کاربران، ناظران و مدیران هستند، اما هر درجهبندی ممکن است.",
+ "changeTheDescriptionOfTheGroup": "تغییر توضیح چت",
+ "chatPermissionsDescription": "مشخص کنید کدام سطح دسترسی برای اقدامات خاصی در این چت لازم است. سطحهای دسترسی ۰، ۵۰ و ۱۰۰ معمولاً نشاندهنده کاربران، ناظران و مدیران هستند، اما هر درجهبندی ممکن است.",
"updateInstalled": "🎉 بهروزرسانی {version} نصب شد!",
"@updateInstalled": {
"type": "String",
@@ -2530,9 +2530,9 @@
}
},
"oneOfYourDevicesIsNotVerified": "یکی از دستگاههای شما بازبینی نشده است",
- "noticeChatBackupDeviceVerification": "توجه: وقتی همه دستگاههای خود را به پشتیبان گپ متصل کنید، بهصورت خودکار بازبینی میشوند.",
+ "noticeChatBackupDeviceVerification": "توجه: وقتی همه دستگاههای خود را به پشتیبان چت متصل کنید، بهصورت خودکار بازبینی میشوند.",
"continueText": "ادامه",
- "welcomeText": "درود درود 👋 این فلافیچت است. میتوانید به هر سرور خانگی سازگار با https://matrix.org وارد شوید و با هر کسی گپ بزنید. این یک شبکه پیامرسانی غیرمتمرکز بزرگ است!",
+ "welcomeText": "درود درود 👋 این فلافیچت است. میتوانید به هر سرور خانگی سازگار با https://matrix.org وارد شوید و با هر کسی چت کنید. این یک شبکه پیامرسانی غیرمتمرکز بزرگ است!",
"blur": "محو کردن:",
"opacity": "شفافیت:",
"setWallpaper": "تنظیم کاغذدیواری",
@@ -2552,7 +2552,7 @@
"pleaseFillOut": "لطفاً پر کنید",
"invalidUrl": "نشانی نامعتبر",
"addLink": "افزودن پیوند",
- "unableToJoinChat": "ناتوانی در پیوستن به گپ. شاید طرف مقابل گفتگو را بسته است.",
+ "unableToJoinChat": "ناتوانی در پیوستن به چت. شاید طرف مقابل گفتگو را بسته است.",
"previous": "پیشین",
"otherPartyNotLoggedIn": "طرف مقابل اکنون وارد نشده است و بنابراین نمیتواند پیام دریافت کند!",
"appWantsToUseForLogin": "برای ورود از '{server}' استفاده کنید",
@@ -2567,7 +2567,7 @@
"appWantsToUseForLoginDescription": "شما بدینوسیله به برنامه و وبگاه اجازه میدهید اطلاعات شما را همرسانی کنند.",
"open": "باز کردن",
"waitingForServer": "در انتظار سرور...",
- "newChatRequest": "📩 درخواست گپ جدید",
+ "newChatRequest": "📩 درخواست چت جدید",
"contentNotificationSettings": "تنظیمات آگاهساز محتوا",
"generalNotificationSettings": "تنظیمات آگاهساز عمومی",
"roomNotificationSettings": "تنظیمات آگاهساز اتاق",
@@ -2637,7 +2637,7 @@
"deletePushRuleCanNotBeUndone": "اگر این تنظیم آگاهساز را پاک کنید، این کار برگشتناپذیر است.",
"more": "بیشتر",
"shareKeysWith": "همرسانی کلیدها با...",
- "shareKeysWithDescription": "کدام دستگاهها باید مورد اعتماد باشند تا بتوانند پیامهای شما را در گپهای رمزنگاریشده بخوانند؟",
+ "shareKeysWithDescription": "کدام دستگاهها باید مورد اعتماد باشند تا بتوانند پیامهای شما را در چت های رمزنگاریشده بخوانند؟",
"allDevices": "همه دستگاهها",
"crossVerifiedDevicesIfEnabled": "دستگاههای بازبینیشده متقابل اگر فعال باشد",
"crossVerifiedDevices": "دستگاههای بازبینیشده متقابل",
@@ -2646,7 +2646,7 @@
"recordAVideo": "ضبط ویدئو",
"optionalMessage": "(اختیاری) پیام...",
"notSupportedOnThisDevice": "در این دستگاه پشتیبانی نمیشود",
- "enterNewChat": "ورود به گپ جدید",
+ "enterNewChat": "ورود به چت جدید",
"approve": "پذیرفتن",
"youHaveKnocked": "شما در زدهاید",
"pleaseWaitUntilInvited": "لطفاً اکنون صبر کنید تا کسی از اتاق شما را دعوت کند.",
@@ -2656,9 +2656,148 @@
"customReaction": "واکنش سفارشی",
"moreEvents": "رویدادهای بیشتر",
"initAppError": "خطایی هنگام آغاز برنامه رخ داد",
- "changedTheChatDescription": "{username} توضیحات گپ را تغییر داد",
- "changedTheChatName": "{username} نام گپ را تغییر داد",
+ "changedTheChatDescription": "{username} توضیحات چت را تغییر داد",
+ "changedTheChatName": "{username} نام چت را تغییر داد",
"declineInvitation": "رد کردن دعوت",
"noMessagesYet": "پیامی وجود ندارد",
- "longPressToRecordVoiceMessage": "برای ضبط پیام صوتی، انگشت خود را نگه دارید."
-}
\ No newline at end of file
+ "longPressToRecordVoiceMessage": "برای ضبط پیام صوتی، انگشت خود را نگه دارید.",
+ "pause": "توقف",
+ "resume": "ادامه",
+ "removeFromSpaceDescription": "این چت از این فضا حذف خواهد شد اما همچنان در لیست چت های شما نمایش داده میشود.",
+ "countChats": "{chats} چت",
+ "@countChats": {
+ "type": "String",
+ "placeholders": {
+ "chats": {
+ "type": "int"
+ }
+ }
+ },
+ "spaceMemberOf": "عضو فضای {spaces}",
+ "@spaceMemberOf": {
+ "type": "String",
+ "placeholders": {
+ "spaces": {
+ "type": "String"
+ }
+ }
+ },
+ "spaceMemberOfCanKnock": "عضو فضای {spaces} میتواند در بزند",
+ "@spaceMemberOfCanKnock": {
+ "type": "String",
+ "placeholders": {
+ "spaces": {
+ "type": "String"
+ }
+ }
+ },
+ "startedAPoll": "{username} یک نظرسنجی را آغاز کرد.",
+ "@startedAPoll": {
+ "type": "String",
+ "placeholders": {
+ "username": {
+ "type": "String"
+ }
+ }
+ },
+ "poll": "نظرسنجی",
+ "startPoll": "آغاز نظرسنجی",
+ "endPoll": "پایان نظرسنجی",
+ "answersVisible": "پاسخ ها قابل رویت",
+ "pollQuestion": "سوال نظرسنجی",
+ "answerOption": "گزینه جواب",
+ "addAnswerOption": "اضافه کردن گزینه جواب",
+ "allowMultipleAnswers": "اجازه دادن چند جواب",
+ "pollHasBeenEnded": "این نظرسنجی پایان یافته است",
+ "answersWillBeVisibleWhenPollHasEnded": "پاسخ ها وقتی نظرسنجی به پایان برسد نمایش داده خواهند شد",
+ "replyInThread": "پاسخ در رشته",
+ "countReplies": "{count} پاسخ دیگر",
+ "@countReplies": {
+ "type": "int",
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "thread": "رشته",
+ "backToMainChat": "بازگشت به چت اصلی",
+ "saveChanges": "ذخیره تغییرات",
+ "createSticker": "ساخت استیکر یا ایموجی",
+ "useAsSticker": "استفاده به عنوان استیکر",
+ "useAsEmoji": "استفاده به عنوان ایموجی",
+ "stickerPackNameAlreadyExists": "نام استیکرپک تکراری است",
+ "newStickerPack": "استیکر پک جدید",
+ "stickerPackName": "نام استیکر پک",
+ "attribution": "نسبت دادن",
+ "skipChatBackup": "صرف نظر از پشتیبان گیری چت",
+ "skipChatBackupWarning": "آیا مطمئنید؟ بدون فعال کردن پشتیبان گیری چت ممکن است در صورت تغییر دستگاه دسترسی خود به پیام هایتان را از دست بدهید.",
+ "loadingMessages": "در حال بارگذاری پیام ها",
+ "setupChatBackup": "فعالسازی پشتیبان گیری چت",
+ "noMoreResultsFound": "نتایج دیگری یافت نشد",
+ "chatSearchedUntil": "چت تا {time} جستجو شد",
+ "@chatSearchedUntil": {
+ "type": "String",
+ "placeholders": {
+ "time": {
+ "type": "String"
+ }
+ }
+ },
+ "federationBaseUrl": "پایه آدرس فدریشن",
+ "clientWellKnownInformation": "اطلاعات Client-Well-Known:",
+ "baseUrl": "پایه آدرس",
+ "identityServer": "سرور احراز هویت:",
+ "versionWithNumber": "ورژن: {version}",
+ "@versionWithNumber": {
+ "type": "String",
+ "placeholders": {
+ "version": {
+ "type": "String"
+ }
+ }
+ },
+ "logs": "لاگ ها",
+ "advancedConfigs": "تنظیمات پیشرفته",
+ "advancedConfigurations": "تنظیمات پیشرفته",
+ "signIn": "ورود",
+ "createNewAccount": "ساخت حساب جدید",
+ "signUpGreeting": "فلافی چت غیرمتمرکز است! یک سرور که میخواهید در آن حسابتان را بسازید را انتخاب کنید و شروع کنید!",
+ "signInGreeting": "از قبل در ماتریکس حساب کاربری دارید؟ خوش برگشتید! سرور خانه خود را انتخاب و لاگین کنید.",
+ "appIntro": "فلافی چت یک پیامرسان امن غیرمتمرکز ماتریکس است که با آن میتوانید با دوستانتان چت کنید! برای اطلاعات بیشتر میتوانید به https://matrix.org مراجعه کنید یا اینکه صرفا ثبت نام کنید.",
+ "theProcessWasCanceled": "فرآیند لغو شد.",
+ "join": "عضویت",
+ "searchOrEnterHomeserverAddress": "جستجو یا وارد کردن آدرس سرور خانه",
+ "matrixId": "شناسه ماتریکس",
+ "setPowerLevel": "انتخاب سطح قدرت",
+ "makeModerator": "انتخاب به عنوان ناظر",
+ "makeAdmin": "انتخاب به عنوان مدیر",
+ "removeModeratorRights": "حذف دسترسی های نظارتی",
+ "removeAdminRights": "حذف دسترسی های مدیریتی",
+ "powerLevel": "سطح قدرت",
+ "setPowerLevelDescription": "سطح قدرت مشخص میکند که یک کاربر قادر به انجام چه کارهایی در این اتاق است. معمولا یک عدد بین ۰ تا ۱۰۰ می باشد.",
+ "owner": "صاحب",
+ "mute": "ساکت",
+ "@mute": {
+ "description": "This should be a very short string because there is not much space in the button!"
+ },
+ "createNewChat": "ساخت چت جدید",
+ "reset": "ریست کردن",
+ "supportFluffyChat": "حمایت از فلافی چت",
+ "support": "پشتیبانی",
+ "fluffyChatSupportBannerMessage": "فلافی چت به کمک شما نیاز دارد!\n❤️❤️❤️\nفلافی چت همواره رایگان خواهد بود، اما توسعه و نگهداری از آن هزینه بر است.\nآینده این پروژه در گرو حمایت افرادی مثل شماست.",
+ "skipSupportingFluffyChat": "رد کردن حمایت از فلافی چت",
+ "iDoNotWantToSupport": "نمیخواهم حمایت کنم",
+ "iAlreadySupportFluffyChat": "از قبل از فلافی چت حمایت میکنم",
+ "setLowPriority": "تنظیم اولویت پایین",
+ "unsetLowPriority": "لغو تنظیم اولویت پایین",
+ "countVotes": "{count} رای دیگر",
+ "@countVotes": {
+ "type": "int",
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ }
+}
diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb
index 15dc3a0b..246b11f4 100644
--- a/lib/l10n/intl_ga.arb
+++ b/lib/l10n/intl_ga.arb
@@ -2807,4 +2807,4 @@
"iAlreadySupportFluffyChat": "Tacaím le FluffyChat cheana féin",
"setLowPriority": "Socraigh tosaíocht íseal",
"unsetLowPriority": "Díshuiteáil tosaíocht íseal"
-}
+}
\ No newline at end of file
diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb
index aac975fb..e6bf530b 100644
--- a/lib/l10n/intl_gl.arb
+++ b/lib/l10n/intl_gl.arb
@@ -2800,5 +2800,13 @@
"iDoNotWantToSupport": "Non quero axudar",
"iAlreadySupportFluffyChat": "Xa apoiei a FluffyChat",
"setLowPriority": "Establecer prioridade baixa",
- "unsetLowPriority": "Non establecer prioridade baixa"
+ "unsetLowPriority": "Non establecer prioridade baixa",
+ "removeCallFromChat": "Eliminar a chamada da conversa",
+ "removeCallFromChatDescription": "Queres eliminar a chamada da conversa para todos os membros?",
+ "removeCallForEveryone": "Eliminar para todos a chamada",
+ "startVoiceCall": "Iniciar chamada de voz",
+ "startVideoCall": "Iniciar chamada de vídeo",
+ "joinVoiceCall": "Unirse á chamada de voz",
+ "joinVideoCall": "Unirse á chamada de vídeo",
+ "live": "En directo"
}
diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb
index 97ef471d..b82e405f 100644
--- a/lib/l10n/intl_ja.arb
+++ b/lib/l10n/intl_ja.arb
@@ -2193,5 +2193,207 @@
"hideInvalidOrUnknownMessageFormats": "無効であるか不明なメッセージ形式を隠す",
"blockListDescription": "迷惑なユーザーをブロックすることができます。あなたの個人的なブロックリストに記載されたユーザーは、あらゆるメッセージやルームへの招待を受け取ることができません。",
"invalidServerName": "無効なサーバー名",
- "redactMessageDescription": "メッセージはこの会話のすべての参加者から削除されます。これは取り消すことができません。"
-}
\ No newline at end of file
+ "redactMessageDescription": "メッセージはこの会話のすべての参加者から削除されます。これは取り消すことができません。",
+ "commandHint_op": "ユーザーの権限レベルを付与する(デフォルト:50)",
+ "@commandHint_op": {
+ "type": "String",
+ "description": "Usage hint for the command /op"
+ },
+ "optionalRedactReason": "(オプション)メッセージを削除する理由…",
+ "overview": "概観",
+ "passwordRecoverySettings": "パスワードの復元設定",
+ "setChatDescription": "チャットの説明を設定",
+ "dismiss": "棄却",
+ "invitedBy": "📩 {user}に招待されました",
+ "@invitedBy": {
+ "placeholders": {
+ "user": {
+ "type": "String"
+ }
+ }
+ },
+ "hasKnocked": "🚪 {user}がノックしました",
+ "@hasKnocked": {
+ "placeholders": {
+ "user": {
+ "type": "String"
+ }
+ }
+ },
+ "usersMustKnock": "ユーザーはノックする必要があります",
+ "noOneCanJoin": "誰も参加できません",
+ "knock": "ノック",
+ "saveKeyManuallyDescription": "この鍵をシステムの共有ダイアログかクリップボードから手動で保存してください。",
+ "fileIsTooBigForServer": "送信できません!このサーバーは添付数は{max}個までです。",
+ "@fileIsTooBigForServer": {
+ "type": "String",
+ "placeholders": {
+ "max": {
+ "type": "String"
+ }
+ }
+ },
+ "fileHasBeenSavedAt": "ファイルは {path} に保存されています",
+ "@fileHasBeenSavedAt": {
+ "type": "String",
+ "placeholders": {
+ "path": {
+ "type": "String"
+ }
+ }
+ },
+ "jumpToLastReadMessage": "最後に閲覧したメッセージまで移動する",
+ "readUpToHere": "ここまで既読です",
+ "jump": "移動",
+ "openLinkInBrowser": "リンクをブラウザで開く",
+ "reportErrorDescription": "😭 おっと。問題が発生しました。必要があれば、このバグを開発者に報告することができます。",
+ "setColorTheme": "カラーテーマの設定:",
+ "invite": "招待",
+ "inviteGroupChat": "📨 グループチャットへ招待する",
+ "invalidInput": "無効な入力です!",
+ "wrongPinEntered": "誤ったPINが入力されました!{seconds}秒後に再試行してください…",
+ "@wrongPinEntered": {
+ "type": "String",
+ "placeholders": {
+ "seconds": {
+ "type": "int"
+ }
+ }
+ },
+ "pleaseEnterANumber": "0以上の数値を入力してください",
+ "archiveRoomDescription": "チャットはアーカイブに移動されます。他のユーザーはあなたが退出したチャットを見ることができます。",
+ "roomUpgradeDescription": "チャットは新しい部屋バージョンで再作成されます。全参加者に新しいチャットへ切り替える必要があることが通知されます。部屋バージョンについては https://spec.matrix.org/latest/rooms/ をご覧ください",
+ "removeDevicesDescription": "このデバイスからログアウトするとメッセージを受け取ることができません。",
+ "banUserDescription": "ユーザーをチャットからBANすると、BANを解除されるまで再入室することはできません。",
+ "unbanUserDescription": "ユーザーが再試行時に再入室することができます。",
+ "pushNotificationsNotAvailable": "プッシュ通知は利用できません",
+ "learnMore": "詳しく知る",
+ "yourGlobalUserIdIs": "あなたのグローバルユーザーID: ",
+ "knocking": "ノックしています",
+ "searchChatsRooms": "#チャット,@ユーザーで検索…",
+ "nothingFound": "何も見つかりませんでした…",
+ "groupName": "グループ名",
+ "createGroupAndInviteUsers": "グループを作成してユーザーを招待する",
+ "groupCanBeFoundViaSearch": "グループは検索で見つけることができます",
+ "commandHint_sendraw": "生のJSONを送信する",
+ "databaseMigrationTitle": "データベースは最適化されています",
+ "databaseMigrationBody": "しばらくお待ちください。この操作は時間がかかります。",
+ "searchForUsers": "@ユーザー で検索…",
+ "pleaseEnterYourCurrentPassword": "現在のパスワードを入力してください",
+ "newPassword": "新しいパスワード",
+ "pleaseChooseAStrongPassword": "強力なパスワードを選択してください",
+ "markAsUnread": "未読としてマーク",
+ "userLevel": "{level} - ユーザー",
+ "@userLevel": {
+ "type": "String",
+ "placeholders": {
+ "level": {
+ "type": "int"
+ }
+ }
+ },
+ "moderatorLevel": "{level} - モデレーター",
+ "@moderatorLevel": {
+ "type": "String",
+ "placeholders": {
+ "level": {
+ "type": "int"
+ }
+ }
+ },
+ "adminLevel": "{level} - 管理者",
+ "@adminLevel": {
+ "type": "String",
+ "placeholders": {
+ "level": {
+ "type": "int"
+ }
+ }
+ },
+ "changeGeneralChatSettings": "全体のチャット設定を変更する",
+ "inviteOtherUsers": "他のユーザーをこのチャットに招待する",
+ "changeTheChatPermissions": "チャット権限を変更する",
+ "changeTheDescriptionOfTheGroup": "チャットの説明を変更する",
+ "updateInstalled": "🎉 アップデート {version} をインストールしました!",
+ "@updateInstalled": {
+ "type": "String",
+ "placeholders": {
+ "version": {
+ "type": "String"
+ }
+ }
+ },
+ "changelog": "変更履歴",
+ "sendCanceled": "送信を取り消しました",
+ "loginWithMatrixId": "Matrix-IDでログイン",
+ "calculatingFileSize": "ファイルサイズを計算しています…",
+ "prepareSendingAttachment": "送信する添付ファイルを準備しています…",
+ "sendingAttachment": "添付ファイルを送信しています…",
+ "generatingVideoThumbnail": "ビデオサムネイルを生成しています…",
+ "compressVideo": "ビデオを圧縮しています…",
+ "sendingAttachmentCountOfCount": "{length}個中{index}個の添付ファイルを送信しています…",
+ "@sendingAttachmentCountOfCount": {
+ "type": "integer",
+ "placeholders": {
+ "index": {
+ "type": "int"
+ },
+ "length": {
+ "type": "int"
+ }
+ }
+ },
+ "serverLimitReached": "サーバーのリミットに達しました!{seconds}秒お待ちください…",
+ "@serverLimitReached": {
+ "type": "integer",
+ "placeholders": {
+ "seconds": {
+ "type": "int"
+ }
+ }
+ },
+ "oneOfYourDevicesIsNotVerified": "いずれかのデバイスが認証されていません",
+ "noticeChatBackupDeviceVerification": "注意:すべてのデバイスをチャットのバックアップに接続している場合、それらは自動的に認証されます。",
+ "continueText": "続ける",
+ "blur": "ぼかし:",
+ "opacity": "透過度:",
+ "setWallpaper": "壁紙を設定する",
+ "manageAccount": "アカウント管理",
+ "noContactInformationProvided": "サーバーから有効な連絡先情報が提供されていません",
+ "supportPage": "サポートページ",
+ "serverInformation": "サーバー情報:",
+ "name": "名前",
+ "version": "バージョン",
+ "website": "ウェブサイト",
+ "compress": "圧縮",
+ "boldText": "太字",
+ "italicText": "斜体",
+ "invalidUrl": "無効なURL",
+ "addLink": "リンクを追加",
+ "appWantsToUseForLogin": "'{server}' を使用してログインする",
+ "@appWantsToUseForLogin": {
+ "type": "String",
+ "placeholders": {
+ "server": {
+ "type": "String"
+ }
+ }
+ },
+ "open": "開く",
+ "waitingForServer": "サーバーを待機中…",
+ "newChatRequest": "📩 新しいチャットを要求",
+ "contentNotificationSettings": "コンテンツ通知設定",
+ "generalNotificationSettings": "全体通知設定",
+ "roomNotificationSettings": "部屋通知設定",
+ "userSpecificNotificationSettings": "ユーザー毎の通知設定",
+ "otherNotificationSettings": "その他の通知設定",
+ "notificationRuleContainsUserName": "ユーザー名を含む",
+ "notificationRuleContainsUserNameDescription": "ユーザー名がメッセージに含まれる場合に通知します。",
+ "notificationRuleMaster": "すべての通知をミュート",
+ "notificationRuleSuppressNotices": "自動化されたメッセージを控える",
+ "notificationRuleSuppressNoticesDescription": "Botのような自動化されたクライアントからの通知を抑制します。",
+ "notificationRuleInviteForMeDescription": "ユーザーが部屋に招待されたときに通知します。",
+ "notificationRuleMasterDescription": "全ルールを上書きして通知をすべて無効にします。",
+ "notificationRuleIsUserMention": "ユーザーの言及",
+ "notificationRuleIsUserMentionDescription": "ユーザーがメッセージ内で直接言及されたときに通知します。"
+}
diff --git a/lib/l10n/intl_kab.arb b/lib/l10n/intl_kab.arb
index f0464eef..a6de66d7 100644
--- a/lib/l10n/intl_kab.arb
+++ b/lib/l10n/intl_kab.arb
@@ -2177,5 +2177,15 @@
"notificationRuleSuppressEditsDescription": "Kkes ilɣa i yeznan yettwaẓergen.",
"notificationRuleCallDescription": "Azen alɣu i useqdac ɣef isawalen.",
"notificationRuleEncryptedRoomOneToOne": "Taxxamt yettwawgelhen s wudem n yiwen ɣer yiwen",
- "notificationRuleRoomOneToOne": "Taxxamt s wudem n yiwen ɣer yiwen"
-}
\ No newline at end of file
+ "notificationRuleRoomOneToOne": "Taxxamt s wudem n yiwen ɣer yiwen",
+ "userLevel": "{level} - Aseqdac",
+ "@userLevel": {
+ "type": "String",
+ "placeholders": {
+ "level": {
+ "type": "int"
+ }
+ }
+ },
+ "startVideoCall": "Bdu asiwel n uvidyu"
+}
diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb
index 085b157b..92e65d4e 100644
--- a/lib/l10n/intl_nb.arb
+++ b/lib/l10n/intl_nb.arb
@@ -2807,5 +2807,13 @@
"iDoNotWantToSupport": "Jeg ønsker ikke å støtte",
"iAlreadySupportFluffyChat": "Jeg støtter allerede FluffyChat",
"setLowPriority": "Sett lav prioritet",
- "unsetLowPriority": "Fjern lav prioritet"
+ "unsetLowPriority": "Fjern lav prioritet",
+ "removeCallFromChat": "Fjern anrop fra chat",
+ "removeCallFromChatDescription": "Vil du fjerne anropet fra chatten for alle medlemmer?",
+ "removeCallForEveryone": "Fjern anrop fra alle",
+ "startVoiceCall": "Start lydsamtale",
+ "startVideoCall": "Start videosamtale",
+ "joinVoiceCall": "Bli med i lydsamtale",
+ "joinVideoCall": "Bli med i videosamtale",
+ "live": "Direkte"
}
diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb
index 4896a6e3..2b33e66b 100644
--- a/lib/l10n/intl_nl.arb
+++ b/lib/l10n/intl_nl.arb
@@ -2800,4 +2800,4 @@
"support": "Steunen",
"setLowPriority": "Lage prioriteit instellen",
"unsetLowPriority": "Lage prioriteit uitschakelen"
-}
+}
\ No newline at end of file
diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb
index be172484..0a678588 100644
--- a/lib/l10n/intl_zh.arb
+++ b/lib/l10n/intl_zh.arb
@@ -2800,5 +2800,13 @@
"iDoNotWantToSupport": "我不想支持",
"iAlreadySupportFluffyChat": "我已支持 FluffyChat",
"setLowPriority": "设置低优先级",
- "unsetLowPriority": "取消设置低优先级"
+ "unsetLowPriority": "取消设置低优先级",
+ "removeCallFromChat": "从聊天中删除通话",
+ "removeCallFromChatDescription": "要为所有成员从聊天中删除通话吗?",
+ "removeCallForEveryone": "为所有人删除通话",
+ "startVoiceCall": "开始语音通话",
+ "startVideoCall": "开始视频通话",
+ "joinVoiceCall": "加入语音通话",
+ "joinVideoCall": "加入视频通话",
+ "live": "实时"
}
diff --git a/lib/main.dart b/lib/main.dart
index 368b0790..abb5e6c3 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,22 +1,21 @@
import 'dart:isolate';
import 'dart:ui';
+import 'package:collection/collection.dart';
+import 'package:fluffychat/config/app_config.dart';
+import 'package:fluffychat/utils/client_manager.dart';
+import 'package:fluffychat/utils/notification_background_handler.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
-import 'package:collection/collection.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod;
import 'package:just_audio_media_kit/just_audio_media_kit.dart';
import 'package:matrix/matrix.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:universal_html/universal_html.dart' as web;
-
-import 'package:fluffychat/config/app_config.dart';
-import 'package:fluffychat/utils/client_manager.dart';
-import 'package:fluffychat/utils/notification_background_handler.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
import 'package:video_player_media_kit/video_player_media_kit.dart';
+
import 'config/setting_keys.dart';
import 'utils/background_push.dart';
import 'widgets/fluffy_chat_app.dart';
diff --git a/lib/pages/archive/archive.dart b/lib/pages/archive/archive.dart
index 2481dfdd..5f8c1e23 100644
--- a/lib/pages/archive/archive.dart
+++ b/lib/pages/archive/archive.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/archive/archive_view.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class Archive extends StatefulWidget {
const Archive({super.key});
diff --git a/lib/pages/archive/archive_view.dart b/lib/pages/archive/archive_view.dart
index 5ef4176f..e8f9b7f1 100644
--- a/lib/pages/archive/archive_view.dart
+++ b/lib/pages/archive/archive_view.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/archive/archive.dart';
import 'package:fluffychat/pages/chat_list/chat_list_item.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class ArchiveView extends StatelessWidget {
final ArchiveController controller;
diff --git a/lib/pages/bootstrap/bootstrap_dialog.dart b/lib/pages/bootstrap/bootstrap_dialog.dart
index 2be97eed..4ade9f98 100644
--- a/lib/pages/bootstrap/bootstrap_dialog.dart
+++ b/lib/pages/bootstrap/bootstrap_dialog.dart
@@ -1,10 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/error_reporter.dart';
@@ -16,6 +9,12 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
+
import '../key_verification/key_verification_dialog.dart';
class BootstrapDialog extends StatefulWidget {
diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart
index b4f04a2a..e6ad5cd0 100644
--- a/lib/pages/chat/chat.dart
+++ b/lib/pages/chat/chat.dart
@@ -1,21 +1,11 @@
import 'dart:async';
import 'dart:io';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:collection/collection.dart';
import 'package:desktop_drop/desktop_drop.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
import 'package:file_picker/file_picker.dart';
-import 'package:go_router/go_router.dart';
-import 'package:image_picker/image_picker.dart';
-import 'package:matrix/matrix.dart';
-import 'package:scroll_to_index/scroll_to_index.dart';
-import 'package:pasteboard/pasteboard.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -38,6 +28,16 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/share_scaffold_dialog.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:go_router/go_router.dart';
+import 'package:image_picker/image_picker.dart';
+import 'package:matrix/matrix.dart';
+import 'package:mime/mime.dart';
+import 'package:pasteboard/pasteboard.dart';
+import 'package:scroll_to_index/scroll_to_index.dart';
+
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
import 'send_file_dialog.dart';
@@ -554,6 +554,7 @@ class ChatController extends State
timeline?.cancelSubscriptions();
timeline = null;
inputFocus.removeListener(_inputFocusListener);
+ if (currentlyTyping) room.setTyping(false);
super.dispose();
}
@@ -706,7 +707,7 @@ class ChatController extends State
String path,
int duration,
List waveform,
- String? fileName,
+ String fileName,
) async {
final scaffoldMessenger = ScaffoldMessenger.of(context);
final audioFile = XFile(path);
@@ -718,9 +719,17 @@ class ChatController extends State
final bytes = bytesResult.result;
if (bytes == null) return;
+ final mimeType = lookupMimeType(fileName, headerBytes: bytes);
+ final extension = mimeType == null ? null : extensionFromMime(mimeType);
+ if (extension != null) {
+ fileName =
+ 'voice_message_${DateTime.now().millisecondsSinceEpoch}.$extension';
+ }
+
final file = MatrixAudioFile(
bytes: bytes,
- name: fileName ?? audioFile.path,
+ name: fileName,
+ mimeType: mimeType,
);
room
@@ -1298,6 +1307,7 @@ class ChatController extends State
if (AppSettings.sendTypingNotifications.value) {
typingCoolDown?.cancel();
typingCoolDown = Timer(const Duration(seconds: 2), () {
+ if (!mounted) return;
typingCoolDown = null;
currentlyTyping = false;
room.setTyping(false);
diff --git a/lib/pages/chat/chat_app_bar_list_tile.dart b/lib/pages/chat/chat_app_bar_list_tile.dart
index 0f038a89..f3bf9cd1 100644
--- a/lib/pages/chat/chat_app_bar_list_tile.dart
+++ b/lib/pages/chat/chat_app_bar_list_tile.dart
@@ -1,8 +1,6 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-
import 'package:fluffychat/utils/url_launcher.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
class ChatAppBarListTile extends StatelessWidget {
final Widget? leading;
diff --git a/lib/pages/chat/chat_app_bar_title.dart b/lib/pages/chat/chat_app_bar_title.dart
index cbda4bc3..6ce556fb 100644
--- a/lib/pages/chat/chat_app_bar_title.dart
+++ b/lib/pages/chat/chat_app_bar_title.dart
@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/chat.dart';
@@ -11,6 +6,9 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/sync_status_localization.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/presence_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class ChatAppBarTitle extends StatelessWidget {
final ChatController controller;
diff --git a/lib/pages/chat/chat_emoji_picker.dart b/lib/pages/chat/chat_emoji_picker.dart
index be845bdd..8173734c 100644
--- a/lib/pages/chat/chat_emoji_picker.dart
+++ b/lib/pages/chat/chat_emoji_picker.dart
@@ -1,11 +1,10 @@
-import 'package:flutter/material.dart';
-
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/sticker_picker_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'chat.dart';
class ChatEmojiPicker extends StatelessWidget {
diff --git a/lib/pages/chat/chat_event_list.dart b/lib/pages/chat/chat_event_list.dart
index 18da7f67..d4ff1163 100644
--- a/lib/pages/chat/chat_event_list.dart
+++ b/lib/pages/chat/chat_event_list.dart
@@ -1,9 +1,4 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
-import 'package:scroll_to_index/scroll_to_index.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/chat.dart';
@@ -13,6 +8,9 @@ import 'package:fluffychat/pages/chat/typing_indicators.dart';
import 'package:fluffychat/utils/account_config.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:scroll_to_index/scroll_to_index.dart';
class ChatEventList extends StatelessWidget {
final ChatController controller;
diff --git a/lib/pages/chat/chat_input_row.dart b/lib/pages/chat/chat_input_row.dart
index d8765678..2cf0159e 100644
--- a/lib/pages/chat/chat_input_row.dart
+++ b/lib/pages/chat/chat_input_row.dart
@@ -1,8 +1,4 @@
-import 'package:flutter/material.dart';
-
import 'package:emoji_picker_flutter/locales/default_emoji_set_locale.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/recording_input_row.dart';
@@ -12,6 +8,9 @@ import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
import 'chat.dart';
import 'input_bar.dart';
diff --git a/lib/pages/chat/chat_view.dart b/lib/pages/chat/chat_view.dart
index 2c19524b..39a2c8f3 100644
--- a/lib/pages/chat/chat_view.dart
+++ b/lib/pages/chat/chat_view.dart
@@ -1,11 +1,7 @@
import 'dart:ui' as ui;
-import 'package:flutter/material.dart';
-
import 'package:badges/badges.dart';
import 'package:desktop_drop/desktop_drop.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -14,6 +10,7 @@ import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart';
import 'package:fluffychat/pages/chat/chat_app_bar_title.dart';
import 'package:fluffychat/pages/chat/chat_event_list.dart';
import 'package:fluffychat/pages/chat/encryption_button.dart';
+import 'package:fluffychat/pages/chat/jitsi_popup_button.dart';
import 'package:fluffychat/pages/chat/pinned_events.dart';
import 'package:fluffychat/pages/chat/reply_display.dart';
import 'package:fluffychat/utils/account_config.dart';
@@ -23,6 +20,9 @@ import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
import 'package:fluffychat/widgets/unread_rooms_badge.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/stream_extension.dart';
import 'chat_emoji_picker.dart';
import 'chat_input_row.dart';
@@ -224,14 +224,16 @@ class ChatView extends StatelessWidget {
],
),
] else if (!controller.room.isArchived) ...[
- if (AppSettings.experimentalVoip.value &&
+ if ((AppSettings.experimentalVoip.value &&
Matrix.of(context).voipPlugin != null &&
- controller.room.isDirectChat)
+ controller.room.isDirectChat))
IconButton(
onPressed: controller.onPhoneButtonTap,
icon: const Icon(Icons.call_outlined),
tooltip: L10n.of(context).placeCall,
- ),
+ )
+ else if (AppSettings.jitsiFeature.value)
+ JitsiPopupButton(controller.room),
EncryptionButton(controller.room),
ChatSettingsPopupMenu(controller.room, true),
],
diff --git a/lib/pages/chat/encryption_button.dart b/lib/pages/chat/encryption_button.dart
index 594ec4e4..d6495f6f 100644
--- a/lib/pages/chat/encryption_button.dart
+++ b/lib/pages/chat/encryption_button.dart
@@ -1,10 +1,9 @@
-import 'package:flutter/material.dart';
-
import 'package:badges/badges.dart' as b;
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/l10n/l10n.dart';
import '../../widgets/matrix.dart';
class EncryptionButton extends StatelessWidget {
diff --git a/lib/pages/chat/event_info_dialog.dart b/lib/pages/chat/event_info_dialog.dart
index 9dd0e7bb..e7c75965 100644
--- a/lib/pages/chat/event_info_dialog.dart
+++ b/lib/pages/chat/event_info_dialog.dart
@@ -1,14 +1,12 @@
import 'dart:convert';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
extension EventInfoDialogExtension on Event {
void showInfoDialog(BuildContext context) => showAdaptiveBottomSheet(
diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart
index f78345d3..9fc2dbf1 100644
--- a/lib/pages/chat/events/audio_player.dart
+++ b/lib/pages/chat/events/audio_player.dart
@@ -1,22 +1,21 @@
import 'dart:async';
import 'dart:io';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
import 'package:async/async.dart';
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:just_audio/just_audio.dart';
-import 'package:matrix/matrix.dart';
-import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart';
-import 'package:path_provider/path_provider.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/file_description.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/url_launcher.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:just_audio/just_audio.dart';
+import 'package:matrix/matrix.dart';
+import 'package:opus_caf_converter_dart/opus_caf_converter_dart.dart';
+import 'package:path_provider/path_provider.dart';
+
import '../../../utils/matrix_sdk_extensions/event_extension.dart';
import '../../../widgets/fluffy_chat_app.dart';
import '../../../widgets/matrix.dart';
diff --git a/lib/pages/chat/events/cute_events.dart b/lib/pages/chat/events/cute_events.dart
index 60453771..01d53c6d 100644
--- a/lib/pages/chat/events/cute_events.dart
+++ b/lib/pages/chat/events/cute_events.dart
@@ -1,11 +1,9 @@
import 'dart:math';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class CuteContent extends StatefulWidget {
final Event event;
diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart
index 906c6c24..e4ded6f1 100644
--- a/lib/pages/chat/events/html_message.dart
+++ b/lib/pages/chat/events/html_message.dart
@@ -1,18 +1,17 @@
+import 'package:collection/collection.dart';
+import 'package:fluffychat/utils/code_highlight_theme.dart';
+import 'package:fluffychat/utils/event_checkbox_extension.dart';
+import 'package:fluffychat/widgets/avatar.dart';
+import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:fluffychat/widgets/mxc_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-
-import 'package:collection/collection.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:highlight/highlight.dart' show highlight;
import 'package:html/dom.dart' as dom;
import 'package:html/parser.dart' as parser;
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/utils/code_highlight_theme.dart';
-import 'package:fluffychat/utils/event_checkbox_extension.dart';
-import 'package:fluffychat/widgets/avatar.dart';
-import 'package:fluffychat/widgets/future_loading_dialog.dart';
-import 'package:fluffychat/widgets/mxc_image.dart';
import '../../../utils/url_launcher.dart';
class HtmlMessage extends StatelessWidget {
diff --git a/lib/pages/chat/events/image_bubble.dart b/lib/pages/chat/events/image_bubble.dart
index 845814fc..af703f05 100644
--- a/lib/pages/chat/events/image_bubble.dart
+++ b/lib/pages/chat/events/image_bubble.dart
@@ -1,13 +1,12 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/file_description.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:matrix/matrix.dart';
+
import '../../../widgets/blur_hash.dart';
class ImageBubble extends StatelessWidget {
diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart
index 580cdf32..9bcd39a9 100644
--- a/lib/pages/chat/events/message.dart
+++ b/lib/pages/chat/events/message.dart
@@ -1,12 +1,6 @@
import 'dart:ui' as ui;
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
-import 'package:matrix/matrix.dart';
-import 'package:swipe_to_action/swipe_to_action.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -18,6 +12,11 @@ import 'package:fluffychat/utils/string_color.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+import 'package:swipe_to_action/swipe_to_action.dart';
+
import '../../../config/app_config.dart';
import 'message_content.dart';
import 'message_reactions.dart';
diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart
index 53e1cebb..cccab17e 100644
--- a/lib/pages/chat/events/message_content.dart
+++ b/lib/pages/chat/events/message_content.dart
@@ -1,11 +1,5 @@
import 'dart:math';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/events/poll.dart';
@@ -16,6 +10,11 @@ import 'package:fluffychat/utils/date_time_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
+
import '../../../config/app_config.dart';
import '../../../utils/event_checkbox_extension.dart';
import '../../../utils/platform_infos.dart';
diff --git a/lib/pages/chat/events/message_download_content.dart b/lib/pages/chat/events/message_download_content.dart
index 501c0243..1d555567 100644
--- a/lib/pages/chat/events/message_download_content.dart
+++ b/lib/pages/chat/events/message_download_content.dart
@@ -1,13 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/file_description.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
import 'package:fluffychat/utils/url_launcher.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:matrix/matrix.dart';
class MessageDownloadContent extends StatelessWidget {
final Event event;
diff --git a/lib/pages/chat/events/message_reactions.dart b/lib/pages/chat/events/message_reactions.dart
index 4bafaa6f..2ea76cdd 100644
--- a/lib/pages/chat/events/message_reactions.dart
+++ b/lib/pages/chat/events/message_reactions.dart
@@ -1,13 +1,11 @@
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart' show IterableExtension;
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class MessageReactions extends StatelessWidget {
final Event event;
diff --git a/lib/pages/chat/events/poll.dart b/lib/pages/chat/events/poll.dart
index d4506602..db81eb8a 100644
--- a/lib/pages/chat/events/poll.dart
+++ b/lib/pages/chat/events/poll.dart
@@ -1,15 +1,13 @@
-import 'package:flutter/material.dart';
-
import 'package:async/async.dart';
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:matrix/matrix.dart' hide Result;
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:matrix/matrix.dart' hide Result;
class PollWidget extends StatelessWidget {
final Event event;
diff --git a/lib/pages/chat/events/reply_content.dart b/lib/pages/chat/events/reply_content.dart
index 8211e431..31070a31 100644
--- a/lib/pages/chat/events/reply_content.dart
+++ b/lib/pages/chat/events/reply_content.dart
@@ -1,10 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../../config/app_config.dart';
class ReplyContent extends StatelessWidget {
diff --git a/lib/pages/chat/events/state_message.dart b/lib/pages/chat/events/state_message.dart
index 9c8ad3da..e0dd359a 100644
--- a/lib/pages/chat/events/state_message.dart
+++ b/lib/pages/chat/events/state_message.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/gestures.dart';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
+import 'package:flutter/gestures.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../../config/app_config.dart';
class StateMessage extends StatelessWidget {
diff --git a/lib/pages/chat/events/video_player.dart b/lib/pages/chat/events/video_player.dart
index 64097fce..3b2d50b9 100644
--- a/lib/pages/chat/events/video_player.dart
+++ b/lib/pages/chat/events/video_player.dart
@@ -1,16 +1,15 @@
import 'dart:math';
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/file_description.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/blur_hash.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:matrix/matrix.dart';
+
import '../../image_viewer/image_viewer.dart';
class EventVideoPlayer extends StatelessWidget {
diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart
index 22becb30..a8944107 100644
--- a/lib/pages/chat/input_bar.dart
+++ b/lib/pages/chat/input_bar.dart
@@ -1,15 +1,14 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
-import 'package:matrix/matrix.dart';
-import 'package:slugify/slugify.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/markdown_context_builder.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+import 'package:slugify/slugify.dart';
+
import '../../widgets/avatar.dart';
import '../../widgets/matrix.dart';
import 'command_hints.dart';
diff --git a/lib/pages/chat/jitsi_popup_button.dart b/lib/pages/chat/jitsi_popup_button.dart
new file mode 100644
index 00000000..28343fd2
--- /dev/null
+++ b/lib/pages/chat/jitsi_popup_button.dart
@@ -0,0 +1,175 @@
+import 'package:fluffychat/config/setting_keys.dart';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
+import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
+import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class JitsiPopupButton extends StatelessWidget {
+ final Room room;
+ const JitsiPopupButton(this.room, {super.key});
+
+ Future _startCall(BuildContext context, bool isAudioOnly) async {
+ final l10n = L10n.of(context);
+ final urlResult = await showFutureLoadingDialog(
+ context: context,
+ future: () async {
+ final conferenceId = room.client.generateUniqueTransactionId();
+ final domain = AppSettings.jitsiDomain.value;
+ final uri = Uri(
+ scheme: 'https',
+ host: domain,
+ path: conferenceId,
+ fragment: isAudioOnly ? 'config.startWithVideoMuted=true' : null,
+ );
+ await room.addWidget(
+ MatrixWidget(
+ room: room,
+ name: 'Jitsi Meet',
+ type: 'jitsi',
+ url: uri.toString(),
+ data: {
+ 'domain': domain,
+ 'isAudioOnly': isAudioOnly,
+ 'conferenceId': conferenceId,
+ 'roomName': room.getLocalizedDisplayname(
+ MatrixLocals(L10n.of(context)),
+ ),
+ },
+ ),
+ );
+ return uri;
+ },
+ );
+ final url = urlResult.result;
+ if (url == null) return;
+ await launchUrl(url);
+
+ if (!context.mounted) return;
+ final consent = await showOkCancelAlertDialog(
+ context: context,
+ title: l10n.removeCallFromChat,
+ message: l10n.removeCallFromChatDescription,
+ okLabel: l10n.remove,
+ );
+
+ if (consent != OkCancelResult.ok) return;
+ if (!context.mounted) return;
+
+ await _endAllCalls(context);
+ }
+
+ Future _endAllCalls(BuildContext context) => showFutureLoadingDialog(
+ context: context,
+ future: () async {
+ final activeJitsiCalls = room.states['im.vector.modular.widgets']?.values
+ .where((state) => state.content['type'] == 'jitsi');
+ if (activeJitsiCalls == null) return;
+ for (final call in activeJitsiCalls) {
+ await room.deleteWidget(call.stateKey!);
+ }
+ },
+ );
+
+ @override
+ Widget build(BuildContext context) {
+ final l10n = L10n.of(context);
+ final activeJitsiCalls = room.widgets
+ .where((widget) => widget.type == 'jitsi')
+ .map((widget) {
+ final isAudioOnly = widget.data?.tryGet('isAudioOnly') ?? false;
+ final domain = widget.data?.tryGet('domain');
+ final conferenceId = widget.data?.tryGet('conferenceId');
+ return (
+ isAudioOnly: isAudioOnly,
+ domain: domain,
+ conferenceId: conferenceId,
+ );
+ })
+ .toList();
+ final canEditCalls = room.canChangeStateEvent('im.vector.modular.widgets');
+ if (activeJitsiCalls.isEmpty && !canEditCalls) {
+ return const SizedBox.shrink();
+ }
+ return PopupMenuButton(
+ itemBuilder: (context) => [
+ ...activeJitsiCalls.map(
+ (call) => PopupMenuItem(
+ onTap: () => launchUrl(
+ Uri(
+ scheme: 'https',
+ host: call.domain,
+ path: call.conferenceId,
+ fragment: call.isAudioOnly
+ ? 'config.startWithVideoMuted=true'
+ : null,
+ ),
+ ),
+ child: Row(
+ mainAxisSize: .min,
+ children: [
+ Icon(call.isAudioOnly ? Icons.add_call : Icons.video_call),
+ const SizedBox(width: 12),
+ Text(
+ call.isAudioOnly ? l10n.joinVoiceCall : l10n.joinVideoCall,
+ ),
+ ],
+ ),
+ ),
+ ),
+ if (canEditCalls) ...[
+ if (activeJitsiCalls.isEmpty) ...[
+ PopupMenuItem(
+ onTap: () => _startCall(context, true),
+ child: Row(
+ mainAxisSize: .min,
+ children: [
+ const Icon(Icons.add_call),
+ const SizedBox(width: 12),
+ Text(l10n.startVoiceCall),
+ ],
+ ),
+ ),
+ PopupMenuItem(
+ onTap: () => _startCall(context, false),
+ child: Row(
+ mainAxisSize: .min,
+ children: [
+ const Icon(Icons.video_call),
+ const SizedBox(width: 12),
+ Text(l10n.startVideoCall),
+ ],
+ ),
+ ),
+ ] else
+ PopupMenuItem(
+ onTap: () => _endAllCalls(context),
+ child: Row(
+ mainAxisSize: .min,
+ children: [
+ Icon(
+ Icons.call_end_outlined,
+ color: Theme.of(context).colorScheme.error,
+ ),
+ const SizedBox(width: 12),
+ Text(
+ l10n.removeCallForEveryone,
+ style: TextStyle(
+ color: Theme.of(context).colorScheme.error,
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ],
+ icon: Badge(
+ label: Text(l10n.live),
+ isLabelVisible: activeJitsiCalls.isNotEmpty,
+ child: Icon(Icons.video_call_outlined),
+ ),
+ );
+ }
+}
diff --git a/lib/pages/chat/pinned_events.dart b/lib/pages/chat/pinned_events.dart
index da600a22..53b6ebcf 100644
--- a/lib/pages/chat/pinned_events.dart
+++ b/lib/pages/chat/pinned_events.dart
@@ -1,15 +1,13 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/chat.dart';
import 'package:fluffychat/pages/chat/chat_app_bar_list_tile.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class PinnedEvents extends StatelessWidget {
final ChatController controller;
diff --git a/lib/pages/chat/recording_input_row.dart b/lib/pages/chat/recording_input_row.dart
index b5b66706..ff295e88 100644
--- a/lib/pages/chat/recording_input_row.dart
+++ b/lib/pages/chat/recording_input_row.dart
@@ -1,13 +1,12 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/chat_input_row.dart';
import 'package:fluffychat/pages/chat/recording_view_model.dart';
+import 'package:flutter/material.dart';
class RecordingInputRow extends StatelessWidget {
final RecordingViewModelState state;
- final Future Function(String, int, List, String?) onSend;
+ final Future Function(String, int, List, String) onSend;
const RecordingInputRow({
required this.state,
required this.onSend,
diff --git a/lib/pages/chat/recording_view_model.dart b/lib/pages/chat/recording_view_model.dart
index 2f401c1c..d66ccbe4 100644
--- a/lib/pages/chat/recording_view_model.dart
+++ b/lib/pages/chat/recording_view_model.dart
@@ -1,20 +1,19 @@
import 'dart:async';
+import 'package:device_info_plus/device_info_plus.dart';
+import 'package:fluffychat/config/setting_keys.dart';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
-import 'package:device_info_plus/device_info_plus.dart';
import 'package:matrix/matrix.dart';
import 'package:path/path.dart' as path_lib;
import 'package:path_provider/path_provider.dart';
import 'package:record/record.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
-import 'package:fluffychat/config/setting_keys.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
-import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'events/audio_player.dart';
class RecordingViewModel extends StatefulWidget {
@@ -68,7 +67,7 @@ class RecordingViewModelState extends State {
? AudioEncoder.opus
: AudioEncoder.aacLc;
fileName =
- 'recording${DateTime.now().microsecondsSinceEpoch}.${codec.fileExtension}';
+ 'voice_message_${DateTime.now().millisecondsSinceEpoch}.${codec.fileExtension}';
String? path;
if (!kIsWeb) {
final tempDir = await getTemporaryDirectory();
@@ -169,7 +168,7 @@ class RecordingViewModelState extends State {
String path,
int duration,
List waveform,
- String? fileName,
+ String fileName,
)
onSend,
) async {
@@ -190,7 +189,7 @@ class RecordingViewModelState extends State {
isSending = true;
});
try {
- await onSend(path, duration.inMilliseconds, waveform, fileName);
+ await onSend(path, duration.inMilliseconds, waveform, fileName!);
} catch (e, s) {
Logs().e('Unable to send voice message', e, s);
setState(() {
diff --git a/lib/pages/chat/reply_display.dart b/lib/pages/chat/reply_display.dart
index 2090cecc..1c416e89 100644
--- a/lib/pages/chat/reply_display.dart
+++ b/lib/pages/chat/reply_display.dart
@@ -1,9 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
import 'chat.dart';
import 'events/reply_content.dart';
diff --git a/lib/pages/chat/seen_by_row.dart b/lib/pages/chat/seen_by_row.dart
index 65ecf6cd..b791cfb2 100644
--- a/lib/pages/chat/seen_by_row.dart
+++ b/lib/pages/chat/seen_by_row.dart
@@ -1,10 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class SeenByRow extends StatelessWidget {
final Event event;
diff --git a/lib/pages/chat/send_file_dialog.dart b/lib/pages/chat/send_file_dialog.dart
index 4e67b338..ef6b9cb5 100644
--- a/lib/pages/chat/send_file_dialog.dart
+++ b/lib/pages/chat/send_file_dialog.dart
@@ -1,11 +1,5 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
import 'package:async/async.dart' show Result;
import 'package:cross_file/cross_file.dart';
-import 'package:matrix/matrix.dart' hide Result;
-import 'package:mime/mime.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
@@ -15,6 +9,11 @@ import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/size_string.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart' hide Result;
+import 'package:mime/mime.dart';
+
import '../../utils/resize_video.dart';
class SendFileDialog extends StatefulWidget {
diff --git a/lib/pages/chat/send_location_dialog.dart b/lib/pages/chat/send_location_dialog.dart
index 91460467..5c460eb6 100644
--- a/lib/pages/chat/send_location_dialog.dart
+++ b/lib/pages/chat/send_location_dialog.dart
@@ -1,15 +1,13 @@
import 'dart:async';
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
-import 'package:geolocator/geolocator.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat/events/map_bubble.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:geolocator/geolocator.dart';
+import 'package:matrix/matrix.dart';
class SendLocationDialog extends StatefulWidget {
final Room room;
diff --git a/lib/pages/chat/start_poll_bottom_sheet.dart b/lib/pages/chat/start_poll_bottom_sheet.dart
index 7c5bf176..5612f7fe 100644
--- a/lib/pages/chat/start_poll_bottom_sheet.dart
+++ b/lib/pages/chat/start_poll_bottom_sheet.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class StartPollBottomSheet extends StatefulWidget {
final Room room;
diff --git a/lib/pages/chat/sticker_picker_dialog.dart b/lib/pages/chat/sticker_picker_dialog.dart
index e4c21f46..9ccb3175 100644
--- a/lib/pages/chat/sticker_picker_dialog.dart
+++ b/lib/pages/chat/sticker_picker_dialog.dart
@@ -1,11 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/avatar.dart';
class StickerPickerDialog extends StatefulWidget {
diff --git a/lib/pages/chat/typing_indicators.dart b/lib/pages/chat/typing_indicators.dart
index 236c30e5..5419bdce 100644
--- a/lib/pages/chat/typing_indicators.dart
+++ b/lib/pages/chat/typing_indicators.dart
@@ -1,12 +1,11 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat/chat.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
class TypingIndicators extends StatelessWidget {
final ChatController controller;
diff --git a/lib/pages/chat_access_settings/chat_access_settings_controller.dart b/lib/pages/chat_access_settings/chat_access_settings_controller.dart
index 93f5cda0..e090e863 100644
--- a/lib/pages/chat_access_settings/chat_access_settings_controller.dart
+++ b/lib/pages/chat_access_settings/chat_access_settings_controller.dart
@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart' hide Visibility;
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_page.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
@@ -11,6 +6,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart' hide Visibility;
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class ChatAccessSettings extends StatefulWidget {
final String roomId;
diff --git a/lib/pages/chat_access_settings/chat_access_settings_page.dart b/lib/pages/chat_access_settings/chat_access_settings_page.dart
index 5c1c55c6..6f659d89 100644
--- a/lib/pages/chat_access_settings/chat_access_settings_page.dart
+++ b/lib/pages/chat_access_settings/chat_access_settings_page.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart' hide Visibility;
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_access_settings/chat_access_settings_controller.dart';
import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart' hide Visibility;
+import 'package:matrix/matrix.dart';
class ChatAccessSettingsPageView extends StatelessWidget {
final ChatAccessSettingsController controller;
diff --git a/lib/pages/chat_details/chat_details.dart b/lib/pages/chat_details/chat_details.dart
index b9a02690..d227e24e 100644
--- a/lib/pages/chat_details/chat_details.dart
+++ b/lib/pages/chat_details/chat_details.dart
@@ -1,10 +1,5 @@
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
-import 'package:image_picker/image_picker.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_details/chat_details_view.dart';
import 'package:fluffychat/pages/settings/settings.dart';
@@ -15,6 +10,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:image_picker/image_picker.dart';
+import 'package:matrix/matrix.dart';
class ChatDetails extends StatefulWidget {
final String roomId;
diff --git a/lib/pages/chat_details/chat_details_view.dart b/lib/pages/chat_details/chat_details_view.dart
index e17e21a8..4260ca5b 100644
--- a/lib/pages/chat_details/chat_details_view.dart
+++ b/lib/pages/chat_details/chat_details_view.dart
@@ -1,9 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_details/chat_details.dart';
import 'package:fluffychat/pages/chat_details/participant_list_item.dart';
@@ -13,6 +7,11 @@ import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/chat_settings_popup_menu.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/url_launcher.dart';
import '../../widgets/mxc_image_viewer.dart';
import '../../widgets/qr_code_viewer.dart';
diff --git a/lib/pages/chat_details/participant_list_item.dart b/lib/pages/chat_details/participant_list_item.dart
index 54dcf8be..2a6ffa89 100644
--- a/lib/pages/chat_details/participant_list_item.dart
+++ b/lib/pages/chat_details/participant_list_item.dart
@@ -1,10 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/member_actions_popup_menu_button.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/avatar.dart';
class ParticipantListItem extends StatelessWidget {
diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart
index d8db6f25..efcaf751 100644
--- a/lib/pages/chat_encryption_settings/chat_encryption_settings.dart
+++ b/lib/pages/chat_encryption_settings/chat_encryption_settings.dart
@@ -1,14 +1,13 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings_view.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
+
import '../key_verification/key_verification_dialog.dart';
class ChatEncryptionSettings extends StatefulWidget {
diff --git a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart
index 03309d17..5ed1eb3c 100644
--- a/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart
+++ b/lib/pages/chat_encryption_settings/chat_encryption_settings_view.dart
@@ -1,16 +1,14 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_encryption_settings/chat_encryption_settings.dart';
import 'package:fluffychat/utils/beautify_string_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher_string.dart';
class ChatEncryptionSettingsView extends StatelessWidget {
final ChatEncryptionSettingsController controller;
diff --git a/lib/pages/chat_list/chat_list.dart b/lib/pages/chat_list/chat_list.dart
index 30aac367..bb00e694 100644
--- a/lib/pages/chat_list/chat_list.dart
+++ b/lib/pages/chat_list/chat_list.dart
@@ -1,17 +1,7 @@
import 'dart:async';
import 'dart:developer';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:cross_file/cross_file.dart';
-import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart' as sdk;
-import 'package:matrix/matrix.dart';
-import 'package:receive_sharing_intent/receive_sharing_intent.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
@@ -26,6 +16,15 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/share_scaffold_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart' as sdk;
+import 'package:matrix/matrix.dart';
+import 'package:receive_sharing_intent/receive_sharing_intent.dart';
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../../../utils/account_bundles.dart';
import '../../config/setting_keys.dart';
import '../../utils/url_launcher.dart';
@@ -307,13 +306,11 @@ class ChatListController extends State
void _processIncomingSharedMedia(List files) {
if (files.isEmpty) return;
-
+ inspect(files);
if (files.singleOrNull?.path.startsWith(AppConfig.deepLinkPrefix) == true) {
return;
}
- inspect(files);
-
showScaffoldDialog(
context: context,
builder: (context) => ShareScaffoldDialog(
diff --git a/lib/pages/chat_list/chat_list_body.dart b/lib/pages/chat_list/chat_list_body.dart
index ba1fee31..8489128f 100644
--- a/lib/pages/chat_list/chat_list_body.dart
+++ b/lib/pages/chat_list/chat_list_body.dart
@@ -1,8 +1,3 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/chat_list.dart';
@@ -14,6 +9,10 @@ import 'package:fluffychat/pages/chat_list/status_msg_list.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/public_room_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
import '../../widgets/adaptive_dialogs/user_dialog.dart';
import '../../widgets/matrix.dart';
diff --git a/lib/pages/chat_list/chat_list_header.dart b/lib/pages/chat_list/chat_list_header.dart
index fa1b9ff1..adf695a1 100644
--- a/lib/pages/chat_list/chat_list_header.dart
+++ b/lib/pages/chat_list/chat_list_header.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/chat_list.dart';
import 'package:fluffychat/pages/chat_list/client_chooser_button.dart';
import 'package:fluffychat/utils/sync_status_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
class ChatListHeader extends StatelessWidget implements PreferredSizeWidget {
diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart
index abe0cb87..3cc410e8 100644
--- a/lib/pages/chat_list/chat_list_item.dart
+++ b/lib/pages/chat_list/chat_list_item.dart
@@ -1,7 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/unread_bubble.dart';
@@ -10,6 +6,9 @@ import 'package:fluffychat/utils/room_status_extension.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
import '../../utils/date_time_extension.dart';
import '../../widgets/avatar.dart';
diff --git a/lib/pages/chat_list/chat_list_view.dart b/lib/pages/chat_list/chat_list_view.dart
index 3c332ce4..09d85ef5 100644
--- a/lib/pages/chat_list/chat_list_view.dart
+++ b/lib/pages/chat_list/chat_list_view.dart
@@ -1,10 +1,10 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/chat_list/chat_list.dart';
import 'package:fluffychat/pages/chat_list/start_chat_fab.dart';
import 'package:fluffychat/widgets/navigation_rail.dart';
+import 'package:flutter/material.dart';
+
import 'chat_list_body.dart';
class ChatListView extends StatelessWidget {
diff --git a/lib/pages/chat_list/client_chooser_button.dart b/lib/pages/chat_list/client_chooser_button.dart
index fdf196d8..64d7d08f 100644
--- a/lib/pages/chat_list/client_chooser_button.dart
+++ b/lib/pages/chat_list/client_chooser_button.dart
@@ -1,14 +1,13 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../../utils/fluffy_share.dart';
import 'chat_list.dart';
diff --git a/lib/pages/chat_list/navi_rail_item.dart b/lib/pages/chat_list/navi_rail_item.dart
index b0c50a92..b9feba5d 100644
--- a/lib/pages/chat_list/navi_rail_item.dart
+++ b/lib/pages/chat_list/navi_rail_item.dart
@@ -1,11 +1,10 @@
-import 'package:flutter/material.dart';
-
import 'package:badges/badges.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
import 'package:fluffychat/widgets/unread_rooms_badge.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
class NaviRailItem extends StatelessWidget {
diff --git a/lib/pages/chat_list/space_view.dart b/lib/pages/chat_list/space_view.dart
index 72c9446a..b24f1993 100644
--- a/lib/pages/chat_list/space_view.dart
+++ b/lib/pages/chat_list/space_view.dart
@@ -1,13 +1,7 @@
import 'dart:async';
import 'dart:convert';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart' as sdk;
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -20,6 +14,10 @@ import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart' as sdk;
+import 'package:matrix/matrix.dart';
enum SpaceChildAction {
mute,
diff --git a/lib/pages/chat_list/start_chat_fab.dart b/lib/pages/chat_list/start_chat_fab.dart
index 3f206b2a..a05473a4 100644
--- a/lib/pages/chat_list/start_chat_fab.dart
+++ b/lib/pages/chat_list/start_chat_fab.dart
@@ -1,8 +1,6 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
class StartChatFab extends StatelessWidget {
const StartChatFab({super.key});
diff --git a/lib/pages/chat_list/status_msg_list.dart b/lib/pages/chat_list/status_msg_list.dart
index 7677e031..eccd3008 100644
--- a/lib/pages/chat_list/status_msg_list.dart
+++ b/lib/pages/chat_list/status_msg_list.dart
@@ -1,13 +1,12 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/adaptive_dialogs/user_dialog.dart';
class StatusMessageList extends StatelessWidget {
diff --git a/lib/pages/chat_list/unread_bubble.dart b/lib/pages/chat_list/unread_bubble.dart
index 9dfd9249..c7839b07 100644
--- a/lib/pages/chat_list/unread_bubble.dart
+++ b/lib/pages/chat_list/unread_bubble.dart
@@ -1,8 +1,6 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class UnreadBubble extends StatelessWidget {
final Room room;
diff --git a/lib/pages/chat_members/chat_members_view.dart b/lib/pages/chat_members/chat_members_view.dart
index 81e15ea6..d682743a 100644
--- a/lib/pages/chat_members/chat_members_view.dart
+++ b/lib/pages/chat_members/chat_members_view.dart
@@ -1,10 +1,9 @@
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:flutter/material.dart';
-
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/localized_exception_extension.dart';
import '../../widgets/layouts/max_width_body.dart';
import '../../widgets/matrix.dart';
import '../chat_details/participant_list_item.dart';
diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart
index e3dbfde4..f7d342fe 100644
--- a/lib/pages/chat_permissions_settings/chat_permissions_settings.dart
+++ b/lib/pages/chat_permissions_settings/chat_permissions_settings.dart
@@ -1,15 +1,11 @@
-import 'dart:developer';
-
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings_view.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/permission_slider_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class ChatPermissionsSettings extends StatefulWidget {
const ChatPermissionsSettings({super.key});
@@ -51,7 +47,6 @@ class ChatPermissionsSettingsController extends State {
} else {
content[key] = newLevel;
}
- inspect(content);
await showFutureLoadingDialog(
context: context,
future: () => room.client.setRoomStateWithKey(
diff --git a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart
index e904403a..1b7a6f51 100644
--- a/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart
+++ b/lib/pages/chat_permissions_settings/chat_permissions_settings_view.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_permissions_settings/chat_permissions_settings.dart';
import 'package:fluffychat/pages/chat_permissions_settings/permission_list_tile.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class ChatPermissionsSettingsView extends StatelessWidget {
final ChatPermissionsSettingsController controller;
diff --git a/lib/pages/chat_permissions_settings/permission_list_tile.dart b/lib/pages/chat_permissions_settings/permission_list_tile.dart
index 7344ba5b..6769367b 100644
--- a/lib/pages/chat_permissions_settings/permission_list_tile.dart
+++ b/lib/pages/chat_permissions_settings/permission_list_tile.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class PermissionsListTile extends StatelessWidget {
final String permissionKey;
diff --git a/lib/pages/chat_search/chat_search_files_tab.dart b/lib/pages/chat_search/chat_search_files_tab.dart
index 4aa95225..77268e19 100644
--- a/lib/pages/chat_search/chat_search_files_tab.dart
+++ b/lib/pages/chat_search/chat_search_files_tab.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_search/search_footer.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class ChatSearchFilesTab extends StatelessWidget {
final Room room;
diff --git a/lib/pages/chat_search/chat_search_images_tab.dart b/lib/pages/chat_search/chat_search_images_tab.dart
index 5b018ccc..7ec4a394 100644
--- a/lib/pages/chat_search/chat_search_images_tab.dart
+++ b/lib/pages/chat_search/chat_search_images_tab.dart
@@ -1,13 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:intl/intl.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pages/chat/events/video_player.dart';
import 'package:fluffychat/pages/chat_search/search_footer.dart';
import 'package:fluffychat/pages/image_viewer/image_viewer.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:intl/intl.dart';
+import 'package:matrix/matrix.dart';
class ChatSearchImagesTab extends StatelessWidget {
final Room room;
diff --git a/lib/pages/chat_search/chat_search_message_tab.dart b/lib/pages/chat_search/chat_search_message_tab.dart
index c58a2de3..c590eb08 100644
--- a/lib/pages/chat_search/chat_search_message_tab.dart
+++ b/lib/pages/chat_search/chat_search_message_tab.dart
@@ -1,15 +1,13 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_search/search_footer.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/avatar.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class ChatSearchMessageTab extends StatelessWidget {
final String searchQuery;
diff --git a/lib/pages/chat_search/chat_search_page.dart b/lib/pages/chat_search/chat_search_page.dart
index 579a2103..08d2d6a9 100644
--- a/lib/pages/chat_search/chat_search_page.dart
+++ b/lib/pages/chat_search/chat_search_page.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/pages/chat_search/chat_search_view.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class ChatSearchPage extends StatefulWidget {
final String roomId;
diff --git a/lib/pages/chat_search/chat_search_view.dart b/lib/pages/chat_search/chat_search_view.dart
index 278478fa..4632feb6 100644
--- a/lib/pages/chat_search/chat_search_view.dart
+++ b/lib/pages/chat_search/chat_search_view.dart
@@ -1,5 +1,3 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_search/chat_search_files_tab.dart';
@@ -8,6 +6,7 @@ import 'package:fluffychat/pages/chat_search/chat_search_message_tab.dart';
import 'package:fluffychat/pages/chat_search/chat_search_page.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
class ChatSearchView extends StatelessWidget {
final ChatSearchController controller;
diff --git a/lib/pages/chat_search/search_footer.dart b/lib/pages/chat_search/search_footer.dart
index cac19c4e..732ee3c0 100644
--- a/lib/pages/chat_search/search_footer.dart
+++ b/lib/pages/chat_search/search_footer.dart
@@ -1,7 +1,6 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
+import 'package:flutter/material.dart';
class SearchFooter extends StatelessWidget {
final DateTime? searchedUntil;
diff --git a/lib/pages/device_settings/device_settings.dart b/lib/pages/device_settings/device_settings.dart
index 014359a8..05eb1efb 100644
--- a/lib/pages/device_settings/device_settings.dart
+++ b/lib/pages/device_settings/device_settings.dart
@@ -1,16 +1,16 @@
-import 'package:flutter/material.dart';
-
+import 'package:async/async.dart' show Result;
import 'package:collection/collection.dart' show IterableExtension;
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/device_settings/device_settings_view.dart';
import 'package:fluffychat/pages/key_verification/key_verification_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart' hide Result;
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../../widgets/matrix.dart';
class DevicesSettings extends StatefulWidget {
@@ -49,8 +49,8 @@ class DevicesSettingsController extends State {
Future removeDevicesAction(List devices) async {
final client = Matrix.of(context).client;
- final wellKnown = await client.getWellknown();
- final accountManageUrl = wellKnown.additionalProperties
+ final wellKnown = await Result.capture(client.getWellknown());
+ final accountManageUrl = wellKnown.asValue?.value.additionalProperties
.tryGetMap('org.matrix.msc2965.authentication')
?.tryGet('account');
if (accountManageUrl != null) {
diff --git a/lib/pages/device_settings/device_settings_view.dart b/lib/pages/device_settings/device_settings_view.dart
index 232ae06c..334cd04e 100644
--- a/lib/pages/device_settings/device_settings_view.dart
+++ b/lib/pages/device_settings/device_settings_view.dart
@@ -1,9 +1,9 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/device_settings/device_settings.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+
import 'user_device_list_item.dart';
class DevicesSettingsView extends StatelessWidget {
diff --git a/lib/pages/device_settings/user_device_list_item.dart b/lib/pages/device_settings/user_device_list_item.dart
index 095a4335..e0b645a1 100644
--- a/lib/pages/device_settings/user_device_list_item.dart
+++ b/lib/pages/device_settings/user_device_list_item.dart
@@ -1,10 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/date_time_extension.dart';
import '../../utils/matrix_sdk_extensions/device_extension.dart';
import '../../widgets/matrix.dart';
diff --git a/lib/pages/dialer/dialer.dart b/lib/pages/dialer/dialer.dart
index f7af5b54..774700fc 100644
--- a/lib/pages/dialer/dialer.dart
+++ b/lib/pages/dialer/dialer.dart
@@ -19,21 +19,20 @@
import 'dart:async';
import 'dart:math';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:fluffychat/utils/voip/video_renderer.dart';
+import 'package:fluffychat/widgets/avatar.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' hide VideoRenderer;
import 'package:just_audio/just_audio.dart';
import 'package:matrix/matrix.dart';
import 'package:wakelock_plus/wakelock_plus.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
-import 'package:fluffychat/utils/voip/video_renderer.dart';
-import 'package:fluffychat/widgets/avatar.dart';
import 'pip/pip_view.dart';
class _StreamView extends StatelessWidget {
diff --git a/lib/pages/dialer/pip/pip_view.dart b/lib/pages/dialer/pip/pip_view.dart
index 804ee837..d4e78d66 100644
--- a/lib/pages/dialer/pip/pip_view.dart
+++ b/lib/pages/dialer/pip/pip_view.dart
@@ -1,6 +1,6 @@
+import 'package:fluffychat/config/themes.dart';
import 'package:flutter/material.dart';
-import 'package:fluffychat/config/themes.dart';
import 'dismiss_keyboard.dart';
class PIPView extends StatefulWidget {
diff --git a/lib/pages/image_viewer/image_viewer.dart b/lib/pages/image_viewer/image_viewer.dart
index 98854f9c..0f62f192 100644
--- a/lib/pages/image_viewer/image_viewer.dart
+++ b/lib/pages/image_viewer/image_viewer.dart
@@ -1,13 +1,12 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/pages/image_viewer/image_viewer_view.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/show_scaffold_dialog.dart';
import 'package:fluffychat/widgets/share_scaffold_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/matrix_sdk_extensions/event_extension.dart';
class ImageViewer extends StatefulWidget {
diff --git a/lib/pages/image_viewer/image_viewer_view.dart b/lib/pages/image_viewer/image_viewer_view.dart
index 7eb52949..dea0daf8 100644
--- a/lib/pages/image_viewer/image_viewer_view.dart
+++ b/lib/pages/image_viewer/image_viewer_view.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/image_viewer/video_player.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/hover_builder.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'image_viewer.dart';
class ImageViewerView extends StatelessWidget {
diff --git a/lib/pages/image_viewer/video_player.dart b/lib/pages/image_viewer/video_player.dart
index f0e7d9e0..aa37c33f 100644
--- a/lib/pages/image_viewer/video_player.dart
+++ b/lib/pages/image_viewer/video_player.dart
@@ -1,15 +1,14 @@
import 'dart:io';
+import 'package:chewie/chewie.dart';
+import 'package:fluffychat/utils/localized_exception_extension.dart';
+import 'package:fluffychat/widgets/blur_hash.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
-import 'package:chewie/chewie.dart';
import 'package:matrix/matrix.dart';
import 'package:path_provider/path_provider.dart';
import 'package:video_player/video_player.dart';
-import 'package:fluffychat/utils/localized_exception_extension.dart';
-import 'package:fluffychat/widgets/blur_hash.dart';
import '../../../utils/error_reporter.dart';
import '../../widgets/mxc_image.dart';
diff --git a/lib/pages/intro/flows/restore_backup_flow.dart b/lib/pages/intro/flows/restore_backup_flow.dart
index c8f18052..2e8e6d00 100644
--- a/lib/pages/intro/flows/restore_backup_flow.dart
+++ b/lib/pages/intro/flows/restore_backup_flow.dart
@@ -1,8 +1,7 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
Future restoreBackupFlow(BuildContext context) async {
final picked = await selectFiles(context);
diff --git a/lib/pages/intro/intro_page.dart b/lib/pages/intro/intro_page.dart
index 4d56fc1a..f57878a5 100644
--- a/lib/pages/intro/intro_page.dart
+++ b/lib/pages/intro/intro_page.dart
@@ -1,15 +1,13 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:go_router/go_router.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/intro/flows/restore_backup_flow.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:go_router/go_router.dart';
+import 'package:url_launcher/url_launcher_string.dart';
class IntroPage extends StatelessWidget {
final bool isLoading, hasPresetHomeserver;
diff --git a/lib/pages/intro/intro_page_presenter.dart b/lib/pages/intro/intro_page_presenter.dart
index 9188a4db..27cb86bb 100644
--- a/lib/pages/intro/intro_page_presenter.dart
+++ b/lib/pages/intro/intro_page_presenter.dart
@@ -1,14 +1,5 @@
import 'dart:convert';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix_api_lite/utils/logs.dart';
-import 'package:matrix/msc_extensions/msc_2964_oidc_login_flow/msc_2964_oidc_login_flow.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-import 'package:universal_html/universal_html.dart' as web;
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/pages/intro/intro_page.dart';
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
@@ -16,6 +7,13 @@ import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/oidc_session_json_extension.dart';
import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix_api_lite/utils/logs.dart';
+import 'package:matrix/msc_extensions/msc_2964_oidc_login_flow/msc_2964_oidc_login_flow.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:universal_html/universal_html.dart' as web;
class IntroPagePresenter extends StatefulWidget {
const IntroPagePresenter({super.key});
diff --git a/lib/pages/invitation_selection/invitation_selection.dart b/lib/pages/invitation_selection/invitation_selection.dart
index b662829e..ff769106 100644
--- a/lib/pages/invitation_selection/invitation_selection.dart
+++ b/lib/pages/invitation_selection/invitation_selection.dart
@@ -1,13 +1,12 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/invitation_selection/invitation_selection_view.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/localized_exception_extension.dart';
class InvitationSelection extends StatefulWidget {
diff --git a/lib/pages/invitation_selection/invitation_selection_view.dart b/lib/pages/invitation_selection/invitation_selection_view.dart
index 562713d8..514ec2a6 100644
--- a/lib/pages/invitation_selection/invitation_selection_view.dart
+++ b/lib/pages/invitation_selection/invitation_selection_view.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/invitation_selection/invitation_selection.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/adaptive_dialogs/user_dialog.dart';
class InvitationSelectionView extends StatelessWidget {
diff --git a/lib/pages/key_verification/key_verification_dialog.dart b/lib/pages/key_verification/key_verification_dialog.dart
index 1b04b8dd..d1329992 100644
--- a/lib/pages/key_verification/key_verification_dialog.dart
+++ b/lib/pages/key_verification/key_verification_dialog.dart
@@ -1,17 +1,15 @@
import 'dart:convert';
import 'dart:ui';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
class KeyVerificationDialog extends StatefulWidget {
Future show(BuildContext context) => showAdaptiveDialog(
diff --git a/lib/pages/login/login.dart b/lib/pages/login/login.dart
index b1eecd0b..8fb9ec73 100644
--- a/lib/pages/login/login.dart
+++ b/lib/pages/login/login.dart
@@ -1,16 +1,15 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/platform_infos.dart';
import 'login_view.dart';
diff --git a/lib/pages/login/login_view.dart b/lib/pages/login/login_view.dart
index f0352640..738d8b08 100644
--- a/lib/pages/login/login_view.dart
+++ b/lib/pages/login/login_view.dart
@@ -1,7 +1,7 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
+import 'package:flutter/material.dart';
+
import 'login.dart';
class LoginView extends StatelessWidget {
diff --git a/lib/pages/new_group/new_group.dart b/lib/pages/new_group/new_group.dart
index f1945e47..538edab7 100644
--- a/lib/pages/new_group/new_group.dart
+++ b/lib/pages/new_group/new_group.dart
@@ -1,16 +1,14 @@
import 'dart:typed_data';
-import 'package:flutter/material.dart';
-
import 'package:file_picker/file_picker.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart' as sdk;
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/new_group/new_group_view.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart' as sdk;
+import 'package:matrix/matrix.dart';
class NewGroup extends StatefulWidget {
final CreateGroupType createGroupType;
diff --git a/lib/pages/new_group/new_group_view.dart b/lib/pages/new_group/new_group_view.dart
index 61f86736..d92dfad4 100644
--- a/lib/pages/new_group/new_group_view.dart
+++ b/lib/pages/new_group/new_group_view.dart
@@ -1,11 +1,10 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/new_group/new_group.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
class NewGroupView extends StatelessWidget {
final NewGroupController controller;
diff --git a/lib/pages/new_private_chat/new_private_chat.dart b/lib/pages/new_private_chat/new_private_chat.dart
index e5d8e202..faf30114 100644
--- a/lib/pages/new_private_chat/new_private_chat.dart
+++ b/lib/pages/new_private_chat/new_private_chat.dart
@@ -1,11 +1,6 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:device_info_plus/device_info_plus.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/new_private_chat/new_private_chat_view.dart';
import 'package:fluffychat/pages/new_private_chat/qr_scanner_modal.dart';
@@ -14,6 +9,10 @@ import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/adaptive_dialogs/user_dialog.dart';
class NewPrivateChat extends StatefulWidget {
diff --git a/lib/pages/new_private_chat/new_private_chat_view.dart b/lib/pages/new_private_chat/new_private_chat_view.dart
index d72ba4c2..905ca0ec 100644
--- a/lib/pages/new_private_chat/new_private_chat_view.dart
+++ b/lib/pages/new_private_chat/new_private_chat_view.dart
@@ -1,9 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:pretty_qr_code/pretty_qr_code.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -14,6 +8,11 @@ import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:pretty_qr_code/pretty_qr_code.dart';
+
import '../../widgets/qr_code_viewer.dart';
class NewPrivateChatView extends StatelessWidget {
diff --git a/lib/pages/new_private_chat/qr_scanner_modal.dart b/lib/pages/new_private_chat/qr_scanner_modal.dart
index b47dc566..53a822b0 100644
--- a/lib/pages/new_private_chat/qr_scanner_modal.dart
+++ b/lib/pages/new_private_chat/qr_scanner_modal.dart
@@ -1,11 +1,9 @@
import 'dart:async';
import 'dart:io';
-import 'package:flutter/material.dart';
-
-import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:flutter/material.dart';
+import 'package:qr_code_scanner_plus/qr_code_scanner_plus.dart';
class QrScannerModal extends StatefulWidget {
final void Function(String) onScan;
diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart
index 8a05bbe9..7dfc3ead 100644
--- a/lib/pages/settings/settings.dart
+++ b/lib/pages/settings/settings.dart
@@ -1,15 +1,8 @@
import 'dart:async';
import 'dart:typed_data';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
import 'package:file_picker/file_picker.dart';
-import 'package:go_router/go_router.dart';
-import 'package:image_picker/image_picker.dart';
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@@ -18,6 +11,12 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/avatar_crop_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:image_picker/image_picker.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
import 'settings_view.dart';
diff --git a/lib/pages/settings/settings_view.dart b/lib/pages/settings/settings_view.dart
index e8ad37df..00b3d64f 100644
--- a/lib/pages/settings/settings_view.dart
+++ b/lib/pages/settings/settings_view.dart
@@ -1,16 +1,15 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../../widgets/mxc_image_viewer.dart';
import 'settings.dart';
diff --git a/lib/pages/settings_3pid/settings_3pid.dart b/lib/pages/settings_3pid/settings_3pid.dart
index 765399ec..18f89be7 100644
--- a/lib/pages/settings_3pid/settings_3pid.dart
+++ b/lib/pages/settings_3pid/settings_3pid.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'settings_3pid_view.dart';
class Settings3Pid extends StatefulWidget {
diff --git a/lib/pages/settings_3pid/settings_3pid_view.dart b/lib/pages/settings_3pid/settings_3pid_view.dart
index d01fdc6b..324b1813 100644
--- a/lib/pages/settings_3pid/settings_3pid_view.dart
+++ b/lib/pages/settings_3pid/settings_3pid_view.dart
@@ -1,11 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_3pid/settings_3pid.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class Settings3PidView extends StatelessWidget {
final Settings3PidController controller;
diff --git a/lib/pages/settings_chat/settings_chat_view.dart b/lib/pages/settings_chat/settings_chat_view.dart
index b125cf73..7e8aa9f7 100644
--- a/lib/pages/settings_chat/settings_chat_view.dart
+++ b/lib/pages/settings_chat/settings_chat_view.dart
@@ -1,7 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -9,6 +5,9 @@ import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/settings_switch_list_tile.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+
import 'settings_chat.dart';
class SettingsChatView extends StatelessWidget {
diff --git a/lib/pages/settings_emotes/import_archive_dialog.dart b/lib/pages/settings_emotes/import_archive_dialog.dart
index 46bca4d3..20b1ffde 100644
--- a/lib/pages/settings_emotes/import_archive_dialog.dart
+++ b/lib/pages/settings_emotes/import_archive_dialog.dart
@@ -1,17 +1,15 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:archive/archive.dart';
import 'package:collection/collection.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_emotes/settings_emotes.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
class ImportEmoteArchiveDialog extends StatefulWidget {
final EmotesSettingsController controller;
diff --git a/lib/pages/settings_emotes/settings_emotes.dart b/lib/pages/settings_emotes/settings_emotes.dart
index 8b8cb2f5..9825daa9 100644
--- a/lib/pages/settings_emotes/settings_emotes.dart
+++ b/lib/pages/settings_emotes/settings_emotes.dart
@@ -1,12 +1,8 @@
import 'dart:async';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
+import 'package:archive/archive.dart'
+ if (dart.library.io) 'package:archive/archive_io.dart';
import 'package:file_picker/file_picker.dart';
-import 'package:http/http.dart' hide Client;
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/file_selector.dart';
@@ -14,13 +10,15 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dar
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:http/http.dart' hide Client;
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
import 'import_archive_dialog.dart';
import 'settings_emotes_view.dart';
-import 'package:archive/archive.dart'
- if (dart.library.io) 'package:archive/archive_io.dart';
-
class EmotesSettings extends StatefulWidget {
final String? roomId;
const EmotesSettings({required this.roomId, super.key});
diff --git a/lib/pages/settings_emotes/settings_emotes_view.dart b/lib/pages/settings_emotes/settings_emotes_view.dart
index a5baf397..d4e6411a 100644
--- a/lib/pages/settings_emotes/settings_emotes_view.dart
+++ b/lib/pages/settings_emotes/settings_emotes_view.dart
@@ -1,14 +1,13 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
import 'package:fluffychat/widgets/mxc_image_viewer.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
import 'settings_emotes.dart';
diff --git a/lib/pages/settings_homeserver/settings_homeserver_view.dart b/lib/pages/settings_homeserver/settings_homeserver_view.dart
index 195c1701..d2027b25 100644
--- a/lib/pages/settings_homeserver/settings_homeserver_view.dart
+++ b/lib/pages/settings_homeserver/settings_homeserver_view.dart
@@ -1,16 +1,15 @@
import 'dart:convert';
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../../widgets/matrix.dart';
import 'settings_homeserver.dart';
diff --git a/lib/pages/settings_ignore_list/settings_ignore_list.dart b/lib/pages/settings_ignore_list/settings_ignore_list.dart
index 3bcea3df..940e0677 100644
--- a/lib/pages/settings_ignore_list/settings_ignore_list.dart
+++ b/lib/pages/settings_ignore_list/settings_ignore_list.dart
@@ -1,9 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
import 'settings_ignore_list_view.dart';
diff --git a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart
index 7dee64d1..c2cb7e3f 100644
--- a/lib/pages/settings_ignore_list/settings_ignore_list_view.dart
+++ b/lib/pages/settings_ignore_list/settings_ignore_list_view.dart
@@ -1,8 +1,8 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+
import '../../widgets/matrix.dart';
import 'settings_ignore_list.dart';
diff --git a/lib/pages/settings_notifications/push_rule_extensions.dart b/lib/pages/settings_notifications/push_rule_extensions.dart
index 103fbc10..8885de2d 100644
--- a/lib/pages/settings_notifications/push_rule_extensions.dart
+++ b/lib/pages/settings_notifications/push_rule_extensions.dart
@@ -1,6 +1,5 @@
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:matrix/matrix.dart';
extension PushRuleExtension on PushRule {
String getPushRuleName(L10n l10n) {
diff --git a/lib/pages/settings_notifications/settings_notifications.dart b/lib/pages/settings_notifications/settings_notifications.dart
index 05c9e3e5..1f61c33b 100644
--- a/lib/pages/settings_notifications/settings_notifications.dart
+++ b/lib/pages/settings_notifications/settings_notifications.dart
@@ -1,9 +1,5 @@
import 'dart:convert';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_notifications/push_rule_extensions.dart';
@@ -12,6 +8,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'
import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../widgets/matrix.dart';
import 'settings_notifications_view.dart';
diff --git a/lib/pages/settings_notifications/settings_notifications_view.dart b/lib/pages/settings_notifications/settings_notifications_view.dart
index 8259cfe2..5464b724 100644
--- a/lib/pages/settings_notifications/settings_notifications_view.dart
+++ b/lib/pages/settings_notifications/settings_notifications_view.dart
@@ -1,11 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_notifications/push_rule_extensions.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/localized_exception_extension.dart';
import '../../widgets/matrix.dart';
import 'settings_notifications.dart';
diff --git a/lib/pages/settings_password/settings_password.dart b/lib/pages/settings_password/settings_password.dart
index d2fe2621..acceda75 100644
--- a/lib/pages/settings_password/settings_password.dart
+++ b/lib/pages/settings_password/settings_password.dart
@@ -1,11 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_password/settings_password_view.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
class SettingsPassword extends StatefulWidget {
const SettingsPassword({super.key});
diff --git a/lib/pages/settings_password/settings_password_view.dart b/lib/pages/settings_password/settings_password_view.dart
index fc0904a9..593712e2 100644
--- a/lib/pages/settings_password/settings_password_view.dart
+++ b/lib/pages/settings_password/settings_password_view.dart
@@ -1,10 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/settings_password/settings_password.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
class SettingsPasswordView extends StatelessWidget {
final SettingsPasswordController controller;
diff --git a/lib/pages/settings_security/settings_security.dart b/lib/pages/settings_security/settings_security.dart
index 25c17db2..57ea44f3 100644
--- a/lib/pages/settings_security/settings_security.dart
+++ b/lib/pages/settings_security/settings_security.dart
@@ -1,7 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
@@ -9,6 +5,9 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'settings_security_view.dart';
class SettingsSecurity extends StatefulWidget {
diff --git a/lib/pages/settings_security/settings_security_view.dart b/lib/pages/settings_security/settings_security_view.dart
index 2d38a5c4..05d4599d 100644
--- a/lib/pages/settings_security/settings_security_view.dart
+++ b/lib/pages/settings_security/settings_security_view.dart
@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
@@ -12,6 +7,10 @@ import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/settings_switch_list_tile.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import 'settings_security.dart';
class SettingsSecurityView extends StatelessWidget {
diff --git a/lib/pages/settings_style/settings_style.dart b/lib/pages/settings_style/settings_style.dart
index 273d2684..0feff1c4 100644
--- a/lib/pages/settings_style/settings_style.dart
+++ b/lib/pages/settings_style/settings_style.dart
@@ -1,12 +1,11 @@
-import 'package:flutter/material.dart';
-
import 'package:file_picker/file_picker.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/account_config.dart';
import 'package:fluffychat/utils/file_selector.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/theme_builder.dart';
+import 'package:flutter/material.dart';
+
import '../../widgets/matrix.dart';
import 'settings_style_view.dart';
diff --git a/lib/pages/settings_style/settings_style_view.dart b/lib/pages/settings_style/settings_style_view.dart
index e2945077..5cb9d4d1 100644
--- a/lib/pages/settings_style/settings_style_view.dart
+++ b/lib/pages/settings_style/settings_style_view.dart
@@ -1,10 +1,6 @@
import 'dart:ui';
-import 'package:flutter/material.dart';
-
import 'package:dynamic_color/dynamic_color.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -15,6 +11,9 @@ import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/layouts/max_width_body.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/app_config.dart';
import '../../widgets/settings_switch_list_tile.dart';
import 'settings_style.dart';
diff --git a/lib/pages/sign_in/sign_in_page.dart b/lib/pages/sign_in/sign_in_page.dart
index 276cd264..c5ee696b 100644
--- a/lib/pages/sign_in/sign_in_page.dart
+++ b/lib/pages/sign_in/sign_in_page.dart
@@ -1,7 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -12,6 +8,8 @@ import 'package:fluffychat/utils/sign_in_flows/check_homeserver.dart';
import 'package:fluffychat/widgets/layouts/login_scaffold.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/view_model_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher_string.dart';
class SignInPage extends StatelessWidget {
final bool signUp;
diff --git a/lib/pages/sign_in/view_model/sign_in_state.dart b/lib/pages/sign_in/view_model/sign_in_state.dart
index 84213152..d72c715a 100644
--- a/lib/pages/sign_in/view_model/sign_in_state.dart
+++ b/lib/pages/sign_in/view_model/sign_in_state.dart
@@ -1,6 +1,5 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
+import 'package:flutter/material.dart';
class SignInState {
final PublicHomeserverData? selectedHomeserver;
diff --git a/lib/pages/sign_in/view_model/sign_in_view_model.dart b/lib/pages/sign_in/view_model/sign_in_view_model.dart
index 3f5fbfa5..3d453219 100644
--- a/lib/pages/sign_in/view_model/sign_in_view_model.dart
+++ b/lib/pages/sign_in/view_model/sign_in_view_model.dart
@@ -1,15 +1,13 @@
import 'dart:convert';
-import 'package:flutter/widgets.dart';
-
import 'package:collection/collection.dart';
-import 'package:matrix/matrix_api_lite/utils/logs.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
import 'package:fluffychat/pages/sign_in/view_model/sign_in_state.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/widgets.dart';
+import 'package:matrix/matrix_api_lite/utils/logs.dart';
class SignInViewModel extends ValueNotifier {
final MatrixState matrixService;
diff --git a/lib/utils/adaptive_bottom_sheet.dart b/lib/utils/adaptive_bottom_sheet.dart
index a0e187d3..f3563c59 100644
--- a/lib/utils/adaptive_bottom_sheet.dart
+++ b/lib/utils/adaptive_bottom_sheet.dart
@@ -1,9 +1,8 @@
import 'dart:math';
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
+import 'package:flutter/material.dart';
Future showAdaptiveBottomSheet({
required BuildContext context,
diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart
index 2713073b..98f81eeb 100644
--- a/lib/utils/background_push.dart
+++ b/lib/utils/background_push.dart
@@ -23,9 +23,14 @@ import 'dart:io';
import 'dart:isolate';
import 'dart:ui';
+//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/main.dart';
+import 'package:fluffychat/utils/notification_background_handler.dart';
+import 'package:fluffychat/utils/push_helper.dart';
+import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_new_badger/flutter_new_badger.dart';
import 'package:http/http.dart' as http;
@@ -33,18 +38,11 @@ import 'package:matrix/matrix.dart';
import 'package:unifiedpush/unifiedpush.dart';
import 'package:unifiedpush_ui/unifiedpush_ui.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/main.dart';
-import 'package:fluffychat/utils/notification_background_handler.dart';
-import 'package:fluffychat/utils/push_helper.dart';
-import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import '../config/app_config.dart';
import '../config/setting_keys.dart';
import '../widgets/matrix.dart';
import 'platform_infos.dart';
-//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
-
class BackgroundPush {
static BackgroundPush? _instance;
final FlutterLocalNotificationsPlugin _flutterLocalNotificationsPlugin =
diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart
index bdb33f95..9792523b 100644
--- a/lib/utils/client_manager.dart
+++ b/lib/utils/client_manager.dart
@@ -1,9 +1,14 @@
import 'dart:io';
-import 'package:flutter/foundation.dart';
-
import 'package:collection/collection.dart';
import 'package:desktop_notifications/desktop_notifications.dart';
+import 'package:fluffychat/config/setting_keys.dart';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/custom_http_client.dart';
+import 'package:fluffychat/utils/custom_image_resizer.dart';
+import 'package:fluffychat/utils/init_with_restore.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/foundation.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod;
import 'package:matrix/encryption/utils/key_verification.dart';
@@ -11,12 +16,6 @@ import 'package:matrix/matrix.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:universal_html/html.dart' as html;
-import 'package:fluffychat/config/setting_keys.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/custom_http_client.dart';
-import 'package:fluffychat/utils/custom_image_resizer.dart';
-import 'package:fluffychat/utils/init_with_restore.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
import 'matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart';
abstract class ClientManager {
diff --git a/lib/utils/custom_http_client.dart b/lib/utils/custom_http_client.dart
index 66b1dcad..0bd9961d 100644
--- a/lib/utils/custom_http_client.dart
+++ b/lib/utils/custom_http_client.dart
@@ -1,13 +1,12 @@
import 'dart:convert';
import 'dart:io';
+import 'package:fluffychat/config/isrg_x1.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
import 'package:http/http.dart' as http;
import 'package:http/io_client.dart';
import 'package:http/retry.dart' as retry;
-import 'package:fluffychat/config/isrg_x1.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
-
/// Custom Client to add an additional certificate. This is for the isrg X1
/// certificate which is needed for LetsEncrypt certificates. It is shipped
/// on Android since OS version 7.1. As long as we support older versions we
diff --git a/lib/utils/date_time_extension.dart b/lib/utils/date_time_extension.dart
index 508f13e2..7efed644 100644
--- a/lib/utils/date_time_extension.dart
+++ b/lib/utils/date_time_extension.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/material.dart';
-
-import 'package:intl/intl.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/material.dart';
+import 'package:intl/intl.dart';
/// Provides extra functionality for formatting the time.
extension DateTimeExtension on DateTime {
diff --git a/lib/utils/error_reporter.dart b/lib/utils/error_reporter.dart
index 670d2f8a..66e5540b 100644
--- a/lib/utils/error_reporter.dart
+++ b/lib/utils/error_reporter.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher.dart';
class ErrorReporter {
final BuildContext? context;
diff --git a/lib/utils/file_selector.dart b/lib/utils/file_selector.dart
index 97e229c2..a4aacc1d 100644
--- a/lib/utils/file_selector.dart
+++ b/lib/utils/file_selector.dart
@@ -1,10 +1,8 @@
-import 'package:flutter/widgets.dart';
-
import 'package:file_picker/file_picker.dart';
import 'package:file_selector/file_selector.dart';
-
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/widgets.dart';
Future> selectFiles(
BuildContext context, {
diff --git a/lib/utils/fluffy_share.dart b/lib/utils/fluffy_share.dart
index 0c72d284..45699616 100644
--- a/lib/utils/fluffy_share.dart
+++ b/lib/utils/fluffy_share.dart
@@ -1,10 +1,9 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:share_plus/share_plus.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:share_plus/share_plus.dart';
+
import '../widgets/matrix.dart';
abstract class FluffyShare {
diff --git a/lib/utils/init_with_restore.dart b/lib/utils/init_with_restore.dart
index 71cc7f8b..5bfa5e1e 100644
--- a/lib/utils/init_with_restore.dart
+++ b/lib/utils/init_with_restore.dart
@@ -1,14 +1,13 @@
import 'dart:convert';
import 'dart:ui';
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:matrix/matrix.dart';
class SessionBackup {
final String? olmAccount;
diff --git a/lib/utils/localized_exception_extension.dart b/lib/utils/localized_exception_extension.dart
index 0d8ff659..208d9424 100644
--- a/lib/utils/localized_exception_extension.dart
+++ b/lib/utils/localized_exception_extension.dart
@@ -1,15 +1,14 @@
import 'dart:io';
import 'dart:math';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/other_party_can_receive.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
-
import 'package:http/http.dart';
import 'package:matrix/encryption.dart';
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/other_party_can_receive.dart';
import 'uia_request_manager.dart';
extension LocalizedExceptionExtension on Object {
diff --git a/lib/utils/markdown_context_builder.dart b/lib/utils/markdown_context_builder.dart
index 57d44d4c..b893045a 100644
--- a/lib/utils/markdown_context_builder.dart
+++ b/lib/utils/markdown_context_builder.dart
@@ -1,7 +1,6 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
+import 'package:flutter/material.dart';
class MarkdownContextBuilder extends StatelessWidget {
final EditableTextState editableTextState;
diff --git a/lib/utils/matrix_sdk_extensions/event_extension.dart b/lib/utils/matrix_sdk_extensions/event_extension.dart
index 6f1138bf..84b9f2d8 100644
--- a/lib/utils/matrix_sdk_extensions/event_extension.dart
+++ b/lib/utils/matrix_sdk_extensions/event_extension.dart
@@ -1,13 +1,10 @@
-import 'dart:developer';
-
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
import 'package:async/async.dart' as async;
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/utils/size_string.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'matrix_file_extension.dart';
extension LocalizedBody on Event {
@@ -34,7 +31,6 @@ extension LocalizedBody on Event {
Future shareFile(BuildContext context) async {
final matrixFile = await _getFile(context);
- inspect(matrixFile);
matrixFile.result?.share(context);
}
diff --git a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart
index 0e9724a3..d0cd5b36 100644
--- a/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart
+++ b/lib/utils/matrix_sdk_extensions/filtered_timeline_extension.dart
@@ -1,6 +1,5 @@
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
+import 'package:matrix/matrix.dart';
extension VisibleInGuiExtension on List {
List filterByVisibleInGui({
diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart
index dfcc9d61..9ec10dd8 100644
--- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart
+++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart
@@ -1,18 +1,16 @@
import 'dart:io';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/client_manager.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
import 'package:flutter/foundation.dart';
-
import 'package:matrix/matrix.dart';
import 'package:path/path.dart';
import 'package:path_provider/path_provider.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'package:universal_html/html.dart' as html;
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/client_manager.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
import 'cipher.dart';
-
import 'sqlcipher_stub.dart'
if (dart.library.io) 'package:sqlcipher_flutter_libs/sqlcipher_flutter_libs.dart';
diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart
index 3862346f..f469e571 100644
--- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart
+++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/cipher.dart
@@ -1,15 +1,13 @@
import 'dart:convert';
import 'dart:math';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/services.dart';
-
-import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_manager.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_secure_storage/flutter_secure_storage.dart';
+import 'package:matrix/matrix.dart';
const _passwordStorageKey = 'database_password';
diff --git a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart
index 857c8095..4590cace 100644
--- a/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart
+++ b/lib/utils/matrix_sdk_extensions/matrix_file_extension.dart
@@ -1,11 +1,9 @@
-import 'package:flutter/material.dart';
-
import 'package:file_picker/file_picker.dart';
-import 'package:matrix/matrix.dart';
-import 'package:share_plus/share_plus.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/size_string.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+import 'package:share_plus/share_plus.dart';
extension MatrixFileExtension on MatrixFile {
Future save(BuildContext context) async {
diff --git a/lib/utils/matrix_sdk_extensions/matrix_locals.dart b/lib/utils/matrix_sdk_extensions/matrix_locals.dart
index 9a12d25f..157f46c7 100644
--- a/lib/utils/matrix_sdk_extensions/matrix_locals.dart
+++ b/lib/utils/matrix_sdk_extensions/matrix_locals.dart
@@ -1,6 +1,5 @@
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
+import 'package:matrix/matrix.dart';
/// This is a temporary helper class until there is a proper solution to this with the new system
class MatrixLocals extends MatrixLocalizations {
diff --git a/lib/utils/notification_background_handler.dart b/lib/utils/notification_background_handler.dart
index 4c85800f..76cde5a9 100644
--- a/lib/utils/notification_background_handler.dart
+++ b/lib/utils/notification_background_handler.dart
@@ -3,14 +3,14 @@ import 'dart:isolate';
import 'dart:ui';
import 'package:collection/collection.dart';
+import 'package:fluffychat/l10n/l10n.dart';
+import 'package:fluffychat/utils/client_manager.dart';
+import 'package:fluffychat/utils/push_helper.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod;
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/l10n/l10n.dart';
-import 'package:fluffychat/utils/client_manager.dart';
-import 'package:fluffychat/utils/push_helper.dart';
import '../config/app_config.dart';
import '../config/setting_keys.dart';
diff --git a/lib/utils/platform_infos.dart b/lib/utils/platform_infos.dart
index 33efdf50..5fc8a5df 100644
--- a/lib/utils/platform_infos.dart
+++ b/lib/utils/platform_infos.dart
@@ -1,14 +1,13 @@
import 'dart:io';
+import 'package:fluffychat/config/setting_keys.dart';
+import 'package:fluffychat/l10n/l10n.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
import 'package:go_router/go_router.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:url_launcher/url_launcher_string.dart';
-import 'package:fluffychat/config/setting_keys.dart';
-import 'package:fluffychat/l10n/l10n.dart';
import '../config/app_config.dart';
abstract class PlatformInfos {
@@ -33,8 +32,8 @@ abstract class PlatformInfos {
static bool get supportsCustomImageResizer =>
PlatformInfos.isWeb || PlatformInfos.isMobile;
- /// Web could also record in theory but currently only wav which is too large
- static bool get platformCanRecord => (isMobile || isMacOS || isWeb || isLinux);
+ /// Web could also record in theory but currently creates broken opus
+ static bool get platformCanRecord => (isMobile || isMacOS || isLinux);
static String get clientName =>
'${AppSettings.applicationName.value} ${isWeb ? 'web' : Platform.operatingSystem}${kReleaseMode ? '' : 'Debug'}';
diff --git a/lib/utils/push_helper.dart b/lib/utils/push_helper.dart
index 05d40b57..591549e9 100644
--- a/lib/utils/push_helper.dart
+++ b/lib/utils/push_helper.dart
@@ -1,14 +1,7 @@
import 'dart:convert';
import 'dart:ui';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
-import 'package:flutter_local_notifications/flutter_local_notifications.dart';
-import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -17,6 +10,11 @@ import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/notification_background_handler.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_local_notifications/flutter_local_notifications.dart';
+import 'package:flutter_shortcuts_new/flutter_shortcuts_new.dart';
+import 'package:matrix/matrix.dart';
const notificationAvatarDimension = 128;
diff --git a/lib/utils/resize_video.dart b/lib/utils/resize_video.dart
index ae249818..a58e4642 100644
--- a/lib/utils/resize_video.dart
+++ b/lib/utils/resize_video.dart
@@ -1,9 +1,8 @@
import 'package:cross_file/cross_file.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
import 'package:matrix/matrix.dart';
import 'package:video_compress/video_compress.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
-
extension ResizeImage on XFile {
static const int max = 1200;
static const int quality = 40;
diff --git a/lib/utils/room_status_extension.dart b/lib/utils/room_status_extension.dart
index 3021a314..a907bff4 100644
--- a/lib/utils/room_status_extension.dart
+++ b/lib/utils/room_status_extension.dart
@@ -1,8 +1,7 @@
+import 'package:fluffychat/l10n/l10n.dart';
import 'package:flutter/widgets.dart';
-
import 'package:matrix/matrix.dart';
-import 'package:fluffychat/l10n/l10n.dart';
import '../config/app_config.dart';
extension RoomStatusExtension on Room {
diff --git a/lib/utils/show_scaffold_dialog.dart b/lib/utils/show_scaffold_dialog.dart
index 7e552f90..7e796ad0 100644
--- a/lib/utils/show_scaffold_dialog.dart
+++ b/lib/utils/show_scaffold_dialog.dart
@@ -1,7 +1,6 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
+import 'package:flutter/material.dart';
Future showScaffoldDialog({
required BuildContext context,
diff --git a/lib/utils/show_update_snackbar.dart b/lib/utils/show_update_snackbar.dart
index 7d47f1bf..8735a941 100644
--- a/lib/utils/show_update_snackbar.dart
+++ b/lib/utils/show_update_snackbar.dart
@@ -1,11 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:shared_preferences/shared_preferences.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/material.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:url_launcher/url_launcher_string.dart';
abstract class UpdateNotifier {
static const String versionStoreKey = 'last_known_version';
diff --git a/lib/utils/sign_in_flows/calc_redirect_url.dart b/lib/utils/sign_in_flows/calc_redirect_url.dart
index ef0f800d..34aadea7 100644
--- a/lib/utils/sign_in_flows/calc_redirect_url.dart
+++ b/lib/utils/sign_in_flows/calc_redirect_url.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/foundation.dart';
-
-import 'package:universal_html/html.dart' as html;
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/foundation.dart';
+import 'package:universal_html/html.dart' as html;
(Uri redirectUrl, String urlScheme) calcRedirectUrl({
bool withAuthHtmlPath = false,
@@ -11,7 +9,7 @@ import 'package:fluffychat/utils/platform_infos.dart';
var redirectUrl = kIsWeb
? Uri.parse(html.window.location.href.split('#').first.split('?').first)
: (PlatformInfos.isMobile || PlatformInfos.isMacOS)
- ? Uri.parse('${AppConfig.appOpenUrlScheme.toLowerCase()}:/login')
+ ? Uri.parse('${AppConfig.appSsoUrlScheme.toLowerCase()}:/login')
: Uri.parse('http://localhost:3001/login');
if (kIsWeb && withAuthHtmlPath) {
diff --git a/lib/utils/sign_in_flows/check_homeserver.dart b/lib/utils/sign_in_flows/check_homeserver.dart
index ed3e61c9..213ad909 100644
--- a/lib/utils/sign_in_flows/check_homeserver.dart
+++ b/lib/utils/sign_in_flows/check_homeserver.dart
@@ -1,10 +1,3 @@
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/sign_in/view_model/model/public_homeserver_data.dart';
@@ -14,6 +7,11 @@ import 'package:fluffychat/utils/sign_in_flows/oidc_login.dart';
import 'package:fluffychat/utils/sign_in_flows/sso_login.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher_string.dart';
Future connectToHomeserverFlow(
PublicHomeserverData homeserverData,
diff --git a/lib/utils/sign_in_flows/oidc_login.dart b/lib/utils/sign_in_flows/oidc_login.dart
index 0fb9f2c7..4093eb14 100644
--- a/lib/utils/sign_in_flows/oidc_login.dart
+++ b/lib/utils/sign_in_flows/oidc_login.dart
@@ -1,16 +1,14 @@
import 'dart:convert';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
-import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
-import 'package:matrix/matrix.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/oidc_session_json_extension.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/sign_in_flows/calc_redirect_url.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
+import 'package:matrix/matrix.dart';
+import 'package:shared_preferences/shared_preferences.dart';
Future oidcLoginFlow(
Client client,
diff --git a/lib/utils/sign_in_flows/sso_login.dart b/lib/utils/sign_in_flows/sso_login.dart
index 7f7a924d..e5b135e1 100644
--- a/lib/utils/sign_in_flows/sso_login.dart
+++ b/lib/utils/sign_in_flows/sso_login.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
import 'package:fluffychat/utils/sign_in_flows/calc_redirect_url.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_modal_action_popup.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_web_auth_2/flutter_web_auth_2.dart';
+import 'package:matrix/matrix.dart';
Future ssoLoginFlow(
Client client,
diff --git a/lib/utils/sync_status_localization.dart b/lib/utils/sync_status_localization.dart
index c48e7125..da699f2b 100644
--- a/lib/utils/sync_status_localization.dart
+++ b/lib/utils/sync_status_localization.dart
@@ -1,9 +1,7 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
extension SyncStatusLocalization on SyncStatusUpdate {
String calcLocalizedString(BuildContext context) {
diff --git a/lib/utils/uia_request_manager.dart b/lib/utils/uia_request_manager.dart
index e422f966..11fa0421 100644
--- a/lib/utils/uia_request_manager.dart
+++ b/lib/utils/uia_request_manager.dart
@@ -1,15 +1,13 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-import 'package:url_launcher/url_launcher.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+import 'package:url_launcher/url_launcher.dart';
extension UiaRequestManager on MatrixState {
Future uiaRequestHandler(UiaRequest uiaRequest) async {
diff --git a/lib/utils/url_launcher.dart b/lib/utils/url_launcher.dart
index d3644e49..fcc64113 100644
--- a/lib/utils/url_launcher.dart
+++ b/lib/utils/url_launcher.dart
@@ -1,17 +1,16 @@
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart' show IterableExtension;
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:punycode/punycode.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/user_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:punycode/punycode.dart';
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../widgets/adaptive_dialogs/public_room_dialog.dart';
import 'platform_infos.dart';
diff --git a/lib/utils/voip_plugin.dart b/lib/utils/voip_plugin.dart
index fb5c5714..6a91df3a 100644
--- a/lib/utils/voip_plugin.dart
+++ b/lib/utils/voip_plugin.dart
@@ -1,16 +1,15 @@
import 'dart:core';
+import 'package:fluffychat/pages/chat_list/chat_list.dart';
+import 'package:fluffychat/pages/dialer/dialer.dart';
+import 'package:fluffychat/utils/platform_infos.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
import 'package:flutter_foreground_task/flutter_foreground_task.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart' as webrtc_impl;
import 'package:matrix/matrix.dart';
import 'package:webrtc_interface/webrtc_interface.dart' hide Navigator;
-import 'package:fluffychat/pages/chat_list/chat_list.dart';
-import 'package:fluffychat/pages/dialer/dialer.dart';
-import 'package:fluffychat/utils/platform_infos.dart';
import '../../utils/voip/user_media_manager.dart';
import '../widgets/matrix.dart';
diff --git a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart
index 6fbc9a0c..fe892538 100644
--- a/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart
+++ b/lib/widgets/adaptive_dialogs/adaptive_dialog_action.dart
@@ -1,8 +1,7 @@
+import 'package:fluffychat/config/app_config.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:fluffychat/config/app_config.dart';
-
class AdaptiveDialogAction extends StatelessWidget {
final VoidCallback? onPressed;
final bool autofocus;
diff --git a/lib/widgets/adaptive_dialogs/public_room_dialog.dart b/lib/widgets/adaptive_dialogs/public_room_dialog.dart
index bafa5864..adb0865d 100644
--- a/lib/widgets/adaptive_dialogs/public_room_dialog.dart
+++ b/lib/widgets/adaptive_dialogs/public_room_dialog.dart
@@ -1,14 +1,13 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import '../../config/themes.dart';
import '../../utils/url_launcher.dart';
import '../avatar.dart';
diff --git a/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart b/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart
index d295a9ca..fbff4203 100644
--- a/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart
+++ b/lib/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart
@@ -1,10 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
enum OkCancelResult { ok, cancel }
diff --git a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart
index 38331eaf..d128f0cb 100644
--- a/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart
+++ b/lib/widgets/adaptive_dialogs/show_text_input_dialog.dart
@@ -1,11 +1,9 @@
-import 'package:flutter/material.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/url_launcher.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
Future showTextInputDialog({
required BuildContext context,
diff --git a/lib/widgets/adaptive_dialogs/user_dialog.dart b/lib/widgets/adaptive_dialogs/user_dialog.dart
index 674bd9c1..764a6ed8 100644
--- a/lib/widgets/adaptive_dialogs/user_dialog.dart
+++ b/lib/widgets/adaptive_dialogs/user_dialog.dart
@@ -1,10 +1,3 @@
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
-import 'package:flutter_linkify/flutter_linkify.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/date_time_extension.dart';
@@ -13,6 +6,12 @@ import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/presence_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_linkify/flutter_linkify.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import '../../utils/url_launcher.dart';
import '../future_loading_dialog.dart';
import '../hover_builder.dart';
diff --git a/lib/widgets/app_lock.dart b/lib/widgets/app_lock.dart
index 70f0a9ef..feebaf05 100644
--- a/lib/widgets/app_lock.dart
+++ b/lib/widgets/app_lock.dart
@@ -1,11 +1,9 @@
+import 'package:fluffychat/widgets/lock_screen.dart';
import 'package:flutter/material.dart';
-
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:matrix/matrix.dart';
import 'package:provider/provider.dart';
-import 'package:fluffychat/widgets/lock_screen.dart';
-
class AppLockWidget extends StatefulWidget {
const AppLockWidget({
required this.child,
diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart
index d78a2fcd..259c0b42 100644
--- a/lib/widgets/avatar.dart
+++ b/lib/widgets/avatar.dart
@@ -1,10 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/utils/string_color.dart';
import 'package:fluffychat/widgets/mxc_image.dart';
import 'package:fluffychat/widgets/presence_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class Avatar extends StatelessWidget {
final Uri? mxContent;
diff --git a/lib/widgets/blur_hash.dart b/lib/widgets/blur_hash.dart
index a7fc4fac..6cd2f4f8 100644
--- a/lib/widgets/blur_hash.dart
+++ b/lib/widgets/blur_hash.dart
@@ -1,7 +1,6 @@
+import 'package:blurhash_dart/blurhash_dart.dart' as b;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
-
-import 'package:blurhash_dart/blurhash_dart.dart' as b;
import 'package:image/image.dart' as image;
class BlurHash extends StatefulWidget {
diff --git a/lib/widgets/chat_settings_popup_menu.dart b/lib/widgets/chat_settings_popup_menu.dart
index 6e90a6a2..8ba7952c 100644
--- a/lib/widgets/chat_settings_popup_menu.dart
+++ b/lib/widgets/chat_settings_popup_menu.dart
@@ -1,13 +1,12 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+
import 'matrix.dart';
enum ChatPopupMenuActions { details, mute, unmute, emote, leave, search }
diff --git a/lib/widgets/config_viewer.dart b/lib/widgets/config_viewer.dart
index e357e34a..df715c33 100644
--- a/lib/widgets/config_viewer.dart
+++ b/lib/widgets/config_viewer.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:shared_preferences/shared_preferences.dart';
class ConfigViewer extends StatefulWidget {
const ConfigViewer({super.key});
diff --git a/lib/widgets/fluffy_chat_app.dart b/lib/widgets/fluffy_chat_app.dart
index af780379..79047cc9 100644
--- a/lib/widgets/fluffy_chat_app.dart
+++ b/lib/widgets/fluffy_chat_app.dart
@@ -1,9 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/routes.dart';
import 'package:fluffychat/config/setting_keys.dart';
@@ -11,6 +5,11 @@ import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/app_lock.dart';
import 'package:fluffychat/widgets/theme_builder.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+
import '../utils/custom_scroll_behaviour.dart';
import 'matrix.dart';
@@ -39,6 +38,10 @@ class FluffyChatApp extends StatelessWidget {
routes: AppRoutes.routes,
debugLogDiagnostics: true,
redirect: (context, state) {
+ // Workaround for content sharings passed to go router:
+ if (state.uri.scheme == 'content') return '/';
+
+ // Pass deep links to app:
if (state.uri.toString().startsWith(AppConfig.deepLinkPrefix)) {
return '/rooms/newprivatechat?deeplink=${state.uri}';
}
diff --git a/lib/widgets/future_loading_dialog.dart b/lib/widgets/future_loading_dialog.dart
index b883cda9..4cf2ee6d 100644
--- a/lib/widgets/future_loading_dialog.dart
+++ b/lib/widgets/future_loading_dialog.dart
@@ -1,12 +1,10 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
import 'package:async/async.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
+import 'package:flutter/material.dart';
/// Displays a loading dialog which reacts to the given [future]. The dialog
/// will be dismissed and the value will be returned when the future completes.
diff --git a/lib/widgets/layouts/login_scaffold.dart b/lib/widgets/layouts/login_scaffold.dart
index 49b36861..5953df36 100644
--- a/lib/widgets/layouts/login_scaffold.dart
+++ b/lib/widgets/layouts/login_scaffold.dart
@@ -1,13 +1,11 @@
-import 'package:flutter/material.dart';
-
-import 'package:particles_network/particles_network.dart';
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/platform_infos.dart';
+import 'package:flutter/material.dart';
+import 'package:particles_network/particles_network.dart';
+import 'package:url_launcher/url_launcher_string.dart';
class LoginScaffold extends StatelessWidget {
final Widget body;
diff --git a/lib/widgets/layouts/max_width_body.dart b/lib/widgets/layouts/max_width_body.dart
index c0afc707..2ba70065 100644
--- a/lib/widgets/layouts/max_width_body.dart
+++ b/lib/widgets/layouts/max_width_body.dart
@@ -1,7 +1,6 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
+import 'package:flutter/material.dart';
class MaxWidthBody extends StatelessWidget {
final Widget child;
diff --git a/lib/widgets/layouts/two_column_layout.dart b/lib/widgets/layouts/two_column_layout.dart
index 9bcbd515..2b2a3f86 100644
--- a/lib/widgets/layouts/two_column_layout.dart
+++ b/lib/widgets/layouts/two_column_layout.dart
@@ -1,6 +1,5 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/themes.dart';
+import 'package:flutter/material.dart';
class TwoColumnLayout extends StatelessWidget {
final Widget mainView;
diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart
index 618219dd..47597286 100644
--- a/lib/widgets/local_notifications_extension.dart
+++ b/lib/widgets/local_notifications_extension.dart
@@ -1,14 +1,7 @@
import 'dart:io';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
import 'package:desktop_notifications/desktop_notifications.dart';
-import 'package:image/image.dart';
-import 'package:matrix/matrix.dart';
-import 'package:universal_html/html.dart' as html;
-
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_download_content_extension.dart';
@@ -16,6 +9,11 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/push_helper.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:image/image.dart';
+import 'package:matrix/matrix.dart';
+import 'package:universal_html/html.dart' as html;
extension LocalNotificationsExtension on MatrixState {
Future showLocalNotification(Event event) async {
diff --git a/lib/widgets/lock_screen.dart b/lib/widgets/lock_screen.dart
index 66a90951..7ecb1d22 100644
--- a/lib/widgets/lock_screen.dart
+++ b/lib/widgets/lock_screen.dart
@@ -1,11 +1,10 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/app_lock.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
class LockScreen extends StatefulWidget {
const LockScreen({super.key});
diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart
index f5cd50a2..2f7a3291 100644
--- a/lib/widgets/matrix.dart
+++ b/lib/widgets/matrix.dart
@@ -1,21 +1,8 @@
import 'dart:async';
import 'dart:convert';
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
import 'package:desktop_notifications/desktop_notifications.dart';
-import 'package:image_picker/image_picker.dart';
-import 'package:intl/intl.dart';
-import 'package:just_audio/just_audio.dart';
-import 'package:matrix/encryption.dart';
-import 'package:matrix/matrix.dart';
-import 'package:provider/provider.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-import 'package:universal_html/html.dart' as html;
-import 'package:url_launcher/url_launcher_string.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/init_with_restore.dart';
@@ -26,6 +13,18 @@ import 'package:fluffychat/utils/voip_plugin.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:fluffychat/widgets/fluffy_chat_app.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:image_picker/image_picker.dart';
+import 'package:intl/intl.dart';
+import 'package:just_audio/just_audio.dart';
+import 'package:matrix/encryption.dart';
+import 'package:matrix/matrix.dart';
+import 'package:provider/provider.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:universal_html/html.dart' as html;
+import 'package:url_launcher/url_launcher_string.dart';
+
import '../config/setting_keys.dart';
import '../pages/key_verification/key_verification_dialog.dart';
import '../utils/account_bundles.dart';
diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart
index 26a1bb20..46ec8e96 100644
--- a/lib/widgets/member_actions_popup_menu_button.dart
+++ b/lib/widgets/member_actions_popup_menu_button.dart
@@ -1,9 +1,8 @@
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/permission_slider_dialog.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
+
import 'adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'adaptive_dialogs/show_text_input_dialog.dart';
import 'adaptive_dialogs/user_dialog.dart';
diff --git a/lib/widgets/mxc_image.dart b/lib/widgets/mxc_image.dart
index a92338aa..b0f86815 100644
--- a/lib/widgets/mxc_image.dart
+++ b/lib/widgets/mxc_image.dart
@@ -2,14 +2,12 @@ import 'dart:io';
import 'dart:math';
import 'dart:typed_data';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/utils/client_download_content_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class MxcImage extends StatefulWidget {
final Uri? uri;
diff --git a/lib/widgets/mxc_image_viewer.dart b/lib/widgets/mxc_image_viewer.dart
index be075d79..b4b70d00 100644
--- a/lib/widgets/mxc_image_viewer.dart
+++ b/lib/widgets/mxc_image_viewer.dart
@@ -1,6 +1,6 @@
+import 'package:fluffychat/l10n/l10n.dart';
import 'package:flutter/material.dart';
-import 'package:fluffychat/l10n/l10n.dart';
import 'mxc_image.dart';
class MxcImageViewer extends StatelessWidget {
diff --git a/lib/widgets/navigation_rail.dart b/lib/widgets/navigation_rail.dart
index e9201bff..3b0eea3e 100644
--- a/lib/widgets/navigation_rail.dart
+++ b/lib/widgets/navigation_rail.dart
@@ -1,8 +1,3 @@
-import 'package:flutter/material.dart';
-
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@@ -12,6 +7,9 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/stream_extension.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
class SpacesNavigationRail extends StatelessWidget {
final String? activeSpaceId;
diff --git a/lib/widgets/permission_slider_dialog.dart b/lib/widgets/permission_slider_dialog.dart
index 63cd0897..5b04216a 100644
--- a/lib/widgets/permission_slider_dialog.dart
+++ b/lib/widgets/permission_slider_dialog.dart
@@ -1,8 +1,7 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/dialog_text_field.dart';
+import 'package:flutter/material.dart';
Future showPermissionChooser(
BuildContext context, {
diff --git a/lib/widgets/presence_builder.dart b/lib/widgets/presence_builder.dart
index 33f5b054..05b0c6ae 100644
--- a/lib/widgets/presence_builder.dart
+++ b/lib/widgets/presence_builder.dart
@@ -1,10 +1,8 @@
import 'dart:async';
-import 'package:flutter/material.dart';
-
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:matrix/matrix.dart';
class PresenceBuilder extends StatefulWidget {
final Widget Function(BuildContext context, CachedPresence? presence) builder;
diff --git a/lib/widgets/qr_code_viewer.dart b/lib/widgets/qr_code_viewer.dart
index 83c44e74..aee6d7e5 100644
--- a/lib/widgets/qr_code_viewer.dart
+++ b/lib/widgets/qr_code_viewer.dart
@@ -1,16 +1,15 @@
-import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
-
-import 'package:image/image.dart';
-import 'package:matrix/matrix.dart';
-import 'package:pretty_qr_code/pretty_qr_code.dart';
-import 'package:qr_image/qr_image.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/fluffy_share.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_file_extension.dart';
import 'package:fluffychat/widgets/future_loading_dialog.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:image/image.dart';
+import 'package:matrix/matrix.dart';
+import 'package:pretty_qr_code/pretty_qr_code.dart';
+import 'package:qr_image/qr_image.dart';
+
import '../config/themes.dart';
Future showQrCodeViewer(BuildContext context, String content) =>
diff --git a/lib/widgets/settings_switch_list_tile.dart b/lib/widgets/settings_switch_list_tile.dart
index f625f9e6..90bc3aec 100644
--- a/lib/widgets/settings_switch_list_tile.dart
+++ b/lib/widgets/settings_switch_list_tile.dart
@@ -1,6 +1,5 @@
-import 'package:flutter/material.dart';
-
import 'package:fluffychat/config/setting_keys.dart';
+import 'package:flutter/material.dart';
class SettingsSwitchListTile extends StatefulWidget {
final AppSettings setting;
diff --git a/lib/widgets/share_scaffold_dialog.dart b/lib/widgets/share_scaffold_dialog.dart
index 2a23e050..2a219d67 100644
--- a/lib/widgets/share_scaffold_dialog.dart
+++ b/lib/widgets/share_scaffold_dialog.dart
@@ -1,15 +1,13 @@
-import 'package:flutter/material.dart';
-
import 'package:cross_file/cross_file.dart';
-import 'package:go_router/go_router.dart';
-import 'package:matrix/matrix.dart';
-
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
+import 'package:flutter/material.dart';
+import 'package:go_router/go_router.dart';
+import 'package:matrix/matrix.dart';
abstract class ShareItem {}
diff --git a/lib/widgets/theme_builder.dart b/lib/widgets/theme_builder.dart
index 77bda417..de1c5bad 100644
--- a/lib/widgets/theme_builder.dart
+++ b/lib/widgets/theme_builder.dart
@@ -1,12 +1,10 @@
-import 'package:flutter/material.dart';
-
import 'package:collection/collection.dart';
import 'package:dynamic_color/dynamic_color.dart';
+import 'package:fluffychat/utils/color_value.dart';
+import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:fluffychat/utils/color_value.dart';
-
class ThemeBuilder extends StatefulWidget {
final Widget Function(
BuildContext context,
diff --git a/lib/widgets/unread_rooms_badge.dart b/lib/widgets/unread_rooms_badge.dart
index 986316bd..9e3f9932 100644
--- a/lib/widgets/unread_rooms_badge.dart
+++ b/lib/widgets/unread_rooms_badge.dart
@@ -1,6 +1,5 @@
-import 'package:flutter/material.dart';
-
import 'package:badges/badges.dart' as b;
+import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import 'matrix.dart';
diff --git a/pubspec.lock b/pubspec.lock
index 3042172f..23858f87 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -911,14 +911,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.2.2"
- import_sorter:
- dependency: "direct dev"
- description:
- name: import_sorter
- sha256: eb15738ccead84e62c31e0208ea4e3104415efcd4972b86906ca64a1187d0836
- url: "https://pub.dev"
- source: hosted
- version: "4.6.0"
integration_test:
dependency: "direct dev"
description: flutter
@@ -1873,14 +1865,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.11.0"
- tint:
- dependency: transitive
- description:
- name: tint
- sha256: "9652d9a589f4536d5e392cf790263d120474f15da3cf1bee7f1fdb31b4de5f46"
- url: "https://pub.dev"
- source: hosted
- version: "2.0.1"
translations_cleaner:
dependency: "direct dev"
description:
diff --git a/pubspec.yaml b/pubspec.yaml
index 9f7cd6cb..0bd2e0ec 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -93,16 +93,11 @@ dev_dependencies:
flutter_native_splash: ^2.4.7
flutter_test:
sdk: flutter
- import_sorter: ^4.6.0
integration_test:
sdk: flutter
license_checker: ^1.6.2
translations_cleaner: ^0.1.1
-import_sorter:
- ignored_files: # Optional, defaults to []
- - \/lib\/l10n
-
flutter_native_splash:
color: "#ffffff"
color_dark: "#000000"
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 8f58da35..ebc618ce 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -53,7 +53,7 @@ platforms:
parts:
flutter-git:
source: https://github.com/flutter/flutter.git
- source-tag: 3.41.2
+ source-tag: 3.41.5
source-depth: 1
plugin: nil
override-build: |
@@ -90,6 +90,7 @@ parts:
build-packages:
- libsecret-1-dev
- libjsoncpp-dev
+ - libssl-dev
- curl
- libpciaccess-dev
build-snaps: