Summary
Three port/service rule dialogs render with raw Material AlertDialog + Text()
instead of the UI Kit dialog pattern (showSimpleAppDialog / UI Kit widgets).
This is pre-existing tech debt — surfaced by the pre-PR readiness review on
feat/e2e-usp-transport (the counts of AlertDialog/Text( are identical in
base and head, so that branch did not introduce it).
Files
lib/page/dashboard/views/dialogs/port_forwarding_dialog.dart
lib/page/ipv6_port_service/views/dialogs/ipv6_port_service_rule_dialog.dart
lib/page/port_forwarding/views/dialogs/port_range_forwarding_dialog.dart
All three are StatefulWidget dialogs with their own TextEditingControllers,
FocusNodes, and focus-loss validation.
Why it wasn't fixed in the transport/E2E PR
Converting these to showSimpleAppDialog / UI Kit means restructuring each
StatefulWidget dialog into the UI Kit builder pattern — a sizeable, higher-risk
refactor. Those dialogs were just modified (validation moved to focus-loss +
semanticLabels added for E2E), so stacking a structural rewrite on top would
compound risk. Kept out of that PR deliberately; tracked here for a focused
follow-up.
Scope / acceptance
- Replace
AlertDialog with the UI Kit dialog entry point (showSimpleAppDialog
or equivalent), and raw Text() with AppText, in all three dialogs.
- Preserve behavior: focus-loss validation,
_isFormValid/_hasRequiredInput
submit gating, and the semanticLabels (port-forwarding-* etc.) that E2E
relies on must all still work.
- Keep the golden tests green (regenerate baselines only if the visual change is
intentional).
- Verify the E2E add/edit-rule flows still pass (they locate fields by the inner
hintText node — see the ui_kit AppTextField excludeSemantics follow-up
noted in the E2E repo's docs/test-inventory.md).
Related
- Found during the E2E testing initiative (
feat/e2e-usp-transport).
- See also the ui_kit follow-up:
AppTextField wraps its inner TextField in
Semantics(textField, label) without excludeSemantics, producing two textbox
nodes for a labelled field.
Summary
Three port/service rule dialogs render with raw Material
AlertDialog+Text()instead of the UI Kit dialog pattern (
showSimpleAppDialog/ UI Kit widgets).This is pre-existing tech debt — surfaced by the pre-PR readiness review on
feat/e2e-usp-transport(the counts ofAlertDialog/Text(are identical inbase and head, so that branch did not introduce it).
Files
lib/page/dashboard/views/dialogs/port_forwarding_dialog.dartlib/page/ipv6_port_service/views/dialogs/ipv6_port_service_rule_dialog.dartlib/page/port_forwarding/views/dialogs/port_range_forwarding_dialog.dartAll three are
StatefulWidgetdialogs with their ownTextEditingControllers,FocusNodes, and focus-loss validation.Why it wasn't fixed in the transport/E2E PR
Converting these to
showSimpleAppDialog/ UI Kit means restructuring eachStatefulWidget dialog into the UI Kit builder pattern — a sizeable, higher-risk
refactor. Those dialogs were just modified (validation moved to focus-loss +
semanticLabels added for E2E), so stacking a structural rewrite on top wouldcompound risk. Kept out of that PR deliberately; tracked here for a focused
follow-up.
Scope / acceptance
AlertDialogwith the UI Kit dialog entry point (showSimpleAppDialogor equivalent), and raw
Text()withAppText, in all three dialogs._isFormValid/_hasRequiredInputsubmit gating, and the
semanticLabels (port-forwarding-*etc.) that E2Erelies on must all still work.
intentional).
hintText node — see the ui_kit
AppTextFieldexcludeSemanticsfollow-upnoted in the E2E repo's
docs/test-inventory.md).Related
feat/e2e-usp-transport).AppTextFieldwraps its innerTextFieldinSemantics(textField, label)withoutexcludeSemantics, producing two textboxnodes for a labelled field.