From 7bf8a1b59ef86aa8465da2bd150f66e35e913ea7 Mon Sep 17 00:00:00 2001 From: Hamlet Jiang Su Date: Mon, 10 Jul 2023 09:05:27 -0700 Subject: [PATCH] removed sentry error logging --- CHANGELOG.md | 1 + README.md | 3 +- ios/Podfile.lock | 15 - lib/account/bloc/account_bloc.dart | 4 +- lib/community/bloc/community_bloc.dart | 16 +- lib/core/auth/bloc/auth_bloc.dart | 3 - lib/core/theme/bloc/theme_bloc.dart | 3 +- lib/core/update/check_github_update.dart | 2 - lib/inbox/bloc/inbox_bloc.dart | 6 - lib/main.dart | 35 +-- lib/post/bloc/post_bloc.dart | 11 - lib/search/bloc/search_bloc.dart | 9 +- lib/settings/pages/general_settings_page.dart | 45 --- lib/thunder/bloc/thunder_bloc.dart | 8 +- lib/thunder/bloc/thunder_state.dart | 11 - lib/thunder/pages/thunder_page.dart | 265 ++++++------------ lib/user/bloc/user_bloc.dart | 12 +- linux/flutter/generated_plugin_registrant.cc | 4 - linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 2 - macos/Podfile.lock | 21 +- pubspec.lock | 16 -- pubspec.yaml | 1 - .../flutter/generated_plugin_registrant.cc | 3 - windows/flutter/generated_plugins.cmake | 1 - 25 files changed, 102 insertions(+), 396 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8517e27c5..b3fc860b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### Changed - Adjusted subscription styling to be more consistent - contribution from @micahmo +- Removed Sentry error logging ### Fixed - Fixed issue with styling differences in compact and normal view for community/instance - contribution from @machinaeZER0 diff --git a/README.md b/README.md index 8d808ec46..c69e70dbb 100644 --- a/README.md +++ b/README.md @@ -162,8 +162,7 @@ You can also run your local development environment for Android via the Docker c ### Environment File This is an example of the `.env` that can be used for Thunder. ```bash -# Sentry Credentials -SENTRY_DSN="" +# Empty Environment File ``` ## Conventions diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 23e0dfee6..156eae73a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -16,13 +16,6 @@ PODS: - FlutterMacOS - permission_handler_apple (9.1.0): - Flutter - - Sentry/HybridSDK (8.7.3): - - SentryPrivate (= 8.7.3) - - sentry_flutter (0.0.1): - - Flutter - - FlutterMacOS - - Sentry/HybridSDK (= 8.7.3) - - SentryPrivate (8.7.3) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -44,7 +37,6 @@ DEPENDENCIES: - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - - sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `.symlinks/plugins/sqflite/ios`) @@ -54,8 +46,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - FMDB - - Sentry - - SentryPrivate EXTERNAL SOURCES: device_info_plus: @@ -72,8 +62,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" - sentry_flutter: - :path: ".symlinks/plugins/sentry_flutter/ios" share_plus: :path: ".symlinks/plugins/share_plus/ios" shared_preferences_foundation: @@ -94,9 +82,6 @@ SPEC CHECKSUMS: package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7 path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 permission_handler_apple: 8f116445eff3c0e7c65ad60f5fef5490aa94b4e4 - Sentry: c7a86f43510a7d5678d4de28d78c28ab351d295b - sentry_flutter: f2710a4f537e9a7143b02562b8754ccdc8224751 - SentryPrivate: 2eaabf598a46d4b9b8822aef766df2a84caf2e6f share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028 shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a diff --git a/lib/account/bloc/account_bloc.dart b/lib/account/bloc/account_bloc.dart index 057e2d6fe..d92edd316 100644 --- a/lib/account/bloc/account_bloc.dart +++ b/lib/account/bloc/account_bloc.dart @@ -2,7 +2,7 @@ import 'package:bloc/bloc.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:equatable/equatable.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:stream_transform/stream_transform.dart'; import 'package:thunder/account/models/account.dart'; @@ -59,12 +59,10 @@ class AccountBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } emit(state.copyWith(status: AccountStatus.failure, errorMessage: exception.toString())); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: AccountStatus.failure, errorMessage: e.toString())); } }); diff --git a/lib/community/bloc/community_bloc.dart b/lib/community/bloc/community_bloc.dart index 0ab27bb9b..bae29489b 100644 --- a/lib/community/bloc/community_bloc.dart +++ b/lib/community/bloc/community_bloc.dart @@ -2,7 +2,7 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -95,8 +95,6 @@ class CommunityBloc extends Bloc { return emit(state.copyWith(status: CommunityStatus.success, communityId: state.communityId, listingType: state.listingType)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith( status: CommunityStatus.failure, errorMessage: e.toString(), @@ -134,8 +132,6 @@ class CommunityBloc extends Bloc { return emit(state.copyWith(status: CommunityStatus.success, communityId: state.communityId, listingType: state.listingType)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith( status: CommunityStatus.failure, errorMessage: e.toString(), @@ -158,8 +154,6 @@ class CommunityBloc extends Bloc { return emit(state.copyWith(status: CommunityStatus.success, communityId: state.communityId, listingType: state.listingType, communityName: state.communityName)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith( status: CommunityStatus.failure, errorMessage: e.toString(), @@ -337,13 +331,11 @@ class CommunityBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } emit(state.copyWith(status: CommunityStatus.failure, errorMessage: exception.toString(), listingType: state.listingType, communityId: state.communityId, communityName: state.communityName)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: CommunityStatus.failure, errorMessage: e.toString(), listingType: state.listingType, communityId: state.communityId, communityName: state.communityName)); } } @@ -388,8 +380,6 @@ class CommunityBloc extends Bloc { subscribedType: fullCommunityView.communityView.subscribed, )); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit( state.copyWith( status: CommunityStatus.failure, @@ -450,8 +440,6 @@ class CommunityBloc extends Bloc { communityName: state.communityName, )); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit( state.copyWith( status: CommunityStatus.failure, @@ -495,8 +483,6 @@ class CommunityBloc extends Bloc { blockedCommunity: blockedCommunity, )); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit( state.copyWith( status: CommunityStatus.failure, diff --git a/lib/core/auth/bloc/auth_bloc.dart b/lib/core/auth/bloc/auth_bloc.dart index c312a3a24..43ed74bd8 100644 --- a/lib/core/auth/bloc/auth_bloc.dart +++ b/lib/core/auth/bloc/auth_bloc.dart @@ -1,7 +1,6 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:collection/collection.dart'; import 'package:uuid/uuid.dart'; @@ -137,11 +136,9 @@ class AuthBloc extends Bloc { // Restore the original baseUrl lemmyClient.changeBaseUrl(originalBaseUrl); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: AuthStatus.failure, account: null, isLoggedIn: false, errorMessage: s.toString())); } - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: AuthStatus.failure, account: null, isLoggedIn: false, errorMessage: e.toString())); } }); diff --git a/lib/core/theme/bloc/theme_bloc.dart b/lib/core/theme/bloc/theme_bloc.dart index 6d23f36f5..27bea6c70 100644 --- a/lib/core/theme/bloc/theme_bloc.dart +++ b/lib/core/theme/bloc/theme_bloc.dart @@ -4,7 +4,7 @@ import 'package:flutter/scheduler.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_transform/stream_transform.dart'; import 'package:thunder/core/singletons/preferences.dart'; @@ -56,7 +56,6 @@ class ThemeBloc extends Bloc { ), ); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: ThemeStatus.failure)); } } diff --git a/lib/core/update/check_github_update.dart b/lib/core/update/check_github_update.dart index 21138c901..629b63e6c 100644 --- a/lib/core/update/check_github_update.dart +++ b/lib/core/update/check_github_update.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:package_info_plus/package_info_plus.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:thunder/core/models/version.dart'; @@ -35,7 +34,6 @@ Future fetchVersion() async { return Version(version: currentVersion ?? 'N/A', latestVersion: 'N/A', hasUpdate: false); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return Version(version: 'N/A', latestVersion: 'N/A', hasUpdate: false); } } diff --git a/lib/inbox/bloc/inbox_bloc.dart b/lib/inbox/bloc/inbox_bloc.dart index 64d2a2ba9..285944676 100644 --- a/lib/inbox/bloc/inbox_bloc.dart +++ b/lib/inbox/bloc/inbox_bloc.dart @@ -3,7 +3,6 @@ import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_transform/stream_transform.dart'; import 'package:thunder/account/models/account.dart'; @@ -158,13 +157,11 @@ class InboxBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } emit(state.copyWith(status: InboxStatus.failure, errorMessage: exception.toString())); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: InboxStatus.failure, errorMessage: e.toString())); } } @@ -191,7 +188,6 @@ class InboxBloc extends Bloc { emit(state.copyWith(status: InboxStatus.success, replies: replies)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: InboxStatus.failure, errorMessage: e.toString())); } } @@ -220,7 +216,6 @@ class InboxBloc extends Bloc { add(GetInboxEvent(showAll: !state.showUnreadOnly)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: InboxStatus.failure, errorMessage: e.toString())); } } @@ -246,7 +241,6 @@ class InboxBloc extends Bloc { add(GetInboxEvent(showAll: !state.showUnreadOnly)); return emit(state.copyWith(status: InboxStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: InboxStatus.failure, errorMessage: e.toString())); } } diff --git a/lib/main.dart b/lib/main.dart index 2edd3895d..64bb3b403 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,7 +9,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:overlay_support/overlay_support.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:shared_preferences/shared_preferences.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:flex_color_scheme/flex_color_scheme.dart'; @@ -20,18 +20,6 @@ import 'package:thunder/routes.dart'; import 'package:thunder/core/singletons/database.dart'; import 'package:thunder/core/theme/bloc/theme_bloc.dart'; -// Ignore specific exceptions to send to Sentry -FutureOr beforeSend(SentryEvent event, {Hint? hint}) async { - if (event.exceptions != null && - event.exceptions!.isNotEmpty && - event.exceptions!.first.value != null && - event.exceptions!.first.value!.contains('The request returned an invalid status code of 400.')) { - return null; - } - - return event; -} - void main() async { WidgetsBinding widgetsBinding = WidgetsFlutterBinding.ensureInitialized(); FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding); @@ -45,26 +33,7 @@ void main() async { // Load up sqlite database await DB.instance.database; - // Load up SharedPreferences to check if Sentry error tracking is enabled - it is disabled by default - await UserPreferences.instance.refetchPreferences(); - - SharedPreferences prefs = UserPreferences.instance.sharedPreferences; - bool enableSentryErrorTracking = prefs.getBool('setting_error_tracking_enable_sentry') ?? false; - String? sentryDSN = enableSentryErrorTracking ? dotenv.env['SENTRY_DSN'] : null; - - if (sentryDSN != null) { - await SentryFlutter.init( - (options) { - options.dsn = kDebugMode ? '' : sentryDSN; - options.debug = kDebugMode; - options.tracesSampleRate = kDebugMode ? 1.0 : 0.1; - options.beforeSend = beforeSend; - }, - appRunner: () => runApp(const ThunderApp()), - ); - } else { - runApp(const ThunderApp()); - } + runApp(const ThunderApp()); } class ThunderApp extends StatelessWidget { diff --git a/lib/post/bloc/post_bloc.dart b/lib/post/bloc/post_bloc.dart index 745962ef2..0f859d7a8 100644 --- a/lib/post/bloc/post_bloc.dart +++ b/lib/post/bloc/post_bloc.dart @@ -2,7 +2,6 @@ import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:flutter/cupertino.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -147,12 +146,10 @@ class PostBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } emit(state.copyWith(status: PostStatus.failure, errorMessage: exception.toString())); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -243,7 +240,6 @@ class PostBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } @@ -253,7 +249,6 @@ class PostBloc extends Bloc { emit(state.copyWith(status: PostStatus.failure, errorMessage: exception.toString())); } } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -281,7 +276,6 @@ class PostBloc extends Bloc { return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -298,7 +292,6 @@ class PostBloc extends Bloc { return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -337,7 +330,6 @@ class PostBloc extends Bloc { return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -361,7 +353,6 @@ class PostBloc extends Bloc { return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -393,7 +384,6 @@ class PostBloc extends Bloc { add(GetPostEvent(postView: state.postView!)); return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } @@ -424,7 +414,6 @@ class PostBloc extends Bloc { add(GetPostEvent(postView: state.postView!)); return emit(state.copyWith(status: PostStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: PostStatus.failure, errorMessage: e.toString())); } } diff --git a/lib/search/bloc/search_bloc.dart b/lib/search/bloc/search_bloc.dart index e02501f08..7270d9e64 100644 --- a/lib/search/bloc/search_bloc.dart +++ b/lib/search/bloc/search_bloc.dart @@ -3,7 +3,7 @@ import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:stream_transform/stream_transform.dart'; import 'package:thunder/account/models/account.dart'; @@ -61,8 +61,6 @@ class SearchBloc extends Bloc { return emit(state.copyWith(status: SearchStatus.success, results: searchResponse, page: 2)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith(status: SearchStatus.failure, errorMessage: e.toString())); } } @@ -98,12 +96,9 @@ class SearchBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith(status: SearchStatus.failure, errorMessage: e.toString())); } } @@ -165,8 +160,6 @@ class SearchBloc extends Bloc { return emit(state.copyWith(status: SearchStatus.success, results: updatedResults)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith(status: SearchStatus.failure, errorMessage: e.toString())); } } diff --git a/lib/settings/pages/general_settings_page.dart b/lib/settings/pages/general_settings_page.dart index ddc02daf9..daa103687 100644 --- a/lib/settings/pages/general_settings_page.dart +++ b/lib/settings/pages/general_settings_page.dart @@ -52,9 +52,6 @@ class _GeneralSettingsPageState extends State { String defaultInstance = 'lemmy.world'; - // Error Reporting - bool enableSentryErrorTracking = false; - TextEditingController instanceController = TextEditingController(); // Loading @@ -158,22 +155,6 @@ class _GeneralSettingsPageState extends State { await prefs.setBool('setting_notifications_show_inapp_update', value); setState(() => showInAppUpdateNotification = value); break; - - // Error Reporting - case 'setting_error_tracking_enable_sentry': - await prefs.setBool('setting_error_tracking_enable_sentry', value); - setState(() => enableSentryErrorTracking = value); - - SnackBar snackBar = const SnackBar( - content: Text('Restart Thunder to apply the new settings'), - behavior: SnackBarBehavior.floating, - ); - - if (context.mounted) { - ScaffoldMessenger.of(context).clearSnackBars(); - ScaffoldMessenger.of(context).showSnackBar(snackBar); - } - break; } if (context.mounted) { @@ -220,9 +201,6 @@ class _GeneralSettingsPageState extends State { // Notification Settings showInAppUpdateNotification = prefs.getBool('setting_notifications_show_inapp_update') ?? true; - // Error Tracking - enableSentryErrorTracking = prefs.getBool('setting_error_tracking_enable_sentry') ?? false; - isLoading = false; }); } @@ -498,29 +476,6 @@ class _GeneralSettingsPageState extends State { ], ), ), - Container( - padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 16.0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 8.0), - child: Text( - 'Error Reporting', - style: theme.textTheme.titleLarge, - ), - ), - ToggleOption( - description: 'Enable Sentry error tracking', - value: enableSentryErrorTracking, - iconEnabled: Icons.error_rounded, - iconDisabled: Icons.error_rounded, - onToggle: (bool value) => setPreferences('setting_error_tracking_enable_sentry', value), - ), - ], - ), - ), const SizedBox( height: 120, ), diff --git a/lib/thunder/bloc/thunder_bloc.dart b/lib/thunder/bloc/thunder_bloc.dart index b6b4d2f66..59325d434 100644 --- a/lib/thunder/bloc/thunder_bloc.dart +++ b/lib/thunder/bloc/thunder_bloc.dart @@ -3,7 +3,7 @@ import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:lemmy_api_client/v3.dart'; import 'package:path/path.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:shared_preferences/shared_preferences.dart'; import 'package:sqflite/sqflite.dart'; import 'package:stream_transform/stream_transform.dart'; @@ -50,7 +50,6 @@ class ThunderBloc extends Bloc { add(UserPreferencesChangeEvent()); emit(state.copyWith(status: ThunderStatus.success, database: database, version: version)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: ThunderStatus.failure, errorMessage: e.toString())); } } @@ -98,9 +97,6 @@ class ThunderBloc extends Bloc { // Notification Settings bool showInAppUpdateNotification = prefs.getBool('setting_notifications_show_inapp_update') ?? true; - // Error Tracking - bool enableSentryErrorTracking = prefs.getBool('setting_error_tracking_enable_sentry') ?? false; - // Post Gestures bool enablePostGestures = prefs.getBool('setting_gesture_enable_post_gestures') ?? true; SwipeAction leftPrimaryPostGesture = SwipeAction.values.byName(prefs.getString('setting_gesture_post_left_primary_gesture') ?? SwipeAction.upvote.name); @@ -148,7 +144,6 @@ class ThunderBloc extends Bloc { openInExternalBrowser: openInExternalBrowser, showLinkPreviews: showLinkPreviews, showInAppUpdateNotification: showInAppUpdateNotification, - enableSentryErrorTracking: enableSentryErrorTracking, enablePostGestures: enablePostGestures, leftPrimaryPostGesture: leftPrimaryPostGesture, leftSecondaryPostGesture: leftSecondaryPostGesture, @@ -167,7 +162,6 @@ class ThunderBloc extends Bloc { contentFontSizeScale: contentFontSizeScale, )); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: ThunderStatus.failure, errorMessage: e.toString())); } } diff --git a/lib/thunder/bloc/thunder_state.dart b/lib/thunder/bloc/thunder_state.dart index 93ee3fd30..c880a1ff4 100644 --- a/lib/thunder/bloc/thunder_state.dart +++ b/lib/thunder/bloc/thunder_state.dart @@ -40,9 +40,6 @@ class ThunderState extends Equatable { // Notification Settings this.showInAppUpdateNotification = true, - // Error Reporting - this.enableSentryErrorTracking = false, - // Post Gestures this.enablePostGestures = true, this.leftPrimaryPostGesture = SwipeAction.upvote, @@ -105,9 +102,6 @@ class ThunderState extends Equatable { // Notification Settings final bool showInAppUpdateNotification; - // Error Reporting - final bool enableSentryErrorTracking; - // Post Gestures final bool enablePostGestures; final SwipeAction leftPrimaryPostGesture; @@ -162,8 +156,6 @@ class ThunderState extends Equatable { bool? openInExternalBrowser, // Notification Settings bool? showInAppUpdateNotification, - // Error Reporting - bool? enableSentryErrorTracking, // Post Gestures bool? enablePostGestures, SwipeAction? leftPrimaryPostGesture, @@ -215,8 +207,6 @@ class ThunderState extends Equatable { openInExternalBrowser: openInExternalBrowser ?? this.openInExternalBrowser, // Notification Settings showInAppUpdateNotification: showInAppUpdateNotification ?? this.showInAppUpdateNotification, - // Error Reporting - enableSentryErrorTracking: enableSentryErrorTracking ?? this.enableSentryErrorTracking, // Post Gestures enablePostGestures: enablePostGestures ?? this.enablePostGestures, leftPrimaryPostGesture: leftPrimaryPostGesture ?? this.leftPrimaryPostGesture, @@ -268,7 +258,6 @@ class ThunderState extends Equatable { markPostReadOnMediaView, openInExternalBrowser, showInAppUpdateNotification, - enableSentryErrorTracking, enablePostGestures, leftPrimaryPostGesture, leftSecondaryPostGesture, diff --git a/lib/thunder/pages/thunder_page.dart b/lib/thunder/pages/thunder_page.dart index 0da813087..3cd244220 100644 --- a/lib/thunder/pages/thunder_page.dart +++ b/lib/thunder/pages/thunder_page.dart @@ -41,7 +41,6 @@ class _ThunderState extends State { final GlobalKey _feedScaffoldKey = GlobalKey(); bool hasShownUpdateDialog = false; - bool hasShownSentryDialog = false; @override void initState() { @@ -95,6 +94,7 @@ class _ThunderState extends State { _feedScaffoldKey.currentState?.openDrawer(); } } + void _showExitWarning() { final theme = Theme.of(context); const snackBarTextColor = TextStyle(color: Colors.white); @@ -123,118 +123,95 @@ class _ThunderState extends State { } } - @override Widget build(BuildContext context) { return MultiBlocProvider( - providers: [ - BlocProvider(create: (context) => ThunderBloc()), - BlocProvider(create: (context) => InboxBloc()), - ], - child: WillPopScope( - onWillPop: () async { return _handleBackButtonPress(); }, - child: BlocBuilder( - builder: (context, thunderBlocState) { - FlutterNativeSplash.remove(); - - switch (thunderBlocState.status) { - case ThunderStatus.initial: - context.read().add(InitializeAppEvent()); - return const Center(child: CircularProgressIndicator()); - case ThunderStatus.loading: - return const Center(child: CircularProgressIndicator()); - case ThunderStatus.refreshing: - case ThunderStatus.success: - return Scaffold( - bottomNavigationBar: _getScaffoldBottomNavigationBar(context), - body: MultiBlocProvider( - providers: [ - BlocProvider(create: (context) => AuthBloc()), - BlocProvider(create: (context) => AccountBloc()), - ], - child: BlocConsumer( - listenWhen: (AuthState previous, AuthState current) { if (previous.isLoggedIn != current.isLoggedIn || previous.status == AuthStatus.initial) return true; return false; }, - listener: (context, state) { - context.read().add(GetAccountInformation()); - context.read().add(const GetInboxEvent()); - }, - builder: (context, state) { - switch (state.status) { - case AuthStatus.initial: - context.read().add(CheckAuth()); - return const Center( - child: CircularProgressIndicator()); - case AuthStatus.loading: - WidgetsBinding.instance.addPostFrameCallback((_) => - setState(() => selectedPageIndex = 0)); - return const Center( - child: CircularProgressIndicator()); - case AuthStatus.success: - Version? version = thunderBlocState.version; - bool showInAppUpdateNotification = thunderBlocState - .showInAppUpdateNotification; - bool? enableSentryErrorTracking = thunderBlocState - .enableSentryErrorTracking; - if (version?.hasUpdate == true && - hasShownUpdateDialog == false && - showInAppUpdateNotification == true) { - WidgetsBinding.instance.addPostFrameCallback((_) { - showUpdateNotification(context, version); - setState(() => hasShownUpdateDialog = true); - } - ); - } - - // Ask user if they want to opt-in to Sentry for the first time (based on if setting_error_tracking_enable_sentry is null) - if (enableSentryErrorTracking == null && - hasShownSentryDialog == false) { - WidgetsBinding.instance.addPostFrameCallback((_) { - showSentryNotification(context); - setState(() => hasShownSentryDialog = true); - }); - } - - return PageView( - controller: pageController, - onPageChanged: (index) => setState(() => selectedPageIndex = index), - physics: const NeverScrollableScrollPhysics(), - children: [ - CommunityPage(scaffoldKey: _feedScaffoldKey), - BlocProvider( - create: (context) => SearchBloc(), - child: const SearchPage(), - ), - const AccountPage(), - const InboxPage(), - SettingsPage(), - ], - ); - - case AuthStatus.failure: - return ErrorMessage( - message: state.errorMessage, - action: () => - { - context.read().add(CheckAuth()) - }, - actionText: 'Refresh Content', - ); - } - } - ) - ) - ); - case ThunderStatus.failure: - return ErrorMessage( - message: thunderBlocState.errorMessage, - action: () => {context.read().add(CheckAuth())}, - actionText: 'Refresh Content', - ); - } + providers: [ + BlocProvider(create: (context) => ThunderBloc()), + BlocProvider(create: (context) => InboxBloc()), + ], + child: WillPopScope( + onWillPop: () async { + return _handleBackButtonPress(); }, - ), - ) - ); + child: BlocBuilder( + builder: (context, thunderBlocState) { + FlutterNativeSplash.remove(); + + switch (thunderBlocState.status) { + case ThunderStatus.initial: + context.read().add(InitializeAppEvent()); + return const Center(child: CircularProgressIndicator()); + case ThunderStatus.loading: + return const Center(child: CircularProgressIndicator()); + case ThunderStatus.refreshing: + case ThunderStatus.success: + return Scaffold( + bottomNavigationBar: _getScaffoldBottomNavigationBar(context), + body: MultiBlocProvider( + providers: [ + BlocProvider(create: (context) => AuthBloc()), + BlocProvider(create: (context) => AccountBloc()), + ], + child: BlocConsumer(listenWhen: (AuthState previous, AuthState current) { + if (previous.isLoggedIn != current.isLoggedIn || previous.status == AuthStatus.initial) return true; + return false; + }, listener: (context, state) { + context.read().add(GetAccountInformation()); + context.read().add(const GetInboxEvent()); + }, builder: (context, state) { + switch (state.status) { + case AuthStatus.initial: + context.read().add(CheckAuth()); + return const Center(child: CircularProgressIndicator()); + case AuthStatus.loading: + WidgetsBinding.instance.addPostFrameCallback((_) => setState(() => selectedPageIndex = 0)); + return const Center(child: CircularProgressIndicator()); + case AuthStatus.success: + Version? version = thunderBlocState.version; + bool showInAppUpdateNotification = thunderBlocState.showInAppUpdateNotification; + + if (version?.hasUpdate == true && hasShownUpdateDialog == false && showInAppUpdateNotification == true) { + WidgetsBinding.instance.addPostFrameCallback((_) { + showUpdateNotification(context, version); + setState(() => hasShownUpdateDialog = true); + }); + } + + return PageView( + controller: pageController, + onPageChanged: (index) => setState(() => selectedPageIndex = index), + physics: const NeverScrollableScrollPhysics(), + children: [ + CommunityPage(scaffoldKey: _feedScaffoldKey), + BlocProvider( + create: (context) => SearchBloc(), + child: const SearchPage(), + ), + const AccountPage(), + const InboxPage(), + SettingsPage(), + ], + ); + + case AuthStatus.failure: + return ErrorMessage( + message: state.errorMessage, + action: () => {context.read().add(CheckAuth())}, + actionText: 'Refresh Content', + ); + } + }))); + case ThunderStatus.failure: + return ErrorMessage( + message: thunderBlocState.errorMessage, + action: () => {context.read().add(CheckAuth())}, + actionText: 'Refresh Content', + ); + } + }, + ), + )); } // Generates the BottomNavigationBar @@ -336,74 +313,4 @@ class _ThunderState extends State { slideDismissDirection: DismissDirection.vertical, ); } - - // Sentry opt-in notification - void showSentryNotification(BuildContext thunderBlocContext) { - final theme = Theme.of(context); - final SharedPreferences prefs = UserPreferences.instance.sharedPreferences; - - showOverlay( - (context, t) { - return Container( - color: Color.lerp(Colors.transparent, Colors.black54, t), - child: FractionalTranslation( - translation: Offset.lerp(const Offset(0, 1), const Offset(0, 0), t)!, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Card( - child: SafeArea( - child: Padding( - padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 0, bottom: 8.0), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Enable Sentry Error Reporting?', - style: theme.textTheme.bodyLarge?.copyWith(fontWeight: FontWeight.w600), - ), - const SizedBox(height: 12.0), - Text( - 'By opting in, any errors that you encounter will be automatically sent to Sentry to improve Thunder.', - style: theme.textTheme.bodyMedium?.copyWith(color: theme.textTheme.bodyMedium?.color?.withOpacity(0.8)), - ), - const SizedBox(height: 8.0), - Text( - 'You may opt out at any time in the Settings.', - style: theme.textTheme.bodyMedium?.copyWith(color: theme.textTheme.bodyMedium?.color?.withOpacity(0.8)), - ), - const SizedBox(height: 8.0), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - TextButton( - child: const Text('Allow'), - onPressed: () { - prefs.setBool('setting_error_tracking_enable_sentry', true); - OverlaySupportEntry.of(context)!.dismiss(); - }, - ), - TextButton( - child: const Text('Do not allow'), - onPressed: () { - prefs.setBool('setting_error_tracking_enable_sentry', false); - OverlaySupportEntry.of(context)!.dismiss(); - }, - ), - ], - ) - ], - ), - ), - ), - ), - ], - ), - ), - ); - }, - duration: Duration.zero, - ); - } } diff --git a/lib/user/bloc/user_bloc.dart b/lib/user/bloc/user_bloc.dart index 2f769096a..cf28c2cb4 100644 --- a/lib/user/bloc/user_bloc.dart +++ b/lib/user/bloc/user_bloc.dart @@ -3,7 +3,7 @@ import 'package:dio/dio.dart'; import 'package:equatable/equatable.dart'; import 'package:bloc_concurrency/bloc_concurrency.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; + import 'package:stream_transform/stream_transform.dart'; import 'package:thunder/account/models/account.dart'; @@ -150,11 +150,9 @@ class UserBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } @@ -252,11 +250,9 @@ class UserBloc extends Bloc { } catch (e, s) { exception = e; attemptCount++; - await Sentry.captureException(e, stackTrace: s); } } } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } @@ -287,7 +283,6 @@ class UserBloc extends Bloc { return emit(state.copyWith(status: UserStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } @@ -304,8 +299,6 @@ class UserBloc extends Bloc { return emit(state.copyWith(status: UserStatus.success, userId: state.userId)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); - return emit(state.copyWith( status: UserStatus.failure, errorMessage: e.toString(), @@ -326,7 +319,6 @@ class UserBloc extends Bloc { return emit(state.copyWith(status: UserStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } @@ -361,7 +353,6 @@ class UserBloc extends Bloc { return emit(state.copyWith(status: UserStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); return emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } @@ -385,7 +376,6 @@ class UserBloc extends Bloc { return emit(state.copyWith(status: UserStatus.success)); } catch (e, s) { - await Sentry.captureException(e, stackTrace: s); emit(state.copyWith(status: UserStatus.failure, errorMessage: e.toString())); } } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 252873571..fe56f8d82 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -7,16 +7,12 @@ #include "generated_plugin_registrant.h" #include -#include #include void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) dynamic_color_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "DynamicColorPlugin"); dynamic_color_plugin_register_with_registrar(dynamic_color_registrar); - g_autoptr(FlPluginRegistrar) sentry_flutter_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "SentryFlutterPlugin"); - sentry_flutter_plugin_register_with_registrar(sentry_flutter_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index b942fff63..18366213f 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -4,7 +4,6 @@ list(APPEND FLUTTER_PLUGIN_LIST dynamic_color - sentry_flutter url_launcher_linux ) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e01503012..8afa79648 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -9,7 +9,6 @@ import device_info_plus import dynamic_color import package_info_plus import path_provider_foundation -import sentry_flutter import share_plus import shared_preferences_foundation import sqflite @@ -20,7 +19,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { DynamicColorPlugin.register(with: registry.registrar(forPlugin: "DynamicColorPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - SentryFlutterPlugin.register(with: registry.registrar(forPlugin: "SentryFlutterPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 2dd6f1573..b012596f0 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - device_info_plus (0.0.1): + - FlutterMacOS - dynamic_color (0.0.2): - FlutterMacOS - FlutterMacOS (1.0.0) @@ -10,13 +12,6 @@ PODS: - path_provider_foundation (0.0.1): - Flutter - FlutterMacOS - - Sentry/HybridSDK (8.7.3): - - SentryPrivate (= 8.7.3) - - sentry_flutter (0.0.1): - - Flutter - - FlutterMacOS - - Sentry/HybridSDK (= 8.7.3) - - SentryPrivate (8.7.3) - share_plus (0.0.1): - FlutterMacOS - shared_preferences_foundation (0.0.1): @@ -29,11 +24,11 @@ PODS: - FlutterMacOS DEPENDENCIES: + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`) - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) - - sentry_flutter (from `Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos`) - share_plus (from `Flutter/ephemeral/.symlinks/plugins/share_plus/macos`) - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`) @@ -42,10 +37,10 @@ DEPENDENCIES: SPEC REPOS: trunk: - FMDB - - Sentry - - SentryPrivate EXTERNAL SOURCES: + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos dynamic_color: :path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos FlutterMacOS: @@ -54,8 +49,6 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos path_provider_foundation: :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin - sentry_flutter: - :path: Flutter/ephemeral/.symlinks/plugins/sentry_flutter/macos share_plus: :path: Flutter/ephemeral/.symlinks/plugins/share_plus/macos shared_preferences_foundation: @@ -66,14 +59,12 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos SPEC CHECKSUMS: + device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a package_info_plus: 02d7a575e80f194102bef286361c6c326e4c29ce path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8 - Sentry: c7a86f43510a7d5678d4de28d78c28ab351d295b - sentry_flutter: f2710a4f537e9a7143b02562b8754ccdc8224751 - SentryPrivate: 2eaabf598a46d4b9b8822aef766df2a84caf2e6f share_plus: 76dd39142738f7a68dd57b05093b5e8193f220f7 shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c sqflite: a5789cceda41d54d23f31d6de539d65bb14100ea diff --git a/pubspec.lock b/pubspec.lock index d606eaf2c..0f648feec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -739,22 +739,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.27.7" - sentry: - dependency: transitive - description: - name: sentry - sha256: "0316390446c6497664379b3d72d1bc1b6e4c5385cf6c1f6a02c5ab5a3ce179ce" - url: "https://pub.dev" - source: hosted - version: "7.7.0" - sentry_flutter: - dependency: "direct main" - description: - name: sentry_flutter - sha256: cca6f3bcfa00d327d85424a42e4cc3b3abe25e6a2d68c4ff64b0e2a606684666 - url: "https://pub.dev" - source: hosted - version: "7.7.0" share_plus: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 6e4fc2add..12c22e088 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,7 +53,6 @@ dependencies: yaml: ^3.1.2 exif: ^3.1.4 image: ^4.0.17 - sentry_flutter: ^7.7.0 uuid: ^3.0.7 overlay_support: ^2.1.0 package_info_plus: ^4.0.2 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index d1b636dcc..e16dba3f6 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -17,8 +16,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("DynamicColorPluginCApi")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); - SentryFlutterPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SentryFlutterPlugin")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 650e78995..0a4391024 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -5,7 +5,6 @@ list(APPEND FLUTTER_PLUGIN_LIST dynamic_color permission_handler_windows - sentry_flutter share_plus url_launcher_windows )