Merge remote-tracking branch 'upstream/main'

pull/1936/head
avashilling 3 months ago
commit 174903b66c

@ -1,2 +1,3 @@
* @krille-chan
pubspec.* @dependabot
lib/l10n/*.arb @weblate

@ -9,6 +9,9 @@ updates:
commit-message:
prefix: "build: "
include: "scope"
assignees:
- "krille-chan"
open-pull-requests-limit: 5
- package-ecosystem: "github-actions"
directory: "/"
schedule:

@ -1,2 +1,2 @@
FLUTTER_VERSION=3.32.6
FLUTTER_VERSION=3.32.8
JAVA_VERSION=17

@ -3390,5 +3390,7 @@
"customReaction": "Benutzerdefinierte Reaktion",
"@customReaction": {},
"moreEvents": "Weitere Ereignisse",
"@moreEvents": {}
"@moreEvents": {},
"declineInvitation": "Einladung ablehnen",
"@declineInvitation": {}
}

@ -1911,7 +1911,7 @@
"type": "String",
"description": "Usage hint for the command /invite"
},
"commandHint_join": "Batu gelara",
"commandHint_join": "Batu adierazitako gelara",
"@commandHint_join": {
"type": "String",
"description": "Usage hint for the command /join"
@ -2608,9 +2608,9 @@
"@invite": {},
"invalidInput": "Sartu duzunak ez du balio!",
"@invalidInput": {},
"inviteGroupChat": "📨 Gonbidatu taldeko txatera",
"inviteGroupChat": "📨 Taldeko txatera gonbidapena",
"@inviteGroupChat": {},
"invitePrivateChat": "📨 Gonbidatu txat pribatura",
"invitePrivateChat": "📨 Txat pribatura gonbidapena",
"@invitePrivateChat": {},
"banUserDescription": "Erabiltzailea txatetik kanporatu eta berriro sartzeko debekua ezarriko zaio; ezingo da berriro sartu debekua kendu arte.",
"@banUserDescription": {},
@ -3379,5 +3379,11 @@
"commandHint_logoutall": "Amaitu saioa aktibo dauden gailu guztietan",
"@commandHint_logoutall": {},
"moreEvents": "Gertaera gehiago",
"@moreEvents": {}
"@moreEvents": {},
"displayNavigationRail": "Erakutsi nabigazio-barra mugikorrean",
"@displayNavigationRail": {},
"customReaction": "Erreakzio pertsonalizatua",
"@customReaction": {},
"declineInvitation": "Uko egin gonbidapenari",
"@declineInvitation": {}
}

@ -2146,7 +2146,7 @@
"@noOtherDevicesFound": {},
"profileNotFound": "Níorbh fhéidir an t-úsáideoir a aimsiú ar an bhfreastalaí. B'fhéidir go bhfuil fadhb nasctha ann nó nach bhfuil an t-úsáideoir ann.",
"@profileNotFound": {},
"inviteGroupChat": "📨 Tabhair cuireadh comhrá grúpa",
"inviteGroupChat": "📨 Cuireadh chuig comhrá grúpa",
"@inviteGroupChat": {},
"knocking": "Cnagadh",
"@knocking": {},
@ -2491,7 +2491,7 @@
}
}
},
"invitePrivateChat": "📨 Tabhair cuireadh comhrá príobháideach",
"invitePrivateChat": "📨 Cuireadh chuig comhrá príobháideach",
"@invitePrivateChat": {},
"wrongPinEntered": "Tháinig biorán mícheart isteach! Bain triail eile as i {seconds} soicind...",
"@wrongPinEntered": {
@ -3388,5 +3388,7 @@
"customReaction": "Imoibriú saincheaptha",
"@customReaction": {},
"moreEvents": "Tuilleadh imeachtaí",
"@moreEvents": {}
"@moreEvents": {},
"declineInvitation": "Diúltaigh don chuireadh",
"@declineInvitation": {}
}

@ -2379,5 +2379,20 @@
"calls": "Anrop",
"@calls": {},
"customEmojisAndStickers": "Egendefinerte emojier og klistremerker",
"@customEmojisAndStickers": {}
"@customEmojisAndStickers": {},
"oopsPushError": "Oops! Dessverre oppsto det en feil under oppsettet av push-varsler.",
"@oopsPushError": {
"type": "String",
"placeholders": {}
},
"openVideoCamera": "Åpne kameraet for en video",
"@openVideoCamera": {
"type": "String",
"placeholders": {}
},
"obtainingLocation": "Henter sted …",
"@obtainingLocation": {
"type": "String",
"placeholders": {}
}
}

@ -3382,5 +3382,7 @@
"moreEvents": "Meer gebeurtenissen",
"@moreEvents": {},
"customReaction": "Aangepaste reactie",
"@customReaction": {}
"@customReaction": {},
"declineInvitation": "Uitnodiging afwijzen",
"@declineInvitation": {}
}

@ -840,12 +840,12 @@
"type": "String",
"placeholders": {}
},
"fromJoining": "De que entrou",
"fromJoining": "Desde que entrou",
"@fromJoining": {
"type": "String",
"placeholders": {}
},
"fromTheInvitation": "Do convite",
"fromTheInvitation": "Desde o convite",
"@fromTheInvitation": {
"type": "String",
"placeholders": {}
@ -3245,7 +3245,7 @@
"@homeserverDescription": {},
"notificationRuleEncryptedRoomOneToOne": "Sala criptografada de 2 pessoas",
"@notificationRuleEncryptedRoomOneToOne": {},
"pleaseWaitUntilInvited": "Aguarde, até que alguém da sala te convide.",
"pleaseWaitUntilInvited": "Aguarde até que alguém da sala te convide.",
"@pleaseWaitUntilInvited": {},
"waitingForServer": "Aguardando o servidor...",
"@waitingForServer": {},

@ -53,26 +53,28 @@ class MessageDownloadContent extends StatelessWidget {
backgroundColor: textColor.withAlpha(32),
child: Icon(Icons.file_download_outlined, color: textColor),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
filename,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: textColor,
fontWeight: FontWeight.w500,
Flexible(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
filename,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: textColor,
fontWeight: FontWeight.w500,
),
),
),
Text(
'$sizeString | $filetype',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(color: textColor, fontSize: 10),
),
],
Text(
'$sizeString | $filetype',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(color: textColor, fontSize: 10),
),
],
),
),
],
),

@ -98,8 +98,6 @@ class SendFileDialogState extends State<SendFileDialog> {
widget.files.length,
),
);
} else {
scaffoldMessenger.clearSnackBars();
}
final label = _labelTextController.text.trim();

@ -15,6 +15,7 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/localized_exception_extension.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@ -420,6 +421,8 @@ class ChatListController extends State<ChatList>
_checkTorBrowser();
ErrorReporter(context).consumeTemporaryErrorLogFile();
super.initState();
}

@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:collection/collection.dart' show IterableExtension;
import 'package:matrix/encryption/utils/key_verification.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';
@ -52,6 +53,18 @@ class DevicesSettingsController extends State<DevicesSettings> {
}
void removeDevicesAction(List<Device> devices) async {
final client = Matrix.of(context).client;
final accountManageUrl = client.wellKnown?.additionalProperties
.tryGetMap<String, Object?>('org.matrix.msc2965.authentication')
?.tryGet<String>('account');
if (accountManageUrl != null) {
launchUrlString(
accountManageUrl,
mode: LaunchMode.inAppBrowserView,
);
return;
}
if (await showOkCancelAlertDialog(
context: context,
title: L10n.of(context).areYouSure,

@ -106,8 +106,7 @@ abstract class ClientManager {
return Client(
clientName,
httpClient:
PlatformInfos.isAndroid ? CustomHttpClient.createHTTPClient() : null,
httpClient: CustomHttpClient.createHTTPClient(),
verificationMethods: {
KeyVerificationMethod.numbers,
if (kIsWeb || PlatformInfos.isMobile || PlatformInfos.isLinux)

@ -3,9 +3,15 @@ import 'dart:io';
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
/// still have to ship this certificate by ourself.
class CustomHttpClient {
static HttpClient customHttpClient(String? cert) {
final context = SecurityContext.defaultContext;
@ -26,5 +32,9 @@ class CustomHttpClient {
return HttpClient(context: context);
}
static http.Client createHTTPClient() => IOClient(customHttpClient(ISRG_X1));
static http.Client createHTTPClient() => retry.RetryClient(
PlatformInfos.isAndroid
? IOClient(customHttpClient(ISRG_X1))
: http.Client(),
);
}

@ -1,9 +1,14 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_highlighter/flutter_highlighter.dart';
import 'package:flutter_highlighter/themes/shades-of-purple.dart';
import 'package:http/http.dart' as http;
import 'package:matrix/matrix.dart';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:fluffychat/config/app_config.dart';
@ -11,16 +16,54 @@ import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart';
class ErrorReporter {
final BuildContext context;
final BuildContext? context;
final String? message;
const ErrorReporter(this.context, [this.message]);
void onErrorCallback(Object error, [StackTrace? stackTrace]) async {
static const Set<Type> ingoredTypes = {
IOException,
http.ClientException,
SocketException,
TlsException,
HandshakeException,
};
Future<File> _getTemporaryErrorLogFile() async {
final tempDir = await getTemporaryDirectory();
return File(path.join(tempDir.path, 'error_log.txt'));
}
Future<void> writeToTemporaryErrorLogFile(
Object error, [
StackTrace? stackTrace,
]) async {
if (ingoredTypes.contains(error.runtimeType)) return;
final file = await _getTemporaryErrorLogFile();
if (await file.exists()) await file.delete();
await file.writeAsString(
'[${DateTime.now().toIso8601String()}] $message - $error\n$stackTrace',
);
}
Future<void> consumeTemporaryErrorLogFile() async {
final file = await _getTemporaryErrorLogFile();
if (!(await file.exists())) return;
final content = await file.readAsString();
_onErrorCallback(content);
await file.delete();
}
void onErrorCallback(Object error, [StackTrace? stackTrace]) {
if (ingoredTypes.contains(error.runtimeType)) return;
Logs().e(message ?? 'Error caught', error, stackTrace);
final text = '$error\n${stackTrace ?? ''}';
return _onErrorCallback(text);
}
void _onErrorCallback(String text) async {
await showAdaptiveDialog(
context: context,
context: context!,
builder: (context) => AlertDialog.adaptive(
title: Text(L10n.of(context).reportErrorDescription),
content: SizedBox(

@ -14,6 +14,7 @@ import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/l10n/l10n.dart';
import 'package:fluffychat/utils/client_download_content_extension.dart';
import 'package:fluffychat/utils/client_manager.dart';
import 'package:fluffychat/utils/error_reporter.dart';
import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/utils/platform_infos.dart';
@ -35,7 +36,10 @@ Future<void> pushHelper(
flutterLocalNotificationsPlugin: flutterLocalNotificationsPlugin,
);
} catch (e, s) {
Logs().v('Push Helper has crashed!', e, s);
Logs().e('Push Helper has crashed! Writing into temporary file', e, s);
const ErrorReporter(null, 'Push Helper has crashed!')
.writeToTemporaryErrorLogFile(e, s);
l10n ??= await lookupL10n(const Locale('en'));
flutterLocalNotificationsPlugin.show(

@ -12,6 +12,7 @@ permittedLicenses:
- BSD-2-Clause
- BSD-3-Clause
- EUPL-1.2
- ISC
- LGPL-3.0
- MIT
- MPL-2.0

@ -186,10 +186,10 @@ packages:
dependency: "direct main"
description:
name: chewie
sha256: "4d9554a8f87cc2dc6575dfd5ad20a4375015a29edd567fd6733febe6365e2566"
sha256: "19b93a1e60e4ba640a792208a6543f1c7d5b124d011ce0199e2f18802199d984"
url: "https://pub.dev"
source: hosted
version: "1.11.3"
version: "1.12.1"
cli_config:
dependency: transitive
description:
@ -286,6 +286,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.0.8"
dart_earcut:
dependency: transitive
description:
name: dart_earcut
sha256: e485001bfc05dcbc437d7bfb666316182e3522d4c3f9668048e004d0eb2ce43b
url: "https://pub.dev"
source: hosted
version: "1.2.0"
dart_polylabel2:
dependency: transitive
description:
name: dart_polylabel2
sha256: "7eeab15ce72894e4bdba6a8765712231fc81be0bd95247de4ad9966abc57adc6"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
dart_webrtc:
dependency: transitive
description:
@ -564,10 +580,10 @@ packages:
dependency: "direct main"
description:
name: flutter_local_notifications
sha256: edae0c34573233ab03f5ba1f07465e55c384743893042cb19e010b4ee8541c12
sha256: "20ca0a9c82ce0c855ac62a2e580ab867f3fbea82680a90647f7953832d0850ae"
url: "https://pub.dev"
source: hosted
version: "19.3.0"
version: "19.4.0"
flutter_local_notifications_linux:
dependency: transitive
description:
@ -588,10 +604,10 @@ packages:
dependency: transitive
description:
name: flutter_local_notifications_windows
sha256: f8fc0652a601f83419d623c85723a3e82ad81f92b33eaa9bcc21ea1b94773e6e
sha256: ed46d7ae4ec9d19e4c8fa2badac5fe27ba87a3fe387343ce726f927af074ec98
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.0.2"
flutter_localizations:
dependency: "direct main"
description: flutter
@ -601,10 +617,10 @@ packages:
dependency: "direct main"
description:
name: flutter_map
sha256: "87cc8349b8fa5dccda5af50018c7374b6645334a0d680931c1fe11bce88fa5bb"
sha256: df33e784b09fae857c6261a5521dd42bd4d3342cb6200884bb70730638af5fd5
url: "https://pub.dev"
source: hosted
version: "6.2.1"
version: "8.2.1"
flutter_native_splash:
dependency: "direct dev"
description:
@ -767,22 +783,30 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
geoclue:
dependency: transitive
description:
name: geoclue
sha256: c2a998c77474fc57aa00c6baa2928e58f4b267649057a1c76738656e9dbd2a7f
url: "https://pub.dev"
source: hosted
version: "0.1.1"
geolocator:
dependency: "direct main"
description:
name: geolocator
sha256: f62bcd90459e63210bbf9c35deb6a51c521f992a78de19a1fe5c11704f9530e2
sha256: "79939537046c9025be47ec645f35c8090ecadb6fe98eba146a0d25e8c1357516"
url: "https://pub.dev"
source: hosted
version: "13.0.4"
version: "14.0.2"
geolocator_android:
dependency: transitive
description:
name: geolocator_android
sha256: fcb1760a50d7500deca37c9a666785c047139b5f9ee15aa5469fae7dbbe3170d
sha256: "179c3cb66dfa674fc9ccbf2be872a02658724d1c067634e2c427cf6df7df901a"
url: "https://pub.dev"
source: hosted
version: "4.6.2"
version: "5.0.2"
geolocator_apple:
dependency: transitive
description:
@ -791,6 +815,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.3.13"
geolocator_linux:
dependency: transitive
description:
name: geolocator_linux
sha256: c4e966f0a7a87e70049eac7a2617f9e16fd4c585a26e4330bdfc3a71e6a721f3
url: "https://pub.dev"
source: hosted
version: "0.2.3"
geolocator_platform_interface:
dependency: transitive
description:
@ -835,10 +867,18 @@ packages:
dependency: "direct main"
description:
name: go_router
sha256: "0b1e06223bee260dee31a171fb1153e306907563a0b0225e8c1733211911429a"
sha256: c489908a54ce2131f1d1b7cc631af9c1a06fac5ca7c449e959192089f9489431
url: "https://pub.dev"
source: hosted
version: "16.0.0"
gsettings:
dependency: transitive
description:
name: gsettings
sha256: "1b0ce661f5436d2db1e51f3c4295a49849f03d304003a7ba177d01e3a858249c"
url: "https://pub.dev"
source: hosted
version: "15.1.2"
version: "0.2.8"
gtk:
dependency: transitive
description:
@ -883,10 +923,10 @@ packages:
dependency: "direct main"
description:
name: http
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
sha256: "85ab0074f9bf2b24625906d8382bbec84d3d6919d285ba9c106b07b65791fb99"
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.5.0-beta.2"
http_multi_server:
dependency: transitive
description:
@ -1024,10 +1064,10 @@ packages:
dependency: "direct main"
description:
name: just_audio
sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e
sha256: "679637a3ec5b6e00f36472f5a3663667df00ee4822cbf5dafca0f568c710960a"
url: "https://pub.dev"
source: hosted
version: "0.9.46"
version: "0.10.4"
just_audio_platform_interface:
dependency: transitive
description:
@ -1160,10 +1200,10 @@ packages:
dependency: "direct main"
description:
name: matrix
sha256: "996e3b1560959afaa3118ec2b5a06734ad29acf64f9c3c09a605c3ddef22039f"
sha256: "0c033a6ebf4ed2f56ed604769984072961fefc0cb255a802ed441dcaec490196"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "1.1.0"
meta:
dependency: transitive
description:
@ -1184,10 +1224,10 @@ packages:
dependency: "direct main"
description:
name: mime
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6"
url: "https://pub.dev"
source: hosted
version: "1.0.6"
version: "2.0.0"
msix:
dependency: "direct dev"
description:
@ -1320,18 +1360,18 @@ packages:
dependency: "direct main"
description:
name: permission_handler
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
url: "https://pub.dev"
source: hosted
version: "11.4.0"
version: "12.0.1"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "13.0.1"
permission_handler_apple:
dependency: transitive
description:
@ -1420,14 +1460,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.10.2+1"
polylabel:
dependency: transitive
description:
name: polylabel
sha256: "41b9099afb2aa6c1730bdd8a0fab1400d287694ec7615dd8516935fa3144214b"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
pool:
dependency: transitive
description:
@ -1797,10 +1829,10 @@ packages:
dependency: "direct main"
description:
name: sqflite_common_ffi
sha256: "1f3ef3888d3bfbb47785cc1dda0dc7dd7ebd8c1955d32a9e8e9dae1e38d1c4c1"
sha256: "9faa2fedc5385ef238ce772589f7718c24cdddd27419b609bb9c6f703ea27988"
url: "https://pub.dev"
source: hosted
version: "2.3.5"
version: "2.3.6"
sqlcipher_flutter_libs:
dependency: "direct main"
description:
@ -1813,10 +1845,10 @@ packages:
dependency: transitive
description:
name: sqlite3
sha256: "310af39c40dd0bb2058538333c9d9840a2725ae0b9f77e4fd09ad6696aa8f66e"
sha256: "608b56d594e4c8498c972c8f1507209f9fd74939971b948ddbbfbfd1c9cb3c15"
url: "https://pub.dev"
source: hosted
version: "2.7.5"
version: "2.7.7"
stack_trace:
dependency: transitive
description:
@ -2021,10 +2053,10 @@ packages:
dependency: "direct main"
description:
name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
url: "https://pub.dev"
source: hosted
version: "6.3.1"
version: "6.3.2"
url_launcher_android:
dependency: transitive
description:
@ -2109,10 +2141,10 @@ packages:
dependency: "direct main"
description:
name: video_player
sha256: "7d78f0cfaddc8c19d4cb2d3bebe1bfef11f2103b0a03e5398b303a1bf65eeb14"
sha256: "0d55b1f1a31e5ad4c4967bfaa8ade0240b07d20ee4af1dfef5f531056512961a"
url: "https://pub.dev"
source: hosted
version: "2.9.5"
version: "2.10.0"
video_player_android:
dependency: transitive
description:

@ -14,7 +14,7 @@ dependencies:
async: ^2.11.0
badges: ^3.1.2
blurhash_dart: ^1.2.1
chewie: ^1.11.3
chewie: ^1.12.1
collection: ^1.18.0
cross_file: ^0.3.4+2
cupertino_icons: any
@ -31,10 +31,10 @@ dependencies:
flutter_foreground_task: ^6.1.3
flutter_highlighter: ^0.1.1
flutter_linkify: ^6.0.0
flutter_local_notifications: ^19.2.1
flutter_local_notifications: ^19.4.0
flutter_localizations:
sdk: flutter
flutter_map: ^6.1.0
flutter_map: ^8.2.1
flutter_new_badger: ^1.1.1
flutter_openssl_crypto: ^0.5.0
flutter_secure_storage: ^9.2.4
@ -46,25 +46,25 @@ dependencies:
flutter_vodozemac: ^0.2.2
flutter_web_auth_2: ^3.1.1 # Version 4 blocked by https://github.com/MixinNetwork/flutter-plugins/issues/379
flutter_webrtc: ^0.12.9
geolocator: ^13.0.1
go_router: ^15.1.2
geolocator: ^14.0.2
go_router: ^16.0.0
handy_window: ^0.4.0
html: ^0.15.4
http: ^1.2.0
image: ^4.1.7
image_picker: ^1.1.0
intl: any
just_audio: ^0.9.39
just_audio: ^0.10.4
latlong2: ^0.9.1
linkify: ^5.0.0
matrix: ^1.0.1
mime: ^1.0.6
matrix: ^1.1.0
mime: ^2.0.0
native_imaging: ^0.2.0
opus_caf_converter_dart: ^1.0.1
package_info_plus: ^8.0.2
path: ^1.9.0
path_provider: ^2.1.2
permission_handler: ^11.0.1
permission_handler: ^12.0.1
pretty_qr_code: ^3.2.1
provider: ^6.0.2
punycode: ^1.0.0
@ -76,14 +76,14 @@ dependencies:
share_plus: ^10.0.2
shared_preferences: ^2.2.0 # Pinned because https://github.com/flutter/flutter/issues/118401
slugify: ^2.0.0
sqflite_common_ffi: ^2.3.3
sqflite_common_ffi: ^2.3.6
sqlcipher_flutter_libs: ^0.6.1
swipe_to_action: ^0.3.0
tor_detector_web: ^1.1.0
unifiedpush: ^5.0.1
unifiedpush_ui: ^0.1.0
universal_html: ^2.2.4
url_launcher: ^6.2.5
url_launcher: ^6.3.2
video_compress: ^3.1.4
video_player: ^2.9.5
wakelock_plus: ^1.2.2

Loading…
Cancel
Save