Skip to content

fix: resolve non-constant IconData preventing icon font tree-shaking#427

Merged
thelukewalton merged 2 commits into
ZebraDevs:mainfrom
ps9310:fix/icon-tree-shaking-v2
Apr 7, 2026
Merged

fix: resolve non-constant IconData preventing icon font tree-shaking#427
thelukewalton merged 2 commits into
ZebraDevs:mainfrom
ps9310:fix/icon-tree-shaking-v2

Conversation

@ps9310
Copy link
Copy Markdown
Contributor

@ps9310 ps9310 commented Mar 27, 2026

Summary

  • Replace _copyWith() in IconExtensions.apply() with a lookup into const iconsRound/iconsSharp maps, eliminating non-constant IconData construction that broke --tree-shake-icons
  • Add iconsRound and iconsSharp codePoint lookup maps to zeta_icons (will be auto-generated by the zeta-icons template going forward)
  • Replace non-constant IconData in example app with ZetaIcon widget
  • Bump zeta_icons 1.9.2 → 1.9.3, zeta_flutter 1.4.4 → 1.4.5

Fixes the Flutter web release build error:

This application cannot tree shake icons fonts. It has non-constant instances of IconData

Depends on

Test plan

  • All 12 icon tests pass
  • flutter build web --release --tree-shake-icons succeeds
  • Icon fonts are tree-shaken (MaterialIcons 99.4%, zeta-icons-sharp 18.7%, zeta-icons-round 14.9%)
  • flutter analyze passes with no issues

@ps9310 ps9310 requested a review from a team as a code owner March 27, 2026 11:00
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 7, 2026

PR Checks complete

  • ✅ - Linting / Formatting
  • ✅ - Static analysis passed
  • ✅ - All tests passed
  • ✅ - Branch is not behind
  • 📈 - Code coverage: 50.9%
    See details
    File Name%Passing?
    packages/zeta_flutter/lib/src/components/accordion/accordion.dart82.2%
    packages/zeta_flutter/lib/src/components/accordion/accordion_item.dart6.5%⛔️
    packages/zeta_flutter/lib/src/components/accordion/accordion_item_ui.dart88%
    packages/zeta_flutter/lib/src/components/avatar_rail/avatar_rail.dart53.7%⛔️
    packages/zeta_flutter/lib/src/components/avatars/avatar.dart93.1%
    packages/zeta_flutter/lib/src/components/badges/indicator.dart97%
    packages/zeta_flutter/lib/src/components/badges/label.dart100%
    packages/zeta_flutter/lib/src/components/badges/priority_pill.dart96.8%
    packages/zeta_flutter/lib/src/components/badges/status_label.dart100%
    packages/zeta_flutter/lib/src/components/badges/tag.dart95.7%
    packages/zeta_flutter/lib/src/components/bottom sheets/bottom_sheet.dart0%⛔️
    packages/zeta_flutter/lib/src/components/bottom sheets/menu_items.dart0%⛔️
    packages/zeta_flutter/lib/src/components/breadcrumb/breadcrumb.dart86.3%
    packages/zeta_flutter/lib/src/components/button_group/button_group.dart0%⛔️
    packages/zeta_flutter/lib/src/components/buttons/button.dart94.4%
    packages/zeta_flutter/lib/src/components/buttons/button_style.dart97%
    packages/zeta_flutter/lib/src/components/buttons/icon_button.dart66%⛔️
    packages/zeta_flutter/lib/src/components/buttons/input_icon_button.dart72.7%⛔️
    packages/zeta_flutter/lib/src/components/buttons/tile_button.dart69%⛔️
    packages/zeta_flutter/lib/src/components/card/card_container.dart87.7%
    packages/zeta_flutter/lib/src/components/chat_item/chat_item.dart98.2%
    packages/zeta_flutter/lib/src/components/chat_item/contact_item.dart0%⛔️
    packages/zeta_flutter/lib/src/components/checkbox/checkbox.dart99%
    packages/zeta_flutter/lib/src/components/chips/assist_chip.dart0%⛔️
    packages/zeta_flutter/lib/src/components/chips/chip.dart81.7%
    packages/zeta_flutter/lib/src/components/chips/filter_chip.dart0%⛔️
    packages/zeta_flutter/lib/src/components/chips/input_chip.dart0%⛔️
    packages/zeta_flutter/lib/src/components/chips/status_chip.dart90.9%
    packages/zeta_flutter/lib/src/components/comms_button/comms_button.dart82%
    packages/zeta_flutter/lib/src/components/date_input/date_input.dart0%⛔️
    packages/zeta_flutter/lib/src/components/dial_pad/dial_pad.dart100%
    packages/zeta_flutter/lib/src/components/dialog/dialog.dart0%⛔️
    packages/zeta_flutter/lib/src/components/dropdown/dropdown.dart35.8%⛔️
    packages/zeta_flutter/lib/src/components/empty_state/empty_state.dart100%
    packages/zeta_flutter/lib/src/components/fabs/fab.dart100%
    packages/zeta_flutter/lib/src/components/filter_selection/filter_selection.dart0%⛔️
    packages/zeta_flutter/lib/src/components/global_header/global_header.dart85.1%
    packages/zeta_flutter/lib/src/components/global_header/header_tab_item.dart0%⛔️
    packages/zeta_flutter/lib/src/components/icon/icon.dart100%
    packages/zeta_flutter/lib/src/components/in_page_banner/in_page_banner.dart98.6%
    packages/zeta_flutter/lib/src/components/list_item/dropdown_list_item.dart0%⛔️
    packages/zeta_flutter/lib/src/components/list_item/list_item.dart0%⛔️
    packages/zeta_flutter/lib/src/components/list_item/list_scope.dart0%⛔️
    packages/zeta_flutter/lib/src/components/list_item/notification_list_item.dart0%⛔️
    packages/zeta_flutter/lib/src/components/navigation bar/navigation_bar.dart92.7%
    packages/zeta_flutter/lib/src/components/navigation_rail/navigation_rail.dart0%⛔️
    packages/zeta_flutter/lib/src/components/pagination/pagination.dart0.6%⛔️
    packages/zeta_flutter/lib/src/components/password/password_input.dart100%
    packages/zeta_flutter/lib/src/components/phone_input/phone_input.dart0%⛔️
    packages/zeta_flutter/lib/src/components/progress/progress.dart0%⛔️
    packages/zeta_flutter/lib/src/components/progress/progress_bar.dart0%⛔️
    packages/zeta_flutter/lib/src/components/progress/progress_circle.dart0%⛔️
    packages/zeta_flutter/lib/src/components/radio/radio.dart0%⛔️
    packages/zeta_flutter/lib/src/components/range_selector/range_selector.dart84.5%
    packages/zeta_flutter/lib/src/components/screen_header_bar/screen_header_bar.dart0%⛔️
    packages/zeta_flutter/lib/src/components/search_bar/search_bar.dart96.1%
    packages/zeta_flutter/lib/src/components/segmented_control/segmented_control.dart0%⛔️
    packages/zeta_flutter/lib/src/components/select_input/select_input.dart0%⛔️
    packages/zeta_flutter/lib/src/components/slider/slider.dart52.4%⛔️
    packages/zeta_flutter/lib/src/components/snack_bar/snack_bar.dart0%⛔️
    packages/zeta_flutter/lib/src/components/stepper/stepper.dart94.6%
    packages/zeta_flutter/lib/src/components/stepper_input/stepper_input.dart71.9%⛔️
    packages/zeta_flutter/lib/src/components/switch/material_switch.dart0%⛔️
    packages/zeta_flutter/lib/src/components/switch/zeta_switch.dart0%⛔️
    packages/zeta_flutter/lib/src/components/system_banner/system_banner.dart85.4%
    packages/zeta_flutter/lib/src/components/tabs/tab.dart0%⛔️
    packages/zeta_flutter/lib/src/components/tabs/tab_bar.dart0%⛔️
    packages/zeta_flutter/lib/src/components/text_input/hint_text.dart75.9%⛔️
    packages/zeta_flutter/lib/src/components/text_input/input_label.dart0%⛔️
    packages/zeta_flutter/lib/src/components/text_input/internal_text_input.dart73.2%⛔️
    packages/zeta_flutter/lib/src/components/text_input/text_input.dart0%⛔️
    packages/zeta_flutter/lib/src/components/time_input/time_input.dart0%⛔️
    packages/zeta_flutter/lib/src/components/tooltip/tooltip.dart98.9%
    packages/zeta_flutter/lib/src/components/top_app_bar/extended_top_app_bar.dart93.9%
    packages/zeta_flutter/lib/src/components/top_app_bar/search_top_app_bar.dart86.6%
    packages/zeta_flutter/lib/src/components/top_app_bar/top_app_bar.dart98.1%
    packages/zeta_flutter/lib/src/components/voice_memo/state/playback_state.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/state/recording_state.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/state/wav_amplitude_decoder.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/state/wav_header.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/ui/audio_visualizer.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/ui/play_button.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/ui/recording_control.dart2.8%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/ui/voice_memo.dart0%⛔️
    packages/zeta_flutter/lib/src/components/voice_memo/ui/waveform.dart0%⛔️
    packages/zeta_flutter/lib/src/interfaces/audio_decoder.dart0%⛔️
    packages/zeta_flutter/lib/src/interfaces/countries.dart10%⛔️
    packages/zeta_flutter/lib/src/interfaces/form_field.dart81.4%
    packages/zeta_flutter/lib/src/interfaces/phone_number.dart0%⛔️
    packages/zeta_flutter/lib/src/utils/enums.dart100%
    packages/zeta_flutter/lib/src/utils/widget.dart100%
    packages/zeta_flutter_theme/lib/src/breakpoints.dart81.8%
    packages/zeta_flutter_theme/lib/src/color_extensions.dart86.1%
    packages/zeta_flutter_theme/lib/src/color_swatch.dart58.5%⛔️
    packages/zeta_flutter_theme/lib/src/contrast.dart50%⛔️
    packages/zeta_flutter_theme/lib/src/custom_theme.dart55.6%⛔️
    packages/zeta_flutter_theme/lib/src/generated/tokens/primitives.g.dart64.5%⛔️
    packages/zeta_flutter_theme/lib/src/generated/tokens/semantics.g.dart90.5%
    packages/zeta_flutter_theme/lib/src/rounded.dart83.3%
    packages/zeta_flutter_theme/lib/src/theme_service.dart17.9%⛔️
    packages/zeta_flutter_theme/lib/src/tokens.dart100%
    packages/zeta_flutter_theme/lib/src/typography.dart81.9%
    packages/zeta_flutter_theme/lib/src/zeta.dart98%
    packages/zeta_flutter_theme/lib/src/zeta_provider.dart93%
    packages/zeta_flutter_theme/lib/src/zeta_theme_override.dart68.4%⛔️
    packages/zeta_flutter_utils/lib/src/debounce.dart100%
    packages/zeta_flutter_utils/lib/src/extensions.dart79.1%⛔️
    packages/zeta_flutter_utils/lib/src/nothing.dart50%⛔️
    packages/zeta_flutter_utils/lib/src/platform/platform_is.dart0%⛔️
    packages/zeta_flutter_utils/lib/src/platform/universal_platform_vm.dart7.1%⛔️
    packages/zeta_icons/lib/src/illustrations.dart0%⛔️

Created with Flutter code quality action

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 7, 2026

Visit the preview URL for this PR (updated for commit ffa3acc):

https://zeta-flutter-main--pr-427-fix-icon-tree-shaking-v2-681kxe4i.web.app

(expires Tue, 14 Apr 2026 12:34:58 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 5ca681de0a0ad9185b252304c113355d5ee04ca6

@thelukewalton thelukewalton merged commit 3ecabf1 into ZebraDevs:main Apr 7, 2026
2 checks passed
thelukewalton added a commit that referenced this pull request Apr 7, 2026
🤖 I have created a release *beep* *boop*
---


##
[1.4.5](zeta_flutter-v1.4.4...zeta_flutter-v1.4.5)
(2026-04-07)


### 🪲 Bug Fixes

* resolve non-constant IconData preventing icon font tree-shaking
([#427](#427))
([3ecabf1](3ecabf1))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants