Fixed settings after rebasing

pull/2269/head
Steven Lageveen 3 days ago
parent 696bbbe2db
commit c30b6f4fc4

@ -1,4 +1,3 @@
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/pages/chat/chat_view.dart';
import 'package:hermes/pages/chat_list/chat_list_body.dart';
import 'package:hermes/pages/chat_list/search_title.dart';

@ -38,19 +38,18 @@ abstract class AppConfig {
host: 'github.com',
path: '/allomanta/hermes/issues/new',
);
static bool swipePopEnableFullScreenDrag = true;
static int swipePopDurationMs = 280;
static double swipePopMinimumDragFraction = 0.3;
static double swipePopVelocityThreshold = 350.0;
static final Uri homeserverList = Uri(
scheme: 'https',
host: 'servers.joinmatrix.org',
path: 'servers.json',
);
static Duration get swipePopDuration =>
Duration(milliseconds: swipePopDurationMs);
// static bool swipePopEnableFullScreenDrag = true;
// static int swipePopDurationMs = 280;
// static double swipePopMinimumDragFraction = 0.3;
// static double swipePopVelocityThreshold = 350.0;
// static Duration get swipePopDuration =>
// Duration(milliseconds: swipePopDurationMs);
static final Uri privacyUrl = Uri(
scheme: 'https',

@ -5,51 +5,44 @@ 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';
abstract class SettingKeys {
static const String renderHtml = 'chat.pantheon.renderHtml';
static const String hideRedactedEvents = 'chat.pantheon.hideRedactedEvents';
static const String hideUnknownEvents = 'chat.pantheon.hideUnknownEvents';
static const String hideUnimportantStateEvents =
'chat.pantheon.hideUnimportantStateEvents';
static const String separateChatTypes = 'chat.pantheon.separateChatTypes';
static const String sentry = 'sentry';
static const String theme = 'theme';
static const String amoledEnabled = 'amoled_enabled';
static const String codeLanguage = 'code_language';
static const String showNoGoogle = 'chat.pantheon.show_no_google';
static const String fontSizeFactor = 'chat.pantheon.font_size_factor';
static const String showNoPid = 'chat.pantheon.show_no_pid';
static const String databasePassword = 'database-password';
static const String appLockKey = 'chat.pantheon.app_lock';
static const String unifiedPushRegistered =
'chat.pantheon.unifiedpush.registered';
static const String unifiedPushEndpoint =
'chat.pantheon.unifiedpush.endpoint';
static const String ownStatusMessage = 'chat.pantheon.status_msg';
static const String dontAskForBootstrapKey = 'chat.hermes.dont_ask_bootstrap';
static const String autoplayImages = 'chat.pantheon.autoplay_images';
static const String sendTypingNotifications =
'chat.pantheon.send_typing_notifications';
static const String sendPublicReadReceipts =
'chat.pantheon.send_public_read_receipts';
static const String sendOnEnter = 'chat.pantheon.send_on_enter';
static const String swipeRightToLeftToReply =
'chat.pantheon.swipeRightToLeftToReply';
static const String swipePopEnableFullScreenDrag =
'chat.pantheon.swipePopEnableFullScreenDrag';
static const String swipePopDurationMs = 'chat.pantheon.swipePopDurationMs';
static const String swipePopMinimumDragFraction =
'chat.pantheon.swipePopMinimumDragFraction';
static const String swipePopVelocityThreshold =
'chat.pantheon.swipePopVelocityThreshold';
static const String experimentalVoip = 'chat.pantheon.experimental_voip';
static const String showPresences = 'chat.pantheon.show_presences';
static const String displayNavigationRail =
'chat.pantheon.display_navigation_rail';
}
import 'package:hermes/utils/platform_infos.dart';
// abstract class SettingKeys {
// static const String renderHtml = 'chat.pantheon.renderHtml';
// static const String hideRedactedEvents = 'chat.pantheon.hideRedactedEvents';
// static const String hideUnknownEvents = 'chat.pantheon.hideUnknownEvents';
// static const String hideUnimportantStateEvents =
// 'chat.pantheon.hideUnimportantStateEvents';
// static const String separateChatTypes = 'chat.pantheon.separateChatTypes';
// static const String sentry = 'sentry';
// static const String theme = 'theme';
// static const String amoledEnabled = 'amoled_enabled';
// static const String codeLanguage = 'code_language';
// static const String showNoGoogle = 'chat.pantheon.show_no_google';
// static const String fontSizeFactor = 'chat.pantheon.font_size_factor';
// static const String showNoPid = 'chat.pantheon.show_no_pid';
// static const String databasePassword = 'database-password';
// static const String appLockKey = 'chat.pantheon.app_lock';
// static const String unifiedPushRegistered =
// 'chat.pantheon.unifiedpush.registered';
// static const String unifiedPushEndpoint =
// 'chat.pantheon.unifiedpush.endpoint';
// static const String ownStatusMessage = 'chat.pantheon.status_msg';
// static const String dontAskForBootstrapKey = 'chat.hermes.dont_ask_bootstrap';
// static const String autoplayImages = 'chat.pantheon.autoplay_images';
// static const String sendTypingNotifications =
// 'chat.pantheon.send_typing_notifications';
// static const String sendPublicReadReceipts =
// 'chat.pantheon.send_public_read_receipts';
// static const String sendOnEnter = 'chat.pantheon.send_on_enter';
// static const String swipeRightToLeftToReply =
// 'chat.pantheon.swipeRightToLeftToReply';
// static const String experimentalVoip = 'chat.pantheon.experimental_voip';
// static const String showPresences = 'chat.pantheon.show_presences';
// static const String displayNavigationRail =
// 'chat.pantheon.display_navigation_rail';
// }
enum AppSettings<T> {
textMessageMaxLength<int>('textMessageMaxLength', 16384),
@ -79,6 +72,23 @@ enum AppSettings<T> {
sendTypingNotifications<bool>('chat.fluffy.send_typing_notifications', true),
sendPublicReadReceipts<bool>('chat.fluffy.send_public_read_receipts', true),
swipeRightToLeftToReply<bool>('chat.fluffy.swipeRightToLeftToReply', true),
swipePopEnableFullScreenDrag<bool>(
'chat.pantheon.swipePopEnableFullScreenDrag',
true,
),
swipePopDuration<int>(
'chat.pantheon.swipePopDuration',
280,
),
swipePopMinimumDragFraction<double>(
'chat.pantheon.swipePopMinimumDragFraction',
0.3,
),
swipePopVelocityThreshold<double>(
'chat.pantheon.swipePopVelocityThreshold',
350.0,
),
sendOnEnter<bool>('chat.fluffy.send_on_enter', false),
showPresences<bool>('chat.fluffy.show_presences', true),
displayNavigationRail<bool>('chat.fluffy.display_navigation_rail', false),

@ -2940,6 +2940,22 @@
},
"sendReadReceipts": "Send read receipts",
"@sendReadReceipts": {},
"enableFullScreenSwipe": "Enable Full Screen Back Swipe",
"@enableFullScreenSwipe": {},
"enableFullScreenSwipeDescription": "Allows swiping anywhere on the screen to go back",
"@enableFullScreenSwipeDescription": {},
"swipeDuration": "Swipe duration",
"@swipeDuration": {},
"swipeDurationDescription": "Controls how long the transition animates.",
"@swipeDurationDescription": {},
"swipeDistance": "Required swipe distance",
"@swipeDistance": {},
"swipeDistanceDescription": "Percentage of the screen that must be swiped before popping.",
"@swipeDistanceDescription": {},
"swipeVelocity": "Required swipe velocity",
"@swipeVelocity": {},
"swipeVelocityDescription": "Minimum fling speed needed when the drag is short.",
"@swipeVelocityDescription": {},
"sendTypingNotificationsDescription": "Other participants in a chat can see when you are typing a new message.",
"@sendTypingNotificationsDescription": {},
"sendReadReceiptsDescription": "Other participants in a chat can see when you have read a message.",

@ -6,7 +6,6 @@ import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod;
import 'package:matrix/matrix.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/utils/client_manager.dart';
import 'package:hermes/utils/platform_infos.dart';
import 'config/setting_keys.dart';

@ -15,7 +15,6 @@ import 'package:matrix/matrix.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
import 'package:universal_html/html.dart' as html;
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/config/themes.dart';
import 'package:hermes/pages/chat/chat_view.dart';

@ -6,7 +6,6 @@ import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/pages/chat/recording_input_row.dart';
import 'package:hermes/pages/chat/recording_view_model.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/utils/other_party_can_receive.dart';
import 'package:hermes/utils/platform_infos.dart';
import 'package:hermes/widgets/avatar.dart';

@ -8,7 +8,6 @@ import 'package:matrix/matrix.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/themes.dart';
import 'package:hermes/pages/chat/chat.dart';
import 'package:hermes/pages/chat/chat_app_bar_list_tile.dart';

@ -6,7 +6,6 @@ import 'package:matrix/matrix.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
class CuteContent extends StatefulWidget {
final Event event;

@ -342,7 +342,7 @@ class Message extends StatelessWidget {
),
),
),
leftToRight: AppConfig.swipeRightToLeftToReply,
leftToRight: AppSettings.swipeRightToLeftToReply.value,
onReply: onReply,
child: Container(
constraints: const BoxConstraints(

@ -15,7 +15,6 @@ import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/utils/platform_infos.dart';
import 'package:hermes/widgets/adaptive_dialogs/show_ok_cancel_alert_dialog.dart';
import 'package:hermes/widgets/matrix.dart';
import 'events/audio_player.dart';
class RecordingViewModel extends StatefulWidget {

@ -12,7 +12,6 @@ import 'package:matrix/matrix.dart' as sdk;
import 'package:matrix/matrix.dart';
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/pages/chat_list/chat_list_view.dart';
import 'package:hermes/utils/localized_exception_extension.dart';
import 'package:hermes/utils/matrix_sdk_extensions/matrix_locals.dart';

@ -5,7 +5,6 @@ import 'package:matrix/matrix.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/pages/chat_list/chat_list.dart';
import 'package:hermes/pages/chat_list/chat_list_item.dart';
import 'package:hermes/pages/chat_list/dummy_chat_list_item.dart';

@ -1,8 +1,6 @@
import 'package:flutter/material.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/widgets/matrix.dart';
import 'settings_chat_view.dart';
@ -22,58 +20,40 @@ class SettingsChatController extends State<SettingsChat> {
@override
void initState() {
super.initState();
swipeDurationMs = AppConfig.swipePopDuration.inMilliseconds.toDouble();
swipeEnableFullScreenDrag = AppConfig.swipePopEnableFullScreenDrag;
swipeMinimumDragFraction = AppConfig.swipePopMinimumDragFraction;
swipeVelocityThreshold = AppConfig.swipePopVelocityThreshold;
}
void setSwipeEnableFullScreenDrag(bool value) {
setState(() => swipeEnableFullScreenDrag = value);
AppConfig.swipePopEnableFullScreenDrag = value;
Matrix.of(context)
.store
.setBool(SettingKeys.swipePopEnableFullScreenDrag, value);
swipeDurationMs = AppSettings.swipePopDuration.value.toDouble();
swipeMinimumDragFraction = AppSettings.swipePopMinimumDragFraction.value;
swipeVelocityThreshold = AppSettings.swipePopVelocityThreshold.value;
}
void updateSwipeDuration(double value) {
setState(() => swipeDurationMs = value);
}
Future<void> saveSwipeDuration(double value) async {
void saveSwipeDuration(double value) {
final milliseconds = value.round().clamp(120, 600).toInt();
final normalized = milliseconds.toDouble();
setState(() => swipeDurationMs = normalized);
AppConfig.swipePopDurationMs = milliseconds;
await Matrix.of(context)
.store
.setInt(SettingKeys.swipePopDurationMs, milliseconds);
AppSettings.swipePopDuration.setItem(milliseconds);
}
void updateSwipeMinimumDragFraction(double value) {
setState(() => swipeMinimumDragFraction = value);
}
Future<void> saveSwipeMinimumDragFraction(double value) async {
saveSwipeMinimumDragFraction(double value) {
final clamped = value.clamp(0.05, 1.0).toDouble();
setState(() => swipeMinimumDragFraction = clamped);
AppConfig.swipePopMinimumDragFraction = clamped;
await Matrix.of(context)
.store
.setDouble(SettingKeys.swipePopMinimumDragFraction, clamped);
AppSettings.swipePopMinimumDragFraction.setItem(clamped);
}
void updateSwipeVelocityThreshold(double value) {
setState(() => swipeVelocityThreshold = value);
}
Future<void> saveSwipeVelocityThreshold(double value) async {
saveSwipeVelocityThreshold(double value) {
final clamped = value.clamp(50.0, 2000.0).toDouble();
setState(() => swipeVelocityThreshold = clamped);
AppConfig.swipePopVelocityThreshold = clamped;
await Matrix.of(context)
.store
.setDouble(SettingKeys.swipePopVelocityThreshold, clamped);
AppSettings.swipePopVelocityThreshold.setItem(clamped);
}
@override

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/config/themes.dart';
import 'package:hermes/utils/platform_infos.dart';
@ -30,21 +29,14 @@ class SettingsChatView extends StatelessWidget {
child: MaxWidthBody(
child: Column(
children: [
const ListTile(
title: Text('Swipe back gesture'),
subtitle: Text(
'Adjust how sensitive the back-swipe navigation should be.',
),
),
SwitchListTile.adaptive(
value: controller.swipeEnableFullScreenDrag,
title: const Text('Enable full-screen swipe back'),
onChanged: controller.setSwipeEnableFullScreenDrag,
SettingsSwitchListTile.adaptive(
title: L10n.of(context).enableFullScreenSwipe,
subtitle: L10n.of(context).enableFullScreenSwipeDescription,
setting: AppSettings.swipePopEnableFullScreenDrag,
),
ListTile(
title: const Text('Swipe duration'),
subtitle:
const Text('Controls how long the transition animates.'),
title: Text(L10n.of(context).swipeDuration),
subtitle: Text(L10n.of(context).swipeDuration),
trailing: Text('${controller.swipeDurationMs.round()} ms'),
),
Slider.adaptive(
@ -60,9 +52,9 @@ class SettingsChatView extends StatelessWidget {
: null,
),
ListTile(
title: const Text('Required swipe distance'),
subtitle: const Text(
'Percentage of the screen that must be swiped before popping.',
title: Text(L10n.of(context).swipeDistance),
subtitle: Text(
L10n.of(context).swipeDistanceDescription,
),
trailing: Text(
'${(controller.swipeMinimumDragFraction * 100).round()}%',
@ -83,10 +75,8 @@ class SettingsChatView extends StatelessWidget {
: null,
),
ListTile(
title: const Text('Swipe release velocity'),
subtitle: const Text(
'Minimum fling speed needed when the drag is short.',
),
title: Text(L10n.of(context).swipeVelocity),
subtitle: Text(L10n.of(context).swipeVelocityDescription),
trailing:
Text('${controller.swipeVelocityThreshold.round()} px/s'),
),

@ -440,14 +440,10 @@ class BackgroundPush {
}
Future<String?> _resolveFirebaseGatewayUrl() async {
final store = matrix?.store;
if (store == null) {
return null;
}
final currentUrl = AppSettings.pushNotificationsGatewayUrl.value(store);
final currentUrl = AppSettings.pushNotificationsGatewayUrl.value;
if (_legacyPushGatewayUrls.contains(currentUrl)) {
final updatedUrl = AppSettings.pushNotificationsGatewayUrl.defaultValue;
await AppSettings.pushNotificationsGatewayUrl.setItem(store, updatedUrl);
await AppSettings.pushNotificationsGatewayUrl.setItem(updatedUrl);
Logs().i('[Push] Migrated legacy push gateway URL to $updatedUrl');
return updatedUrl;
}

@ -11,7 +11,6 @@ import 'package:matrix/matrix.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:universal_html/html.dart' as html;
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/utils/custom_http_client.dart';
import 'package:hermes/utils/custom_image_resizer.dart';

@ -293,7 +293,7 @@ Future<void> _tryPushHelper(
? null
: <AndroidNotificationAction>[
AndroidNotificationAction(
hermesNotificationActions.reply.name,
HermesNotificationActions.reply.name,
l10n.reply,
inputs: [
AndroidNotificationActionInput(
@ -305,7 +305,7 @@ Future<void> _tryPushHelper(
semanticAction: SemanticAction.reply,
),
AndroidNotificationAction(
hermesNotificationActions.markAsRead.name,
HermesNotificationActions.markAsRead.name,
l10n.markAsRead,
semanticAction: SemanticAction.markAsRead,
),

@ -3,6 +3,7 @@ import 'dart:math' as math;
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/utils/horizontal_swipe_recognizer.dart';
/// A [Page] that wraps content in a swipe-to-pop route.
@ -20,14 +21,15 @@ class SwipePopPage<T> extends Page<T> {
super.name,
super.arguments,
super.restorationId,
}) : duration = duration ?? AppConfig.swipePopDuration,
enableFullScreenDrag =
enableFullScreenDrag ?? AppConfig.swipePopEnableFullScreenDrag,
minimumDragFraction =
(minimumDragFraction ?? AppConfig.swipePopMinimumDragFraction)
.clamp(0.0, 1.0),
}) : duration = duration ??
Duration(milliseconds: AppSettings.swipePopDuration.value),
enableFullScreenDrag = enableFullScreenDrag ??
AppSettings.swipePopEnableFullScreenDrag.value,
minimumDragFraction = (minimumDragFraction ??
AppSettings.swipePopMinimumDragFraction.value)
.clamp(0.0, 1.0),
velocityThreshold =
velocityThreshold ?? AppConfig.swipePopVelocityThreshold;
velocityThreshold ?? AppSettings.swipePopVelocityThreshold.value;
final Widget child;
final Duration duration;

@ -4,7 +4,6 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:matrix/matrix.dart';
import 'package:provider/provider.dart';
import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/widgets/lock_screen.dart';
class AppLockWidget extends StatefulWidget {

@ -1,9 +1,4 @@
import 'package:hermes/config/setting_keys.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:matrix/matrix.dart';
@ -13,7 +8,6 @@ import 'package:hermes/config/themes.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/widgets/app_lock.dart';
import 'package:hermes/widgets/theme_builder.dart';
import '../config/app_config.dart';
import '../utils/custom_scroll_behaviour.dart';
import 'matrix.dart';

@ -13,7 +13,6 @@ import 'package:hermes/config/setting_keys.dart';
import 'package:hermes/l10n/l10n.dart';
import 'package:hermes/utils/push_helper.dart';
import 'package:hermes/widgets/hermes_app.dart';
import 'package:hermes/config/app_config.dart';
import 'package:hermes/utils/client_download_content_extension.dart';
import 'package:hermes/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:hermes/utils/platform_infos.dart';

@ -374,71 +374,6 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
}
}
void initSettings() {
AppConfig.fontSizeFactor =
double.tryParse(store.getString(SettingKeys.fontSizeFactor) ?? '') ??
AppConfig.fontSizeFactor;
AppConfig.renderHtml =
store.getBool(SettingKeys.renderHtml) ?? AppConfig.renderHtml;
AppConfig.swipeRightToLeftToReply =
store.getBool(SettingKeys.swipeRightToLeftToReply) ??
AppConfig.swipeRightToLeftToReply;
AppConfig.swipePopEnableFullScreenDrag =
store.getBool(SettingKeys.swipePopEnableFullScreenDrag) ??
AppConfig.swipePopEnableFullScreenDrag;
AppConfig.swipePopDurationMs =
store.getInt(SettingKeys.swipePopDurationMs) ??
AppConfig.swipePopDurationMs;
AppConfig.swipePopMinimumDragFraction =
store.getDouble(SettingKeys.swipePopMinimumDragFraction) ??
AppConfig.swipePopMinimumDragFraction;
AppConfig.swipePopVelocityThreshold =
store.getDouble(SettingKeys.swipePopVelocityThreshold) ??
AppConfig.swipePopVelocityThreshold;
AppConfig.hideRedactedEvents =
store.getBool(SettingKeys.hideRedactedEvents) ??
AppConfig.hideRedactedEvents;
AppConfig.hideUnknownEvents =
store.getBool(SettingKeys.hideUnknownEvents) ??
AppConfig.hideUnknownEvents;
AppConfig.separateChatTypes =
store.getBool(SettingKeys.separateChatTypes) ??
AppConfig.separateChatTypes;
AppConfig.autoplayImages =
store.getBool(SettingKeys.autoplayImages) ?? AppConfig.autoplayImages;
AppConfig.sendTypingNotifications =
store.getBool(SettingKeys.sendTypingNotifications) ??
AppConfig.sendTypingNotifications;
AppConfig.sendPublicReadReceipts =
store.getBool(SettingKeys.sendPublicReadReceipts) ??
AppConfig.sendPublicReadReceipts;
AppConfig.sendOnEnter =
store.getBool(SettingKeys.sendOnEnter) ?? AppConfig.sendOnEnter;
AppConfig.experimentalVoip = store.getBool(SettingKeys.experimentalVoip) ??
AppConfig.experimentalVoip;
AppConfig.showPresences =
store.getBool(SettingKeys.showPresences) ?? AppConfig.showPresences;
AppConfig.displayNavigationRail =
store.getBool(SettingKeys.displayNavigationRail) ??
AppConfig.displayNavigationRail;
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);

@ -1952,26 +1952,42 @@ packages:
dependency: "direct main"
description:
name: unifiedpush
sha256: b52a0eff848d0446b9d521e0ad2f7bc76c4dda88d0f6ac0a79f1765ccfe37939
sha256: "8ed9767f750a1dc6159a77e2171641d0cb825dc87682d1ce1b8618689b79f58e"
url: "https://pub.dev"
source: hosted
version: "6.1.0"
version: "6.2.0"
unifiedpush_android:
dependency: transitive
description:
name: unifiedpush_android
sha256: "2af6a09a5fb9fdd97b61e704a587e88abcdb5f7ee2aea9a2c35e80159f9d586d"
sha256: "556796c81e8151ee8e4275baea2f7191119e8b1412ec35523cc2ac1c44c348bf"
url: "https://pub.dev"
source: hosted
version: "3.3.1"
version: "3.4.0"
unifiedpush_linux:
dependency: transitive
description:
name: unifiedpush_linux
sha256: c062d5eedd1cec70bcd33270cc4e01ae0ff6501f33d471167c06b34a968adfeb
url: "https://pub.dev"
source: hosted
version: "1.0.0"
unifiedpush_platform_interface:
dependency: transitive
description:
name: unifiedpush_platform_interface
sha256: "5aa3eefc2699e4d8db6d723f0cfdfb56ac850487549a0b3b83574f4a89f33aab"
sha256: "83372bc8d794b8b12ef6993b518d7be907dcfc2191bdf6de0ece5c4445d89880"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "4.0.0"
unifiedpush_storage_interface:
dependency: transitive
description:
name: unifiedpush_storage_interface
sha256: b8d423a4695efc616aa21d8ab48fb5ef99d6288c68b56282b8faac1579ceabd9
url: "https://pub.dev"
source: hosted
version: "1.0.0"
unifiedpush_ui:
dependency: "direct main"
description:

Loading…
Cancel
Save