Skip to content

[shared_preferences] Fix a late initialized error with the example app #8540

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 27, 2025

Conversation

kenzieschmoll
Copy link
Member

The _counter future was throwing a late initialization error because it was accessed from the FutureBuilder in build() before it was initialized. This adds a completer _preferencesReady that we wait for before trying to build the FutureBuilder for _counter.

@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!).

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@kenzieschmoll
Copy link
Member Author

I wasn't sure if I needed to update the pubspec version because I added a changelog entry. Happy to revert the pubspec change if need be, just let me know.

@tarrinneal
Copy link
Contributor

I'm not 100% sure, but I think this does need a version change. You should check out the changelog style guide. https://github.com/flutter/flutter/blob/master/docs/ecosystem/contributing/README.md#changelog-style

Copy link
Contributor

@tarrinneal tarrinneal left a comment

Choose a reason for hiding this comment

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

Just two little things then it's good to land

@stuartmorgan-g
Copy link
Contributor

From triage: Is fixing the failing unit test on your radar?

@stuartmorgan-g
Copy link
Contributor

From triage: @kenzieschmoll Ping on the status of this PR?

Comment on lines +28 to +31
// Note: this code is duplicated in
// shared_preferences/test/shared_preferences_async_test.dart. Since we cannot
// import the relative path ../../test/shared_preferences_async_test.dart on the
// web platform, we had to copy it here for use in this test library.
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there a way to put this code somewhere that can be imported in both locations that isn't exported to users?

Copy link
Member Author

@kenzieschmoll kenzieschmoll Mar 25, 2025

Choose a reason for hiding this comment

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

Short of creating a shared package for testing utilities (which seems overkill just to share code with the example app test), I'm not sure how else to share this code.

I'm not entirely sure why the relative path can be imported successfully from a test for native platforms but not for the web platform. CC @jakemac53 do you know if this behavior is expected from the test package for this case?

Another option is to add TestOn('vm') here so that this test does not run for the web platform.

Copy link
Contributor

Choose a reason for hiding this comment

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

This is expected yes, the way apps are hosted on the web we have no way to access URIs outside of the package.

The "root" of the server is either the test directory or the package directory (can't remember which), so you can only access things from the current package and then package: URIs (via synthetic /packages/ paths).

Copy link
Contributor

@jakemac53 jakemac53 Mar 25, 2025

Choose a reason for hiding this comment

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

These sorts of relative paths also really shouldn't be used anyways, they can easily be broken (that file could have dependencies you don't have for instance, and pub won't be able to resolve that for you).

The solution is a shared testing package (no need to publish it).

Copy link
Member Author

Choose a reason for hiding this comment

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

@tarrinneal are you okay landing this with a todo to create a shared testing package or do we need to do that as part of this PR?

Copy link
Contributor

Choose a reason for hiding this comment

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

Might as well :)

@tarrinneal tarrinneal added the autosubmit Merge PR when tree becomes green via auto submit App label Mar 25, 2025
@auto-submit auto-submit bot merged commit 064b0b2 into flutter:main Mar 27, 2025
82 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 27, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 27, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 28, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 28, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 28, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 31, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 31, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 1, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 1, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 1, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 1, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 1, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 2, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 2, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 2, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 2, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 2, 2025
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Apr 2, 2025
flutter/packages@125c117...07496eb

2025-04-02 alexander.irion@siemens.com [multicast_dns]
MDnsClient::listen supports onError callback (flutter/packages#8888)
2025-04-02 15619084+vashworth@users.noreply.github.com Upgrade tests to
use Xcode 16 and iOS 18 (flutter/packages#8968)
2025-04-01 engine-flutter-autoroll@skia.org Manual roll Flutter from
1d954f4 to 05b5e79 (225 revisions) (flutter/packages#8960)
2025-04-01 kevmoo@users.noreply.github.com Drop deprecated HTML head
meta tags (flutter/packages#8970)
2025-04-01 stuartmorgan@google.com Adjust PR checklist formatter
discussion (flutter/packages#8924)
2025-04-01 stuartmorgan@google.com Update CODEOWNERS username
(flutter/packages#8933)
2025-04-01 69054810+M97Chahboun@users.noreply.github.com
[flutter_markdown] Added sizedImageBuilder to Markdown widget
(flutter/packages#6739)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip impl copy
of iOS tests (flutter/packages#8975)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip more
hanging iOS tests (flutter/packages#8967)
2025-04-01 stanleycocoa@gmail.com [url_launcher] When not fully loaded,
clicking close causes the callback to not be triggered correctly.
(flutter/packages#8582)
2025-04-01 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 2 (flutter/packages#8892)
2025-03-31 15619084+vashworth@users.noreply.github.com [webview_flutter]
Skip flaky legacy tests on iOS (flutter/packages#8911)
2025-03-31 davidmartos96@gmail.com [camera_android] Don't override
default fps range when not recording (flutter/packages#8891)
2025-03-31 filiph@users.noreply.github.com [google_maps_flutter] Fix
typo and remove duplicitous CHANGELOG entry (flutter/packages#8754)
2025-03-31 kevmoo@users.noreply.github.com [extension_gsi] Support the
latest version of googleapis_auth (flutter/packages#8931)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/test_plugin/android
(flutter/packages#8955)
2025-03-31 linxunfeng@yeah.net [webview_flutter_wkwebview] Fixes crash
when sending undefined message via javascript channel
(flutter/packages#8776)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/alternate_language_test_plugin/android
(flutter/packages#8946)
2025-03-31 10687576+bparrishMines@users.noreply.github.com
[interactive_media_ads] Fixes `AdEventType`s not triggering on iOS in
release mode (flutter/packages#8918)
2025-03-31 stuartmorgan@google.com [google_maps_flutter] Skip test that
hangs iOS CI (flutter/packages#8958)
2025-03-28 engine-flutter-autoroll@skia.org Manual roll Flutter from
b16430b to 1d954f4 (114 revisions) (flutter/packages#8922)
2025-03-28 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 3 (flutter/packages#8912)
2025-03-27 jacksongardner@google.com Use a more deterministic way of
waiting for ad widgets to be ready. (flutter/packages#8920)
2025-03-27 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 1 (flutter/packages#8890)
2025-03-27 tarrinneal@gmail.com [pigeon] correct usage of extended
generics in generator methods (flutter/packages#8910)
2025-03-27 34892635+fa0311@users.noreply.github.com [video_player] Fix
layout issue caused by `Transform.rotate` not affecting space
calculation. (flutter/packages#8685)
2025-03-27 43759233+kenzieschmoll@users.noreply.github.com
[shared_preferences] Fix a late initialized error with the example app
(flutter/packages#8540)
2025-03-26 stuartmorgan@google.com [various] Disable sandbox in Chrome
dart tests (flutter/packages#8909)
2025-03-25 stuartmorgan@google.com [tool] Move changed file detection to
base command class (flutter/packages#8730)
2025-03-25 34327253+lenzpaul@users.noreply.github.com [Camera] Add lens
type information (iOS) (flutter/packages#8723)
2025-03-25 tarrinneal@gmail.com [pigeon] kotlin equality methods
(flutter/packages#8887)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com 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

---------

Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com>
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Apr 3, 2025
flutter/packages@125c117...07496eb

2025-04-02 alexander.irion@siemens.com [multicast_dns]
MDnsClient::listen supports onError callback (flutter/packages#8888)
2025-04-02 15619084+vashworth@users.noreply.github.com Upgrade tests to
use Xcode 16 and iOS 18 (flutter/packages#8968)
2025-04-01 engine-flutter-autoroll@skia.org Manual roll Flutter from
1d954f4 to 05b5e79 (225 revisions) (flutter/packages#8960)
2025-04-01 kevmoo@users.noreply.github.com Drop deprecated HTML head
meta tags (flutter/packages#8970)
2025-04-01 stuartmorgan@google.com Adjust PR checklist formatter
discussion (flutter/packages#8924)
2025-04-01 stuartmorgan@google.com Update CODEOWNERS username
(flutter/packages#8933)
2025-04-01 69054810+M97Chahboun@users.noreply.github.com
[flutter_markdown] Added sizedImageBuilder to Markdown widget
(flutter/packages#6739)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip impl copy
of iOS tests (flutter/packages#8975)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip more
hanging iOS tests (flutter/packages#8967)
2025-04-01 stanleycocoa@gmail.com [url_launcher] When not fully loaded,
clicking close causes the callback to not be triggered correctly.
(flutter/packages#8582)
2025-04-01 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 2 (flutter/packages#8892)
2025-03-31 15619084+vashworth@users.noreply.github.com [webview_flutter]
Skip flaky legacy tests on iOS (flutter/packages#8911)
2025-03-31 davidmartos96@gmail.com [camera_android] Don't override
default fps range when not recording (flutter/packages#8891)
2025-03-31 filiph@users.noreply.github.com [google_maps_flutter] Fix
typo and remove duplicitous CHANGELOG entry (flutter/packages#8754)
2025-03-31 kevmoo@users.noreply.github.com [extension_gsi] Support the
latest version of googleapis_auth (flutter/packages#8931)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/test_plugin/android
(flutter/packages#8955)
2025-03-31 linxunfeng@yeah.net [webview_flutter_wkwebview] Fixes crash
when sending undefined message via javascript channel
(flutter/packages#8776)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/alternate_language_test_plugin/android
(flutter/packages#8946)
2025-03-31 10687576+bparrishMines@users.noreply.github.com
[interactive_media_ads] Fixes `AdEventType`s not triggering on iOS in
release mode (flutter/packages#8918)
2025-03-31 stuartmorgan@google.com [google_maps_flutter] Skip test that
hangs iOS CI (flutter/packages#8958)
2025-03-28 engine-flutter-autoroll@skia.org Manual roll Flutter from
b16430b to 1d954f4 (114 revisions) (flutter/packages#8922)
2025-03-28 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 3 (flutter/packages#8912)
2025-03-27 jacksongardner@google.com Use a more deterministic way of
waiting for ad widgets to be ready. (flutter/packages#8920)
2025-03-27 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 1 (flutter/packages#8890)
2025-03-27 tarrinneal@gmail.com [pigeon] correct usage of extended
generics in generator methods (flutter/packages#8910)
2025-03-27 34892635+fa0311@users.noreply.github.com [video_player] Fix
layout issue caused by `Transform.rotate` not affecting space
calculation. (flutter/packages#8685)
2025-03-27 43759233+kenzieschmoll@users.noreply.github.com
[shared_preferences] Fix a late initialized error with the example app
(flutter/packages#8540)
2025-03-26 stuartmorgan@google.com [various] Disable sandbox in Chrome
dart tests (flutter/packages#8909)
2025-03-25 stuartmorgan@google.com [tool] Move changed file detection to
base command class (flutter/packages#8730)
2025-03-25 34327253+lenzpaul@users.noreply.github.com [Camera] Add lens
type information (iOS) (flutter/packages#8723)
2025-03-25 tarrinneal@gmail.com [pigeon] kotlin equality methods
(flutter/packages#8887)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com 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

---------

Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com>
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Apr 3, 2025
@4rthurmonteiro
Copy link

this pr closes flutter/flutter#164949 ?

androidseb pushed a commit to androidseb/packages that referenced this pull request Jun 8, 2025
flutter#8540)

The `_counter` future was throwing a late initialization error because it was accessed from the `FutureBuilder` in `build()` before it was initialized. This adds a completer `_preferencesReady` that we wait for before trying to build the `FutureBuilder` for `_counter`.
zhangyuang pushed a commit to zhangyuang/flutter-fork that referenced this pull request Jun 9, 2025
…er#166457)

flutter/packages@125c117...07496eb

2025-04-02 alexander.irion@siemens.com [multicast_dns]
MDnsClient::listen supports onError callback (flutter/packages#8888)
2025-04-02 15619084+vashworth@users.noreply.github.com Upgrade tests to
use Xcode 16 and iOS 18 (flutter/packages#8968)
2025-04-01 engine-flutter-autoroll@skia.org Manual roll Flutter from
1d954f4 to 05b5e79 (225 revisions) (flutter/packages#8960)
2025-04-01 kevmoo@users.noreply.github.com Drop deprecated HTML head
meta tags (flutter/packages#8970)
2025-04-01 stuartmorgan@google.com Adjust PR checklist formatter
discussion (flutter/packages#8924)
2025-04-01 stuartmorgan@google.com Update CODEOWNERS username
(flutter/packages#8933)
2025-04-01 69054810+M97Chahboun@users.noreply.github.com
[flutter_markdown] Added sizedImageBuilder to Markdown widget
(flutter/packages#6739)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip impl copy
of iOS tests (flutter/packages#8975)
2025-04-01 stuartmorgan@google.com [google_maps_flutter] Skip more
hanging iOS tests (flutter/packages#8967)
2025-04-01 stanleycocoa@gmail.com [url_launcher] When not fully loaded,
clicking close causes the callback to not be triggered correctly.
(flutter/packages#8582)
2025-04-01 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 2 (flutter/packages#8892)
2025-03-31 15619084+vashworth@users.noreply.github.com [webview_flutter]
Skip flaky legacy tests on iOS (flutter/packages#8911)
2025-03-31 davidmartos96@gmail.com [camera_android] Don't override
default fps range when not recording (flutter/packages#8891)
2025-03-31 filiph@users.noreply.github.com [google_maps_flutter] Fix
typo and remove duplicitous CHANGELOG entry (flutter/packages#8754)
2025-03-31 kevmoo@users.noreply.github.com [extension_gsi] Support the
latest version of googleapis_auth (flutter/packages#8931)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/test_plugin/android
(flutter/packages#8955)
2025-03-31 linxunfeng@yeah.net [webview_flutter_wkwebview] Fixes crash
when sending undefined message via javascript channel
(flutter/packages#8776)
2025-03-31 49699333+dependabot[bot]@users.noreply.github.com
[dependabot]: Bump com.android.tools.build:gradle from 8.0.0 to 8.9.1 in
/packages/pigeon/platform_tests/alternate_language_test_plugin/android
(flutter/packages#8946)
2025-03-31 10687576+bparrishMines@users.noreply.github.com
[interactive_media_ads] Fixes `AdEventType`s not triggering on iOS in
release mode (flutter/packages#8918)
2025-03-31 stuartmorgan@google.com [google_maps_flutter] Skip test that
hangs iOS CI (flutter/packages#8958)
2025-03-28 engine-flutter-autoroll@skia.org Manual roll Flutter from
b16430b to 1d954f4 (114 revisions) (flutter/packages#8922)
2025-03-28 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 3 (flutter/packages#8912)
2025-03-27 jacksongardner@google.com Use a more deterministic way of
waiting for ad widgets to be ready. (flutter/packages#8920)
2025-03-27 robert.odrowaz@leancode.pl [camera_avfoundation] Test utils
and mocks swift migration - part 1 (flutter/packages#8890)
2025-03-27 tarrinneal@gmail.com [pigeon] correct usage of extended
generics in generator methods (flutter/packages#8910)
2025-03-27 34892635+fa0311@users.noreply.github.com [video_player] Fix
layout issue caused by `Transform.rotate` not affecting space
calculation. (flutter/packages#8685)
2025-03-27 43759233+kenzieschmoll@users.noreply.github.com
[shared_preferences] Fix a late initialized error with the example app
(flutter/packages#8540)
2025-03-26 stuartmorgan@google.com [various] Disable sandbox in Chrome
dart tests (flutter/packages#8909)
2025-03-25 stuartmorgan@google.com [tool] Move changed file detection to
base command class (flutter/packages#8730)
2025-03-25 34327253+lenzpaul@users.noreply.github.com [Camera] Add lens
type information (iOS) (flutter/packages#8723)
2025-03-25 tarrinneal@gmail.com [pigeon] kotlin equality methods
(flutter/packages#8887)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC flutter-ecosystem@google.com 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

---------

Co-authored-by: Maurice Parrish <10687576+bparrishMines@users.noreply.github.com>
FMorschel pushed a commit to FMorschel/packages that referenced this pull request Jun 9, 2025
flutter#8540)

The `_counter` future was throwing a late initialization error because it was accessed from the `FutureBuilder` in `build()` before it was initialized. This adds a completer `_preferencesReady` that we wait for before trying to build the `FutureBuilder` for `_counter`.
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 p: shared_preferences
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants