From 88727adb7a747efd8f3c5fa68a947c10af27f1f2 Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Thu, 22 Oct 2026 18:06:31 +0200 Subject: [PATCH 1/3] feat(ui): add a next action to poll options and skip confirming empty ones The poll creator's option fields now show a next action on the keyboard. It moves to the next option, or from the last one adds a new option, or closes the keyboard when no option can be added. Removing an empty option no longer asks for confirmation, and focus moves to the previous option so the keyboard stays up. Co-Authored-By: Claude Opus 5.5 (1M context) --- packages/stream_chat_flutter/CHANGELOG.md | 8 ++ .../poll_option_reorderable_list_view.dart | 38 +++++- ...oll_option_reorderable_list_view_test.dart | 125 ++++++++++++++++++ 3 files changed, 169 insertions(+), 2 deletions(-) diff --git a/packages/stream_chat_flutter/CHANGELOG.md b/packages/stream_chat_flutter/CHANGELOG.md index 6b510e0155..25985151f9 100644 --- a/packages/stream_chat_flutter/CHANGELOG.md +++ b/packages/stream_chat_flutter/CHANGELOG.md @@ -1,5 +1,13 @@ ## Upcoming +✅ Added + +- Added a next action to the poll creator's option fields, which moves to the next option or adds a new one from the last. + +🔄 Changed + +- Removing an empty poll option no longer asks for confirmation. + 🐞 Fixed - Fixed a voice recording sent as a reply without text showing inside a filled container instead of directly on the message bubble. diff --git a/packages/stream_chat_flutter/lib/src/poll/creator/poll_option_reorderable_list_view.dart b/packages/stream_chat_flutter/lib/src/poll/creator/poll_option_reorderable_list_view.dart index 4d3d0da9c1..3ceaabb58c 100644 --- a/packages/stream_chat_flutter/lib/src/poll/creator/poll_option_reorderable_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/poll/creator/poll_option_reorderable_list_view.dart @@ -62,6 +62,7 @@ class PollOptionListItem extends StatelessWidget { this.showControls = true, this.onRemove, this.onChanged, + this.onSubmitted, }) : onAddOptionPressed = null, _variant = .option; @@ -75,6 +76,7 @@ class PollOptionListItem extends StatelessWidget { showControls = false, onRemove = null, onChanged = null, + onSubmitted = null, onAddOptionPressed = onPressed, _variant = .addOption; @@ -100,6 +102,9 @@ class PollOptionListItem extends StatelessWidget { /// Callback called when the poll option item is changed. final ValueSetter? onChanged; + /// Callback called when this option is submitted from the keyboard. + final ValueSetter? onSubmitted; + /// Callback called when the "add an option" button is pressed. /// /// If `null`, the button is disabled. @@ -125,6 +130,11 @@ class PollOptionListItem extends StatelessWidget { hintText: hintText, focusNode: focusNode, textCapitalization: TextCapitalization.sentences, + textInputAction: TextInputAction.next, + onEditingComplete: switch (onSubmitted) { + final onSubmitted? => () => onSubmitted.call(option!), + _ => null, + }, helperText: option!.error, helperState: option!.error != null ? StreamHelperState.error : null, leading: showControls @@ -374,8 +384,19 @@ class _PollOptionReorderableListViewState extends State _onOptionRemoved(PollOptionItem option) async { - final confirm = await showPollDeleteOptionDialog(context: context); - if (!mounted || confirm != true) return; + final wasFocused = _focusNodes[option.id]?.hasFocus ?? false; + if (option.text.isNotEmpty) { + final confirm = await showPollDeleteOptionDialog(context: context); + if (!mounted || confirm != true) return; + } + + // Keeps the keyboard up when the focused option is removed. + if (wasFocused) { + final ids = [..._options.keys]; + final index = ids.indexOf(option.id); + final neighbor = index > 0 ? ids[index - 1] : ids.elementAtOrNull(index + 1); + if (neighbor != null) _focusNodes[neighbor]?.requestFocus(); + } setState(() { _options.remove(option.id); @@ -450,6 +471,18 @@ class _PollOptionReorderableListViewState extends State it.text.isEmpty); @@ -504,6 +537,7 @@ class _PollOptionReorderableListViewState extends State 1, onRemove: _onOptionRemoved, onChanged: _onOptionChanged, + onSubmitted: _onOptionSubmitted, ); }, ), diff --git a/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart b/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart index 92d8703990..7df2a810ea 100644 --- a/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart +++ b/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart @@ -590,6 +590,131 @@ void main() { expect(field.focusNode?.hasFocus, isTrue); }); + group('when the removed option is empty', () { + testWidgets('removes it without asking for confirmation', (tester) async { + var optionsChanged = []; + + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + initialOptions: [ + PollOptionItem(text: 'Option 1'), + PollOptionItem(), + ], + onOptionsChanged: (options) => optionsChanged = options, + ), + ), + ); + + await tester.tap(find.byIcon(StreamIconData.minusCircle).last); + await tester.pumpAndSettle(); + + expect(find.text('Delete Option'), findsNothing); + expect(optionsChanged.map((it) => it.text), ['Option 1']); + }); + + testWidgets('moves focus to the previous option when it was focused', (tester) async { + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + initialOptions: [ + PollOptionItem(text: 'Option 1'), + PollOptionItem(), + ], + ), + ), + ); + + await tester.showKeyboard(find.byType(TextField).last); + await tester.tap(find.byIcon(StreamIconData.minusCircle).last); + await tester.pumpAndSettle(); + tester.testTextInput.enterText('Option 1 edited'); + await tester.pump(); + + expect(find.text('Option 1 edited'), findsOneWidget); + }); + }); + + testWidgets('keeps typing in the previous option after removing a focused option with text', (tester) async { + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + initialOptions: [ + PollOptionItem(text: 'Option 1'), + PollOptionItem(text: 'Option 2'), + PollOptionItem(text: 'Option 3'), + ], + ), + ), + ); + + await tester.showKeyboard(find.byType(TextField).last); + await _removeOption(tester, find.byIcon(StreamIconData.minusCircle).last); + tester.testTextInput.enterText('Option 2 edited'); + await tester.pump(); + + expect(find.text('Option 2 edited'), findsOneWidget); + }); + + testWidgets('moves focus to the next option on the keyboard next action', (tester) async { + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + initialOptions: [ + PollOptionItem(text: 'Option 1'), + PollOptionItem(text: 'Option 2'), + ], + ), + ), + ); + + await tester.showKeyboard(find.byType(TextField).first); + await tester.testTextInput.receiveAction(TextInputAction.next); + await tester.pumpAndSettle(); + + final fields = tester.widgetList(find.byType(TextField)); + expect(fields.last.focusNode?.hasFocus, isTrue); + }); + + testWidgets('adds and focuses a new option on the keyboard next action from the last one', (tester) async { + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + initialOptions: [PollOptionItem(text: 'Option 1')], + ), + ), + ); + + await tester.showKeyboard(find.byType(TextField)); + await tester.testTextInput.receiveAction(TextInputAction.next); + await tester.pumpAndSettle(); + + final fields = tester.widgetList(find.byType(TextField)); + expect(fields, hasLength(2)); + expect(fields.last.focusNode?.hasFocus, isTrue); + }); + + testWidgets('closes the keyboard on the next action when no option can be added', (tester) async { + await tester.pumpWidget( + _wrapWithMaterialApp( + PollOptionReorderableListView( + optionsRange: (min: null, max: 2), + initialOptions: [ + PollOptionItem(text: 'Option 1'), + PollOptionItem(text: 'Option 2'), + ], + ), + ), + ); + + await tester.showKeyboard(find.byType(TextField).last); + await tester.testTextInput.receiveAction(TextInputAction.next); + await tester.pumpAndSettle(); + + final fields = tester.widgetList(find.byType(TextField)); + expect(fields.any((it) => it.focusNode?.hasFocus ?? false), isFalse); + }); + group('Semantics / reorder', () { const moveToStart = CustomSemanticsAction(label: 'Move to the start'); const moveToEnd = CustomSemanticsAction(label: 'Move to the end'); From 3408901924ae4d5e4f1bfe21373d520ef58057bc Mon Sep 17 00:00:00 2001 From: xsahil03x <25670178+xsahil03x@users.noreply.github.com> Date: Thu, 22 Oct 2026 16:36:59 +0000 Subject: [PATCH 2/3] chore: Update Goldens --- .../ci/stream_poll_creator_sheet_dark.png | Bin 16429 -> 16412 bytes .../ci/stream_poll_creator_sheet_light.png | Bin 15767 -> 15750 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/packages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_sheet_dark.png b/packages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_sheet_dark.png index 962e1b3358fc5df2ee18e62191b8271a0899b61c..dc4c9b467a92edf684bdbe7fdf1fb577d5ef828f 100644 GIT binary patch delta 10334 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 HuiyJ$-Hm{( delta 9648 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 J!gDw7|1WXt+Fk$v diff --git a/packages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_sheet_light.png b/packages/stream_chat_flutter/test/src/poll/creator/goldens/ci/stream_poll_creator_sheet_light.png index 89609f98b0cd2d0f672839d4d58b178b65a5f0f5..bc9b4dc26d49ba86d6023898f201f42e54740a97 100644 GIT binary patch delta 4508 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 E106r0X#fBK delta 4423 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 GO#BZg_nR>Q From d74192e0ffcedac355dd2d86c12145e09e16656b Mon Sep 17 00:00:00 2001 From: Sahil Kumar Date: Fri, 23 Oct 2026 15:21:03 +0200 Subject: [PATCH 3/3] test(ui): check focus lands on the previous option after a removal The test typed into whichever option was focused, so it also passed if focus went to the first option instead. It now checks the first option is left unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../src/poll/creator/poll_option_reorderable_list_view_test.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart b/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart index 7df2a810ea..3cbc078c87 100644 --- a/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart +++ b/packages/stream_chat_flutter/test/src/poll/creator/poll_option_reorderable_list_view_test.dart @@ -653,6 +653,7 @@ void main() { tester.testTextInput.enterText('Option 2 edited'); await tester.pump(); + expect(find.text('Option 1'), findsOneWidget); expect(find.text('Option 2 edited'), findsOneWidget); });