feat: configure sentry; add hasToken extension to context.
This commit is contained in:
@@ -47,3 +47,4 @@ app.*.map.json
|
|||||||
/android/app/release
|
/android/app/release
|
||||||
|
|
||||||
/deb_builder/
|
/deb_builder/
|
||||||
|
*.deb
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
|
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
|
|
||||||
extension ContextExtension on BuildContext {
|
extension ContextExtension on BuildContext {
|
||||||
ThemeData get t => Theme.of(this);
|
ThemeData get t => Theme.of(this);
|
||||||
|
|
||||||
NavigatorState get n => Navigator.of(this);
|
NavigatorState get n => Navigator.of(this);
|
||||||
|
|
||||||
|
bool get hasToken => this.read<ConfigsProvider>().accessToken.notNull;
|
||||||
|
|
||||||
|
bool get watchHasToken => this.watch<ConfigsProvider>().accessToken.notNull;
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -12,6 +12,7 @@ import 'package:dde_gesture_manager/themes/light.dart';
|
|||||||
import 'package:dde_gesture_manager/utils/helper.dart';
|
import 'package:dde_gesture_manager/utils/helper.dart';
|
||||||
import 'package:dde_gesture_manager/utils/init.dart';
|
import 'package:dde_gesture_manager/utils/init.dart';
|
||||||
import 'package:dde_gesture_manager/utils/simple_throttle.dart';
|
import 'package:dde_gesture_manager/utils/simple_throttle.dart';
|
||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
|
||||||
@@ -27,7 +28,9 @@ Future<void> main() async {
|
|||||||
options.dsn = 'https://febbfdeac6874a01b5fee56b2ba9515c@o644838.ingest.sentry.io/6216990';
|
options.dsn = 'https://febbfdeac6874a01b5fee56b2ba9515c@o644838.ingest.sentry.io/6216990';
|
||||||
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
// Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
|
||||||
// We recommend adjusting this value in production.
|
// We recommend adjusting this value in production.
|
||||||
options.tracesSampleRate = 1.0;
|
options.tracesSampleRate = kReleaseMode ? 0.1 : 1.0;
|
||||||
|
options.reportPackages = false;
|
||||||
|
options.maxDeduplicationItems = 3;
|
||||||
},
|
},
|
||||||
appRunner: () => runApp(EasyLocalization(
|
appRunner: () => runApp(EasyLocalization(
|
||||||
supportedLocales: supportedLocales,
|
supportedLocales: supportedLocales,
|
||||||
@@ -82,6 +85,10 @@ class MyApp extends StatelessWidget {
|
|||||||
Future.microtask(() {
|
Future.microtask(() {
|
||||||
initEvents(context);
|
initEvents(context);
|
||||||
SimpleThrottle.throttledFunc(_checkAuthStatus, timeout: const Duration(minutes: 5))?.call(context);
|
SimpleThrottle.throttledFunc(_checkAuthStatus, timeout: const Duration(minutes: 5))?.call(context);
|
||||||
|
SimpleThrottle.throttledFunc(
|
||||||
|
Sentry.captureMessage,
|
||||||
|
timeout: const Duration(days: 1),
|
||||||
|
)?.call('App launched');
|
||||||
});
|
});
|
||||||
return Container();
|
return Container();
|
||||||
}),
|
}),
|
||||||
@@ -97,7 +104,7 @@ class MyApp extends StatelessWidget {
|
|||||||
void _checkAuthStatus(BuildContext context) {
|
void _checkAuthStatus(BuildContext context) {
|
||||||
if (H().lastCheckAuthStatusTime != null &&
|
if (H().lastCheckAuthStatusTime != null &&
|
||||||
H().lastCheckAuthStatusTime!.difference(DateTime.now()) < Duration(minutes: 10)) return;
|
H().lastCheckAuthStatusTime!.difference(DateTime.now()) < Duration(minutes: 10)) return;
|
||||||
if (context.read<ConfigsProvider>().accessToken.notNull) {
|
if (context.hasToken) {
|
||||||
Api.checkAuthStatus().then((value) {
|
Api.checkAuthStatus().then((value) {
|
||||||
if (!value) context.read<ConfigsProvider>().setProps(email: '', accessToken: '');
|
if (!value) context.read<ConfigsProvider>().setProps(email: '', accessToken: '');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart';
|
|||||||
import 'package:dde_gesture_manager/constants/sp_keys.dart';
|
import 'package:dde_gesture_manager/constants/sp_keys.dart';
|
||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/utils/helper.dart';
|
import 'package:dde_gesture_manager/utils/helper.dart';
|
||||||
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
|
|
||||||
enum BrightnessMode {
|
enum BrightnessMode {
|
||||||
system,
|
system,
|
||||||
@@ -45,9 +46,12 @@ class Configs {
|
|||||||
|
|
||||||
set email(String? emailAddress) {
|
set email(String? emailAddress) {
|
||||||
_email = emailAddress;
|
_email = emailAddress;
|
||||||
if (emailAddress.notNull)
|
if (emailAddress.notNull) {
|
||||||
H().sp.updateString(SPKeys.loginEmail, emailAddress!);
|
H().sp.updateString(SPKeys.loginEmail, emailAddress!);
|
||||||
else
|
Sentry.configureScope(
|
||||||
|
(scope) => scope.user = SentryUser(email: emailAddress),
|
||||||
|
);
|
||||||
|
} else
|
||||||
H().sp.remove(SPKeys.loginEmail);
|
H().sp.remove(SPKeys.loginEmail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import 'package:adaptive_scrollbar/adaptive_scrollbar.dart';
|
|||||||
import 'package:dde_gesture_manager/constants/constants.dart';
|
import 'package:dde_gesture_manager/constants/constants.dart';
|
||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/http/api.dart';
|
import 'package:dde_gesture_manager/http/api.dart';
|
||||||
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
|
||||||
import 'package:dde_gesture_manager/models/content_layout.provider.dart';
|
import 'package:dde_gesture_manager/models/content_layout.provider.dart';
|
||||||
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
||||||
import 'package:dde_gesture_manager/models/scheme.dart';
|
import 'package:dde_gesture_manager/models/scheme.dart';
|
||||||
@@ -305,7 +304,7 @@ class GestureEditor extends StatelessWidget {
|
|||||||
Notificator.error(context, title: LocaleKeys.info_upload_pls_add_description.tr());
|
Notificator.error(context, title: LocaleKeys.info_upload_pls_add_description.tr());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (context.read<ConfigsProvider>().accessToken.isNull) {
|
if (!context.hasToken) {
|
||||||
return Notificator.showAlert(
|
return Notificator.showAlert(
|
||||||
title: LocaleKeys.info_login_for_upload_title.tr(),
|
title: LocaleKeys.info_login_for_upload_title.tr(),
|
||||||
description: LocaleKeys.info_login_for_upload_description.tr(),
|
description: LocaleKeys.info_login_for_upload_description.tr(),
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import 'package:dde_gesture_manager/widgets/dde_button.dart';
|
|||||||
import 'package:dde_gesture_manager_api/models.dart' show SchemeForDownload;
|
import 'package:dde_gesture_manager_api/models.dart' show SchemeForDownload;
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
class LocalManager extends StatefulWidget {
|
class LocalManager extends StatefulWidget {
|
||||||
@@ -262,6 +263,7 @@ class LocalManagerState extends State<LocalManager> {
|
|||||||
localSchemes.firstWhere((ele) => ele.path == _selectedItemPath).scheme;
|
localSchemes.firstWhere((ele) => ele.path == _selectedItemPath).scheme;
|
||||||
context.read<ConfigsProvider>().setProps(appliedSchemeId: appliedScheme.id);
|
context.read<ConfigsProvider>().setProps(appliedSchemeId: appliedScheme.id);
|
||||||
SchemeApplyUtil().apply(context, appliedScheme);
|
SchemeApplyUtil().apply(context, appliedScheme);
|
||||||
|
Sentry.captureMessage('Scheme applied: [${appliedScheme.name}](${appliedScheme.id})');
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:dde_gesture_manager/constants/constants.dart';
|
import 'package:dde_gesture_manager/constants/constants.dart';
|
||||||
import 'package:dde_gesture_manager/extensions.dart';
|
import 'package:dde_gesture_manager/extensions.dart';
|
||||||
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
|
||||||
import 'package:dde_gesture_manager/models/content_layout.provider.dart';
|
import 'package:dde_gesture_manager/models/content_layout.provider.dart';
|
||||||
import 'package:dde_gesture_manager/widgets/dde_button.dart';
|
import 'package:dde_gesture_manager/widgets/dde_button.dart';
|
||||||
import 'package:dde_gesture_manager/widgets/login.dart';
|
import 'package:dde_gesture_manager/widgets/login.dart';
|
||||||
@@ -79,11 +78,11 @@ class MarketOrMe extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildMeContent(BuildContext context) {
|
Widget buildMeContent(BuildContext context) => context.watchHasToken
|
||||||
var accessToken = context.watch<ConfigsProvider>().accessToken;
|
? Expanded(
|
||||||
if (accessToken.isNull) return LoginWidget();
|
child: MeWidget(),
|
||||||
return Expanded(child: MeWidget());
|
)
|
||||||
}
|
: LoginWidget();
|
||||||
|
|
||||||
Widget buildMarketContent(BuildContext context) => Expanded(child: MarketWidget());
|
Widget buildMarketContent(BuildContext context) => Expanded(child: MarketWidget());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import 'package:auto_size_text/auto_size_text.dart';
|
|||||||
import 'package:cached_network_image/cached_network_image.dart';
|
import 'package:cached_network_image/cached_network_image.dart';
|
||||||
import 'package:dde_gesture_manager/constants/constants.dart';
|
import 'package:dde_gesture_manager/constants/constants.dart';
|
||||||
import 'package:dde_gesture_manager/http/api.dart';
|
import 'package:dde_gesture_manager/http/api.dart';
|
||||||
import 'package:dde_gesture_manager/models/configs.provider.dart';
|
|
||||||
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
|
||||||
import 'package:dde_gesture_manager/models/settings.provider.dart';
|
import 'package:dde_gesture_manager/models/settings.provider.dart';
|
||||||
import 'package:dde_gesture_manager/utils/helper.dart';
|
import 'package:dde_gesture_manager/utils/helper.dart';
|
||||||
@@ -40,7 +39,7 @@ class _MarketWidgetState extends State<MarketWidget> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
if (context.read<ConfigsProvider>().accessToken.notNull)
|
if (context.hasToken)
|
||||||
Api.userLikes().then((value) {
|
Api.userLikes().then((value) {
|
||||||
if (mounted && value != null)
|
if (mounted && value != null)
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -265,7 +264,7 @@ class _MarketWidgetState extends State<MarketWidget> {
|
|||||||
mainAxisAlignment: MainAxisAlignment.end,
|
mainAxisAlignment: MainAxisAlignment.end,
|
||||||
children: [
|
children: [
|
||||||
DButton.like(
|
DButton.like(
|
||||||
enabled: context.watch<ConfigsProvider>().accessToken.notNull,
|
enabled: context.watchHasToken,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
bool liked = _likedSchemes.contains(currentSelectedScheme!.id!);
|
bool liked = _likedSchemes.contains(currentSelectedScheme!.id!);
|
||||||
Api.likeScheme(schemeId: currentSelectedScheme.uuid!, isLike: !liked).then((value) {
|
Api.likeScheme(schemeId: currentSelectedScheme.uuid!, isLike: !liked).then((value) {
|
||||||
|
|||||||
Reference in New Issue
Block a user