Skip to content

Commit 63b57fe

Browse files
sm-sayedignprice
authored andcommitted
action-sheet: Pass the correct BuildContext for showing SnackBar
Before this, the `SnackBar` wouldn't show as the correct `BuildContext` was not passed to `copyWithPopup` method. Fixes: #732
1 parent e55675e commit 63b57fe

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

lib/widgets/action_sheet.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ class CopyMessageTextButton extends MessageActionSheetMenuItemButton {
361361

362362
if (!messageListContext.mounted) return;
363363

364-
copyWithPopup(context: context,
364+
copyWithPopup(context: messageListContext,
365365
successContent: Text(zulipLocalizations.successMessageTextCopied),
366366
data: ClipboardData(text: rawContent));
367367
}

test/widgets/action_sheet_test.dart

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flutter_test/flutter_test.dart';
88
import 'package:http/http.dart' as http;
99
import 'package:zulip/api/model/model.dart';
1010
import 'package:zulip/api/route/messages.dart';
11+
import 'package:zulip/model/binding.dart';
1112
import 'package:zulip/model/compose.dart';
1213
import 'package:zulip/model/localizations.dart';
1314
import 'package:zulip/model/narrow.dart';
@@ -84,11 +85,12 @@ void main() {
8485
void prepareRawContentResponseSuccess(PerAccountStore store, {
8586
required Message message,
8687
required String rawContent,
88+
Duration delay = Duration.zero,
8789
}) {
8890
// Prepare fetch-raw-Markdown response
8991
// TODO: Message should really only differ from `message`
9092
// in its content / content_type, not in `id` or anything else.
91-
(store.connection as FakeApiConnection).prepare(json:
93+
(store.connection as FakeApiConnection).prepare(delay: delay, json:
9294
GetMessageResult(message: eg.streamMessage(contentMarkdown: rawContent)).toJson());
9395
}
9496

@@ -474,6 +476,33 @@ void main() {
474476
check(await Clipboard.getData('text/plain')).isNotNull().text.equals('Hello world');
475477
});
476478

479+
testWidgets('success with a snackbar', (tester) async {
480+
// for #732 regression check below
481+
testBinding.deviceInfoResult = IosDeviceInfo(systemVersion: '16.0');
482+
483+
final message = eg.streamMessage();
484+
await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message));
485+
final store = await testBinding.globalStore.perAccount(eg.selfAccount.id);
486+
487+
prepareRawContentResponseSuccess(store,
488+
message: message,
489+
rawContent: 'Hello world',
490+
delay: const Duration(milliseconds: 500));
491+
492+
await tapCopyMessageTextButton(tester);
493+
for (int i = 0; i < 5; i++) {
494+
await tester.pump(const Duration(milliseconds: 100));
495+
}
496+
497+
// regression check for #732
498+
final snackbar = tester.widget<SnackBar>(find.byType(SnackBar));
499+
check(snackbar.behavior).equals(SnackBarBehavior.floating);
500+
final zulipLocalizations = GlobalLocalizations.zulipLocalizations;
501+
tester.widget(find.descendant(matchRoot: true,
502+
of: find.byWidget(snackbar.content),
503+
matching: find.text(zulipLocalizations.successMessageTextCopied)));
504+
});
505+
477506
testWidgets('request has an error', (WidgetTester tester) async {
478507
final message = eg.streamMessage();
479508
await setupToMessageActionSheet(tester, message: message, narrow: TopicNarrow.ofMessage(message));

0 commit comments

Comments
 (0)