Skip to content

Commit 6a57c07

Browse files
committed
feat: integrate Sentry for error tracking and performance monitoring
1 parent 2a28e0d commit 6a57c07

7 files changed

Lines changed: 230 additions & 16 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,5 @@ ios/build
5656

5757
# Local debugging artifacts
5858
debugging-files/
59+
60+
sentry.properties

.vscode/mcp.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"servers": {
3+
"Sentry": {
4+
"url": "https://mcp.sentry.dev/mcp/zr-3t/flutter",
5+
"type": "http"
6+
}
7+
}
8+
}

lib/main.dart

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import 'package:kiwi/kiwi.dart';
99
import 'package:flutter/material.dart';
1010

1111
import 'common/util/platform_util.dart';
12+
import 'package:sentry_flutter/sentry_flutter.dart';
1213

1314
final Stopwatch _startupStopwatch = Stopwatch()..start();
1415

1516
///
1617
/// Main entry point for the app
1718
///
18-
void main() {
19+
Future<void> main() async {
1920
// Setup the flutter bindings and the error reporting as early as possible
2021
WidgetsFlutterBinding.ensureInitialized();
2122
PerformanceTelemetry.instance.ensureFrameTimingListenerAttached();
@@ -28,7 +29,24 @@ void main() {
2829
reportException(details.exception, details.stack ?? StackTrace.current);
2930
};
3031

31-
runApp(RootPage(startupStopwatch: _startupStopwatch));
32+
await SentryFlutter.init(
33+
(options) {
34+
options.dsn = 'https://c066b6ee9a0627975699781ebdf378bd@o4511192693014528.ingest.de.sentry.io/4511192695046224';
35+
// Adds request headers and IP for users, for more info visit:
36+
// https://docs.sentry.io/platforms/dart/guides/flutter/data-management/data-collected/
37+
options.sendDefaultPii = true;
38+
options.enableLogs = true;
39+
// Set tracesSampleRate to 1.0 to capture 100% of transactions for tracing.
40+
// We recommend adjusting this value in production.
41+
options.tracesSampleRate = 1.0;
42+
// Configure Session Replay
43+
options.replay.sessionSampleRate = 0.1;
44+
options.replay.onErrorSampleRate = 1.0;
45+
},
46+
appRunner: () => runApp(SentryWidget(child: RootPage(startupStopwatch: _startupStopwatch))),
47+
);
48+
// TODO: Remove this line after sending the first sample event to sentry.
49+
await Sentry.captureException(StateError('This is a sample exception.'));
3250

3351
// Keep startup non-blocking so Android splash is never held by async setup.
3452
unawaited(() async {

opencode.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"$schema": "https://opencode.ai/config.json",
3+
"mcp": {
4+
"Sentry": {
5+
"type": "remote",
6+
"url": "https://mcp.sentry.dev/mcp/zr-3t/flutter",
7+
"oauth": {}
8+
}
9+
}
10+
}

pubspec.lock

Lines changed: 126 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,22 @@ packages:
2525
url: "https://pub.dev"
2626
source: hosted
2727
version: "2.1.1"
28+
ansicolor:
29+
dependency: transitive
30+
description:
31+
name: ansicolor
32+
sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f"
33+
url: "https://pub.dev"
34+
source: hosted
35+
version: "2.0.3"
2836
args:
2937
dependency: transitive
3038
description:
3139
name: args
32-
sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596
40+
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
3341
url: "https://pub.dev"
3442
source: hosted
35-
version: "2.4.2"
43+
version: "2.7.0"
3644
async:
3745
dependency: transitive
3846
description:
@@ -53,10 +61,10 @@ packages:
5361
dependency: transitive
5462
description:
5563
name: characters
56-
sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b
64+
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
5765
url: "https://pub.dev"
5866
source: hosted
59-
version: "1.4.1"
67+
version: "1.4.0"
6068
cli_config:
6169
dependency: transitive
6270
description:
@@ -160,6 +168,14 @@ packages:
160168
url: "https://pub.dev"
161169
source: hosted
162170
version: "6.1.4"
171+
fixnum:
172+
dependency: transitive
173+
description:
174+
name: fixnum
175+
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
176+
url: "https://pub.dev"
177+
source: hosted
178+
version: "1.1.1"
163179
flutter:
164180
dependency: "direct main"
165181
description: flutter
@@ -294,6 +310,14 @@ packages:
294310
url: "https://pub.dev"
295311
source: hosted
296312
version: "2.1.2"
313+
globbing:
314+
dependency: transitive
315+
description:
316+
name: globbing
317+
sha256: "4f89cfaf6fa74c9c1740a96259da06bd45411ede56744e28017cc534a12b6e2d"
318+
url: "https://pub.dev"
319+
source: hosted
320+
version: "1.0.0"
297321
html:
298322
dependency: "direct main"
299323
description:
@@ -350,6 +374,14 @@ packages:
350374
url: "https://pub.dev"
351375
source: hosted
352376
version: "2.0.5"
377+
injector:
378+
dependency: transitive
379+
description:
380+
name: injector
381+
sha256: ed389bed5b48a699d5b9561c985023d0d5cc88dd5ff2237aadcce5a5ab433e4e
382+
url: "https://pub.dev"
383+
source: hosted
384+
version: "3.0.0"
353385
integration_test:
354386
dependency: "direct dev"
355387
description: flutter
@@ -371,6 +403,22 @@ packages:
371403
url: "https://pub.dev"
372404
source: hosted
373405
version: "1.0.4"
406+
jni:
407+
dependency: transitive
408+
description:
409+
name: jni
410+
sha256: d2c361082d554d4593c3012e26f6b188f902acd291330f13d6427641a92b3da1
411+
url: "https://pub.dev"
412+
source: hosted
413+
version: "0.14.2"
414+
js:
415+
dependency: transitive
416+
description:
417+
name: js
418+
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
419+
url: "https://pub.dev"
420+
source: hosted
421+
version: "0.7.2"
374422
kiwi:
375423
dependency: "direct main"
376424
description:
@@ -415,18 +463,18 @@ packages:
415463
dependency: transitive
416464
description:
417465
name: matcher
418-
sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6"
466+
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
419467
url: "https://pub.dev"
420468
source: hosted
421-
version: "0.12.18"
469+
version: "0.12.17"
422470
material_color_utilities:
423471
dependency: transitive
424472
description:
425473
name: material_color_utilities
426-
sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b"
474+
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
427475
url: "https://pub.dev"
428476
source: hosted
429-
version: "0.13.0"
477+
version: "0.11.1"
430478
meta:
431479
dependency: transitive
432480
description:
@@ -475,6 +523,22 @@ packages:
475523
url: "https://pub.dev"
476524
source: hosted
477525
version: "2.1.0"
526+
package_info_plus:
527+
dependency: transitive
528+
description:
529+
name: package_info_plus
530+
sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20"
531+
url: "https://pub.dev"
532+
source: hosted
533+
version: "9.0.1"
534+
package_info_plus_platform_interface:
535+
dependency: transitive
536+
description:
537+
name: package_info_plus_platform_interface
538+
sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086"
539+
url: "https://pub.dev"
540+
source: hosted
541+
version: "3.2.1"
478542
path:
479543
dependency: transitive
480544
description:
@@ -570,6 +634,14 @@ packages:
570634
url: "https://pub.dev"
571635
source: hosted
572636
version: "5.0.5"
637+
properties:
638+
dependency: transitive
639+
description:
640+
name: properties
641+
sha256: "333f427dd4ed07bdbe8c75b9ff864a1e70b5d7a8426a2e8bdd457b65ae5ac598"
642+
url: "https://pub.dev"
643+
source: hosted
644+
version: "2.1.1"
573645
property_change_notifier:
574646
dependency: "direct main"
575647
description:
@@ -594,6 +666,30 @@ packages:
594666
url: "https://pub.dev"
595667
source: hosted
596668
version: "2.1.4"
669+
sentry:
670+
dependency: transitive
671+
description:
672+
name: sentry
673+
sha256: "682360642a7b14b36daef3b5574b7269164e7763512ac92cdafd55b695bd2183"
674+
url: "https://pub.dev"
675+
source: hosted
676+
version: "9.16.1"
677+
sentry_dart_plugin:
678+
dependency: "direct dev"
679+
description:
680+
name: sentry_dart_plugin
681+
sha256: "514cd5cc5c022bed9c232d08dc126a081b8a965dbad78b819ae91bf3a06e622c"
682+
url: "https://pub.dev"
683+
source: hosted
684+
version: "3.2.1"
685+
sentry_flutter:
686+
dependency: "direct main"
687+
description:
688+
name: sentry_flutter
689+
sha256: cf4944d02daa952aeb0e1ab01ddb3db8bfc6b7e16e9811edacf05d9eed276fda
690+
url: "https://pub.dev"
691+
source: hosted
692+
version: "9.16.1"
597693
shared_preferences:
598694
dependency: "direct main"
599695
description:
@@ -799,6 +895,14 @@ packages:
799895
url: "https://pub.dev"
800896
source: hosted
801897
version: "3.1.0"
898+
system_info2:
899+
dependency: transitive
900+
description:
901+
name: system_info2
902+
sha256: b937736ecfa63c45b10dde1ceb6bb30e5c0c340e14c441df024150679d65ac43
903+
url: "https://pub.dev"
904+
source: hosted
905+
version: "4.1.0"
802906
term_glyph:
803907
dependency: transitive
804908
description:
@@ -811,26 +915,26 @@ packages:
811915
dependency: "direct dev"
812916
description:
813917
name: test
814-
sha256: "54c516bbb7cee2754d327ad4fca637f78abfc3cbcc5ace83b3eda117e42cd71a"
918+
sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7"
815919
url: "https://pub.dev"
816920
source: hosted
817-
version: "1.29.0"
921+
version: "1.26.3"
818922
test_api:
819923
dependency: transitive
820924
description:
821925
name: test_api
822-
sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636"
926+
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
823927
url: "https://pub.dev"
824928
source: hosted
825-
version: "0.7.9"
929+
version: "0.7.7"
826930
test_core:
827931
dependency: transitive
828932
description:
829933
name: test_core
830-
sha256: "394f07d21f0f2255ec9e3989f21e54d3c7dc0e6e9dbce160e5a9c1a6be0e2943"
934+
sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0"
831935
url: "https://pub.dev"
832936
source: hosted
833-
version: "0.6.15"
937+
version: "0.6.12"
834938
timezone:
835939
dependency: "direct main"
836940
description:
@@ -911,6 +1015,14 @@ packages:
9111015
url: "https://pub.dev"
9121016
source: hosted
9131017
version: "3.1.0"
1018+
uuid:
1019+
dependency: transitive
1020+
description:
1021+
name: uuid
1022+
sha256: "1fef9e8e11e2991bb773070d4656b7bd5d850967a2456cfc83cf47925ba79489"
1023+
url: "https://pub.dev"
1024+
source: hosted
1025+
version: "4.5.3"
9141026
vector_math:
9151027
dependency: transitive
9161028
description:

pubspec.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ environment:
1818
flutter: ">=3.27.0"
1919

2020
dependencies:
21+
sentry_flutter: ^9.16.1
2122
flutter:
2223
sdk: flutter
2324
flutter_localizations:
@@ -49,6 +50,7 @@ dependencies:
4950
path: third_party/dualmate_widget_bridge
5051

5152
dev_dependencies:
53+
sentry_dart_plugin: ^3.2.1
5254
flutter_test:
5355
sdk: flutter
5456
integration_test:
@@ -89,3 +91,9 @@ flutter:
8991
- family: CustomIcons
9092
fonts:
9193
- asset: fonts/CustomIcons.ttf
94+
95+
sentry:
96+
upload_debug_symbols: true
97+
upload_source_maps: true
98+
project: flutter
99+
org: zr-3t

0 commit comments

Comments
 (0)