Skip to content

Commit d81056d

Browse files
eifrueman
andauthored
Update sentry dependency to ^9.0.0 (#367)
* bump * remove deprecated * feat(feedback): enhance Sentry feedback handling with attachment support * revert + fix test * refactor(feedback): remove deprecated method and update feedback handling * feat(feedback): add user feedback context and attachment support in Sentry error handling --------- Co-authored-by: Jonas Uekötter <[email protected]>
1 parent 0c04a1a commit d81056d

File tree

3 files changed

+45
-36
lines changed

3 files changed

+45
-36
lines changed

feedback_sentry/lib/feedback_sentry.dart

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ extension SentryFeedbackX on FeedbackController {
2626
/// This method opens the feedback ui and the users feedback
2727
/// is uploaded to Sentry after the user submitted his feedback.
2828
/// [name] and [email] are optional. They are shown in the Sentry.io ui.s
29-
@Deprecated(
30-
'Sentry marked the underlying APIs for this method as deprecated. '
31-
'Unfortunately, there is no replacement.',
32-
)
3329
void showAndUploadToSentryWithException({
3430
Hub? hub,
3531
String? name,
@@ -59,20 +55,23 @@ OnFeedbackCallback sendToSentry({
5955

6056
return (UserFeedback feedback) async {
6157
await realHub.captureFeedback(
62-
SentryFeedback(
63-
contactEmail: email,
64-
name: name,
65-
message: feedback.text,
66-
unknown: feedback.extra,
67-
),
68-
hint: Hint.withScreenshot(
69-
SentryAttachment.fromUint8List(
70-
feedback.screenshot,
71-
'screenshot.png',
72-
contentType: 'image/png',
58+
SentryFeedback(
59+
contactEmail: email,
60+
name: name,
61+
message: feedback.text,
7362
),
74-
),
75-
);
63+
hint: Hint.withScreenshot(
64+
SentryAttachment.fromUint8List(
65+
feedback.screenshot,
66+
'screenshot.png',
67+
contentType: 'image/png',
68+
),
69+
), withScope: (scope) {
70+
scope.setContexts(
71+
"user_feedback",
72+
feedback.extra,
73+
);
74+
});
7675
};
7776
}
7877

@@ -93,19 +92,22 @@ OnFeedbackCallback sendToSentryWithException({
9392
exception,
9493
stackTrace: stackTrace,
9594
withScope: (scope) {
95+
scope.setContexts(
96+
"user_feedback",
97+
feedback.extra,
98+
);
9699
scope.addAttachment(SentryAttachment.fromUint8List(
97100
feedback.screenshot,
98101
'screenshot.png',
99102
contentType: 'image/png',
100103
));
101104
},
102105
);
103-
// ignore: deprecated_member_use
104-
await realHub.captureUserFeedback(SentryUserFeedback(
105-
eventId: id,
106-
email: email,
106+
await realHub.captureFeedback(SentryFeedback(
107+
associatedEventId: id,
108+
contactEmail: email,
107109
name: name,
108-
comments: feedback.text + '\n${feedback.extra.toString()}',
110+
message: feedback.text,
109111
));
110112
};
111113
}

feedback_sentry/pubspec.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ funding:
99
- https://github.com/sponsors/ueman
1010

1111
environment:
12-
sdk: '>=3.0.0 <4.0.0'
13-
flutter: '>=3.10.0'
12+
sdk: ">=3.5.0 <4.0.0"
13+
flutter: ">=3.24.0"
1414

1515
dependencies:
1616
flutter:
1717
sdk: flutter
1818
feedback: ^3.0.0
19-
sentry: ^8.10.0
19+
sentry: ^9.0.0
2020

2121
dev_dependencies:
2222
flutter_test:
23-
sdk: flutter
23+
sdk: flutter
24+

feedback_sentry/test/feedback_sentry_test.dart

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,28 @@ void main() {
2323

2424
expect(completed, true);
2525

26-
expect(mockHub.capturedMessage, 'foo bar');
27-
28-
expect(mockHub.capturedFeedback?.comments, 'foo bar\n{foo: bar}');
26+
expect(mockHub.capturedFeedback?.message, 'foo bar');
2927
expect(mockHub.capturedFeedback?.name, 'foo');
30-
expect(mockHub.capturedFeedback?.email, 'bar@foo.de');
31-
32-
expect(mockHub.scope.attachments.length, 1);
28+
expect(mockHub.scope.contexts["user_feedback"], {'foo': 'bar'});
29+
expect(mockHub.capturedFeedback?.contactEmail, '[email protected]');
30+
expect(mockHub.captureHint?.screenshot?.filename, "screenshot.png");
3331
});
3432
}
3533

3634
class MockHub implements Hub {
37-
SentryUserFeedback? capturedFeedback;
35+
SentryFeedback? capturedFeedback;
3836
String? capturedMessage;
3937
Scope scope = Scope(SentryOptions());
4038
Completer<bool> completer = Completer<bool>();
39+
Hint? captureHint;
4140

4241
@override
4342
Future<SentryId> captureMessage(
4443
String? message, {
4544
SentryLevel? level,
4645
String? template,
4746
List? params,
48-
hint,
47+
Hint? hint,
4948
ScopeCallback? withScope,
5049
}) async {
5150
capturedMessage = message;
@@ -54,9 +53,16 @@ class MockHub implements Hub {
5453
}
5554

5655
@override
57-
Future<void> captureUserFeedback(SentryUserFeedback userFeedback) async {
58-
capturedFeedback = userFeedback;
56+
Future<SentryId> captureFeedback(
57+
SentryFeedback feedback, {
58+
Hint? hint,
59+
ScopeCallback? withScope,
60+
}) async {
61+
capturedFeedback = feedback;
62+
withScope?.call(scope);
63+
captureHint = hint;
5964
completer.complete(true);
65+
return SentryId.newId();
6066
}
6167

6268
// Used so that unneeded methods, do not need to be overridden.

0 commit comments

Comments
 (0)