Skip to content

TF-4308 [Part 2] Add create a label button for Choose Label modal#4332

Open
dab246 wants to merge 3 commits intofeatures/tf-4308-add-labels-for-several-messagesfrom
features/tf-4308-add-create-label-for-choose-label-modal
Open

TF-4308 [Part 2] Add create a label button for Choose Label modal#4332
dab246 wants to merge 3 commits intofeatures/tf-4308-add-labels-for-several-messagesfrom
features/tf-4308-add-create-label-for-choose-label-modal

Conversation

@dab246
Copy link
Copy Markdown
Member

@dab246 dab246 commented Feb 12, 2026

Issue

#4308

Resolved

Screen.Recording.2026-02-12.at.14.26.46.mov

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Feb 12, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 8296b19f-19e3-4ef0-a5a1-838e38cc7ec2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch features/tf-4308-add-create-label-for-choose-label-modal

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link
Copy Markdown

This PR has been deployed to https://linagora.github.io/tmail-flutter/4332.

@dab246 dab246 force-pushed the features/tf-4308-add-labels-for-several-messages branch from a70e1ad to 08d2a8c Compare March 30, 2026 09:59
@dab246 dab246 force-pushed the features/tf-4308-add-create-label-for-choose-label-modal branch from 0dbfd85 to 16eba67 Compare March 30, 2026 10:08
Copy link
Copy Markdown
Collaborator

@tddang-linagora tddang-linagora left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Labels created by Create a label button loose their description
Screen.Recording.2026-03-31.at.11.09.40.AM.mov

Comment on lines +161 to +170
Widget _buildCloseButton() {
return Positioned(
top: 0,
right: 0,
child: DefaultCloseButtonWidget(
iconClose: widget.imagePaths.icCloseDialog,
isAlignTopEnd: false,
onTapActionCallback: _onCloseModal,
),
);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DefaultCloseButtonWidget itself returns a PositionedDirectional. Nested positioned widgets is causing this exception when opening choose label modal:

══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
The following assertion was thrown while looking for parent data.:
Incorrect use of ParentDataWidget.
Competing ParentDataWidgets are providing parent data to the same RenderObject:
- Positioned(left: 4.0, top: 4.0), which writes ParentData of type StackParentData, (typically
placed directly inside a Stack widget)
- Positioned(top: 0.0, right: 0.0), which writes ParentData of type StackParentData, (typically
placed directly inside a Stack widget)
A RenderObject can receive parent data from multiple ParentDataWidgets, but the Type of ParentData
must be unique to prevent one overwriting another.
Usually, this indicates that one or more of the offending ParentDataWidgets listed above isn't
placed inside a dedicated compatible ancestor widget that it isn't sharing with another
ParentDataWidget of the same type.
Otherwise, separating aspects of ParentData to prevent conflicts can be done using mixins, mixing
them all in on the full ParentData Object, such as KeepAlive does with KeepAliveParentDataMixin.
The ownership chain for the RenderObject that received the parent data was:
  ClipPath ← Material ← TMailContainerWidget ← TMailButtonWidget ← Positioned ←
PositionedDirectional ← DefaultCloseButtonWidget ← Positioned ← Stack ← Padding ← ⋯

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:3       throw_
errors.dart:266
package:flutter/src/widgets/framework.dart 6575:11                                <fn>
framework.dart:6575
package:flutter/src/widgets/framework.dart 6619:14                                [_debugCheckCompetingAncestors]
framework.dart:6619
package:flutter/src/widgets/framework.dart 6667:7                                 <fn>
framework.dart:6667
package:flutter/src/widgets/framework.dart 6673:14                                [_findAncestorParentDataElements]
framework.dart:6673
package:flutter/src/widgets/framework.dart 6836:9                                 attachRenderObject
framework.dart:6836
package:flutter/src/widgets/framework.dart 6696:5                                 mount
framework.dart:6696
package:flutter/src/widgets/framework.dart 7007:11                                mount
framework.dart:7007
...     Normal element mounting (45 frames)
package:flutter/src/widgets/framework.dart 4539:15                                inflateWidget
framework.dart:4539
package:flutter/src/widgets/framework.dart 7159:36                                inflateWidget
framework.dart:7159
package:flutter/src/widgets/framework.dart 7175:32                                mount
framework.dart:7175
...     Normal element mounting (22 frames)
package:flutter/src/widgets/framework.dart 4539:15                                inflateWidget
framework.dart:4539
package:flutter/src/widgets/framework.dart 4004:18                                updateChild
framework.dart:4004
package:flutter/src/widgets/layout_builder.dart 249:18                            updateChildCallback
layout_builder.dart:249
package:flutter/src/widgets/framework.dart 3046:11                                buildScope
framework.dart:3046
package:flutter/src/widgets/layout_builder.dart 272:5                             [_rebuildWithConstraints]
layout_builder.dart:272
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
operations.dart:117
package:flutter/src/widgets/layout_builder.dart 335:28                            layoutCallback
layout_builder.dart:335
package:flutter/src/rendering/object.dart 4160:33                                 <fn>
object.dart:4160
package:flutter/src/rendering/object.dart 2885:9                                  <fn>
object.dart:2885
package:flutter/src/rendering/object.dart 1209:7                                  [_enableMutationsToDirtySubtrees]
object.dart:1209
package:flutter/src/rendering/object.dart 2884:7                                  invokeLayoutCallback
object.dart:2884
package:flutter/src/rendering/object.dart 4160:5                                  runLayoutCallback
object.dart:4160
package:flutter/src/widgets/layout_builder.dart 449:5                             performLayout
layout_builder.dart:449
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/proxy_box.dart 3857:13                              performLayout
proxy_box.dart:3857
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/rendering/proxy_box.dart 115:10                               <fn>
proxy_box.dart:115
package:flutter/src/rendering/object.dart 2766:7                                  layout
object.dart:2766
package:flutter/src/widgets/overlay.dart 1085:12                                  layoutChild
overlay.dart:1085
package:flutter/src/widgets/overlay.dart 1431:9                                   performLayout
overlay.dart:1431
package:flutter/src/rendering/object.dart 2614:7                                  [_layoutWithoutResize]
object.dart:2614
package:flutter/src/rendering/object.dart 1160:17                                 flushLayout
object.dart:1160
package:flutter/src/rendering/object.dart 1173:14                                 flushLayout
object.dart:1173
package:flutter/src/rendering/binding.dart 629:5                                  drawFrame
binding.dart:629
package:flutter/src/widgets/binding.dart 1242:13                                  drawFrame
binding.dart:1242
package:flutter/src/rendering/binding.dart 495:5                                  [_handlePersistentFrameCallback]
binding.dart:495
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
operations.dart:117
package:flutter/src/scheduler/binding.dart 1438:7                                 [_invokeFrameCallback]
binding.dart:1438
package:flutter/src/scheduler/binding.dart 1351:9                                 handleDrawFrame
binding.dart:1351
package:flutter/src/scheduler/binding.dart 1204:5                                 [_handleDrawFrame]
binding.dart:1204
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
operations.dart:117
lib/_engine/engine/platform_dispatcher.dart 1312:5                                invoke
platform_dispatcher.dart:1312
lib/_engine/engine/platform_dispatcher.dart 255:5                                 invokeOnDrawFrame
platform_dispatcher.dart:255
lib/_engine/engine/frame_service.dart 189:32                                      [_renderFrame]
frame_service.dart:189
lib/_engine/engine/frame_service.dart 101:9                                       <fn>
frame_service.dart:101
dart-sdk/lib/async/zone.dart 1546:13                                              _rootRunUnary
zone.dart:1546
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
operations.dart:117
dart-sdk/lib/async/zone.dart 1429:19                                              runUnary
zone.dart:1429
dart-sdk/lib/async/zone.dart 1350:26                                              <fn>
zone.dart:1350
dart-sdk/lib/_internal/js_dev_runtime/patch/js_allow_interop_patch.dart 224:27    _callDartFunctionFast1
js_allow_interop_patch.dart:224
════════════════════════════════════════════════════════════════════════════════════════════════════

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

@dab246
Copy link
Copy Markdown
Member Author

dab246 commented Mar 31, 2026

  • Labels created by Create a label button loose their description

It's still working fine, please double-check.

Screen.Recording.2026-03-31.at.12.30.28.mov

@dab246 dab246 requested a review from tddang-linagora March 31, 2026 05:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants