[google_fonts] Add WOFF and WOFF2 font format support for web #10703
+204
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Web applications benefit significantly from using WOFF2 font files instead of TTF/OTF. WOFF2 is a compressed format
specifically designed for web delivery, resulting in smaller file sizes and faster load times. This is especially
important for Flutter web apps where every byte counts for initial page load performance.
Size comparison (Roboto Regular):
Currently,
google_fontsonly supports TTF and OTF formats, even on web platforms where WOFF2 would be more efficient.This PR adds support for WOFF2 and WOFF formats on web, allowing developers to bundle more efficient font files for their
web applications.
What
This PR adds support for
.woff2and.wofffont file extensions when running on web platforms, while maintainingbackward compatibility with
.ttfand.otffiles.Changes:
kIsWebcheck to support web-optimized font formats (.woff2,.woff) in addition to.ttfand.otffindFamilyWithVariantAssetPathtestable by adding an optionalisWebparameter (defaults tokIsWeb)@visibleForTestingannotation to enable comprehensive testing without exposing internal APIPlatform behavior:
.woff2,.woff,.ttf,.otf.ttf,.otf(unchanged)Implementation Notes
The implementation maintains the existing behavior where the order of assets in the manifest determines which file type
is chosen when multiple formats are available for the same font. While this feels a bit odd (ideally, there would be a
preference order), this is how the function already works for TTF/OTF. In practice, this is not an issue when only one
file type per font is bundled, which is the common case.
Getting WOFF2 Files
Developers can convert TTF/OTF fonts to WOFF2 using Google's
woff2_compresstool:https://github.com/google/woff2
Example:
Testing
All existing tests pass, plus 20 new tests that verify:
Breaking Changes
None. This is a backward-compatible addition that only expands the supported file formats on web platforms.
EOF
Pre-Review Checklist
[shared_preferences]pubspec.yamlwith an appropriate new version according to the pub versioning philosophy, or I have commented below to indicate which version change exemption this PR falls under1.CHANGELOG.mdto add a description of the change, following repository CHANGELOG style, or I have commented below to indicate which CHANGELOG exemption this PR falls under1.///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the
gemini-code-assistbot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.Footnotes
Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. ↩ ↩2 ↩3