Skip to content

[shared_preferences_foundation] Fix web compilation of apps that import the package - #13447

Merged
auto-submit[bot] merged 2 commits into
flutter:mainfrom
tarrinneal:shared-preferences-foundation-web-fix
Oct 27, 2026
Merged

auto-submit[bot] merged 2 commits into
flutter:mainfrom
tarrinneal:shared-preferences-foundation-web-fix

Conversation

@tarrinneal

Copy link
Copy Markdown
Contributor

Since 2.6.0 (#12329), package:shared_preferences_foundation/shared_preferences_foundation.dart transitively imports dart:ffi and package:objective_c, causing multi-platform apps that import it (for example to use SharedPreferencesAsyncFoundationOptions) to fail compilation on web. This currently breaks shared_preferences/example web drive tests in CI.

Following the same approach as shared_preferences_android in #13380, this conditionally exports a stub of the plugin classes when dart.library.ffi is unavailable and moves SharedPreferencesAsyncFoundationOptions into its own FFI-free file.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors the package to support compilation on platforms without FFI, such as the web, by introducing conditional exports and stub implementations. The options class is moved to a separate file, and stub classes are exported when FFI is unavailable. Feedback points out that instantiating the options class on the web will cause a runtime crash due to the unguarded use of Platform.isIOS, and suggests guarding it with !kIsWeb.

@tarrinneal
tarrinneal force-pushed the shared-preferences-foundation-web-fix branch from e38c3c6 to bdc680d Compare October 27, 2026 01:55
@tarrinneal tarrinneal added the emergency Override tree-status signal (land even with closed tree), combine with the autosubmit label. label Oct 27, 2026
@flutter-dashboard

Copy link
Copy Markdown

Detected the emergency label.

If you add the autosubmit label, the bot will wait until all presubmits pass but ignore the tree status, allowing fixes for tree breakages while still validating that they don't break any existing presubmits.

The "Merge" button is also unlocked. To bypass presubmits as well as the tree status, press the GitHub "Add to Merge Queue".

@tarrinneal tarrinneal added autosubmit Merge PR when tree becomes green via auto submit App and removed autosubmit Merge PR when tree becomes green via auto submit App labels Oct 27, 2026

@cbracken cbracken left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM stamp from a Japanese personal seal

@tarrinneal tarrinneal added autosubmit Merge PR when tree becomes green via auto submit App and removed autosubmit Merge PR when tree becomes green via auto submit App labels Oct 27, 2026
@auto-submit
auto-submit Bot merged commit d9db25a into flutter:main Oct 27, 2026
12 of 13 checks passed
GhagSagar23 pushed a commit to Kryonex-Labs/flutter that referenced this pull request Oct 27, 2026
flutter/packages@23a05b6...a8549ae

2026-10-27 [email protected] [material_ui]
Deprecate the black/white parameters in `Typography.material2021`
(flutter/packages#13443)
2026-10-27 [email protected] [shared_preferences] Defer
SharedPreferences fetch in `LegacySharedPreferencesPlugin` until first
use on Android (flutter/packages#13431)
2026-10-27 [email protected] [material_ui] Fix MenuAnchor
non-Unicode shortcut labels on JS web (flutter/packages#13370)
2026-10-27 [email protected] [material_ui]
Add Checkbox.markInsets (flutter/packages#12690)
2026-10-27 [email protected]
[vector_graphics_compiler] Handle coordinate lists on text and tspan
(flutter/packages#13287)
2026-10-27 [email protected]
[cupertino_ui] Unskip web tests that pass on CanvasKit and Skwasm:
nav_bar_transition_test, refresh_test, route_test,
text_field_cursor_test (flutter/packages#13439)
2026-10-27 [email protected] [material_ui] Fix
`TextTheme` and `Typography` `debugFillProperties` defaults
(flutter/packages#13374)
2026-10-27 [email protected] [material_ui]
Update out-of-date typography documentation (flutter/packages#13372)
2026-10-27 [email protected] [shared_preferences_foundation] Fix web
compilation of apps that import the package (flutter/packages#13447)
2026-10-26 [email protected] Fix AI guidelines link in PR template
(flutter/packages#13411)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
suryaKommana2662 pushed a commit to suryaKommana2662/flutter that referenced this pull request Oct 29, 2026
flutter/packages@23a05b6...a8549ae

2026-10-27 [email protected] [material_ui]
Deprecate the black/white parameters in `Typography.material2021`
(flutter/packages#13443)
2026-10-27 [email protected] [shared_preferences] Defer
SharedPreferences fetch in `LegacySharedPreferencesPlugin` until first
use on Android (flutter/packages#13431)
2026-10-27 [email protected] [material_ui] Fix MenuAnchor
non-Unicode shortcut labels on JS web (flutter/packages#13370)
2026-10-27 [email protected] [material_ui]
Add Checkbox.markInsets (flutter/packages#12690)
2026-10-27 [email protected]
[vector_graphics_compiler] Handle coordinate lists on text and tspan
(flutter/packages#13287)
2026-10-27 [email protected]
[cupertino_ui] Unskip web tests that pass on CanvasKit and Skwasm:
nav_bar_transition_test, refresh_test, route_test,
text_field_cursor_test (flutter/packages#13439)
2026-10-27 [email protected] [material_ui] Fix
`TextTheme` and `Typography` `debugFillProperties` defaults
(flutter/packages#13374)
2026-10-27 [email protected] [material_ui]
Update out-of-date typography documentation (flutter/packages#13372)
2026-10-27 [email protected] [shared_preferences_foundation] Fix web
compilation of apps that import the package (flutter/packages#13447)
2026-10-26 [email protected] Fix AI guidelines link in PR template
(flutter/packages#13411)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App CICD Run CI/CD emergency Override tree-status signal (land even with closed tree), combine with the autosubmit label. p: shared_preferences platform-ios platform-macos

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants