Repository navigation
[shared_preferences] Defer SharedPreferences fetch in LegacySharedPreferencesPlugin until first use on Android - #13431
Conversation
There was a problem hiding this comment.
Code Review
This pull request defers the initialization of SharedPreferences in LegacySharedPreferencesPlugin until its first use to avoid main-thread disk I/O during plugin registration, and adds a corresponding unit test to verify this behavior. Feedback suggests using Kotlin's idiomatic by lazy delegate for thread-safe lazy initialization instead of manual double-checked locking.
bb0e061 to
b9277f6
Compare
getSharedPreferences in LegacySharedPreferencesPlugin until first use on AndroidLegacySharedPreferencesPlugin until first use on Android
fc41867 to
61f8f9e
Compare
61f8f9e to
aaa3561
Compare
aaa3561 to
ed783fd
Compare
|
autosubmit label was removed for flutter/packages/13431, because This PR has not met approval requirements for merging. The PR author is not a member of flutter-hackers and needs 1 more review(s) in order to merge this PR.
|
|
autosubmit label was removed for flutter/packages/13431, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
autosubmit label was removed for flutter/packages/13431, because - The status or check suite Dashboard Checks has failed. Please fix the issues identified (or deflake) before re-applying this label. |
…gacySharedPreferencesPlugin` executing synchronous disk I/O on Android main thread during startup Fixes eager SharedPreferences fetch in `LegacySharedPreferencesPlugin` executing synchronous disk I/O on Android main thread during startup by deferring the fetch until first use. Fixes flutter/flutter#195313
ed783fd to
2574aeb
Compare
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
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
Defers
getSharedPreferencesinLegacySharedPreferencesPluginout ofonAttachedToEngineuntil first use, avoiding synchronous disk I/O on the Android main thread during startup.The following screenshot shows that the time taken for

RegisterFlutterPluginsignificantly decreases with the change, which validates the fix:I also previously implemented this in my app, which was later negated by an upgrade of the shared_preferences packages into g3 and caused cold startup latency regression alerts on my app. Hoping to upstream the fix to get this optimization to all Flutter users.
flutter/flutter#195313 will be fixed by this PR.
Pre-Review Checklist
[shared_preferences]///).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