Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

[plugin_platform_interface] Don't use const Object as a token #2417

Merged
merged 5 commits into from
Dec 13, 2019

Conversation

amirh
Copy link
Contributor

@amirh amirh commented Dec 13, 2019

Description

Platform interface tokens must be unique, we've mistakenly used const Objects as a token (and all const Objects are identical).

Thanks @buntagonalprism for noticing and investigating!

We should probably follow-up with the PlatformInterface forcing tokens that are not const Objects (though this will be a breaking change).

I'm not sure whether we can test the failing scenario as it will require running tests in release mode.

Related Issues

flutter/flutter#46941

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

  • I read the [Contributor Guide] and followed the process outlined there for submitting PRs.
  • My PR includes unit or integration tests for all changed/updated/fixed behaviors (See [Contributor Guide]).
  • All existing and new tests are passing.
  • I updated/added relevant documentation (doc comments with ///).
  • The analyzer (flutter analyze) does not report any problems on my PR.
  • I read and followed the [Flutter Style Guide].
  • The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
  • I updated pubspec.yaml with an appropriate new version according to the [pub versioning philosophy].
  • I updated CHANGELOG.md to add a description of the change.
  • I signed the [CLA].
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require plugin users to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
  • No, this is not a breaking change.

@@ -1,3 +1,7 @@
## 1.0.5

* Make the PlatformInterface _token non const (as const Object's are not unique).
Copy link
Contributor

Choose a reason for hiding this comment

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

fix formatting

Copy link
Contributor

@harryterkelsen harryterkelsen left a comment

Choose a reason for hiding this comment

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

You can also check and throw an exception if token == const Object() since this could be a common mistake.

@amirh
Copy link
Contributor Author

amirh commented Dec 13, 2019

You can also check and throw an exception if token == const Object() since this could be a common mistake.

Yes, I mentioned this in the PR description, I'll followup in a separate PR as we should make sure existing plugins are already updated (I think it's early enough to assume the currently only first party plugins are using this)

@amirh
Copy link
Contributor Author

amirh commented Dec 13, 2019

Actually this doesn't work as now the token doesn't test equal for the different instances of MockPlatformInterface, fixing...

packages/plugin_platform_interface/CHANGELOG.md Outdated Show resolved Hide resolved
@@ -3,7 +3,7 @@ description: A common platform interface for the url_launcher plugin.
homepage: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_platform_interface
# NOTE: We strongly prefer non-breaking changes, even at the expense of a
# less-clean API. See https://flutter.dev/go/platform-interface-breaking-changes
version: 1.0.4
version: 1.0.5
Copy link
Contributor

Choose a reason for hiding this comment

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

You'll also want to update the dependency on plugin_platform_interface in this file.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point, I'll have to either split this PR into 2, or follow-up with another PR just to bump after publishing the plugin_platform_interface. I'm going with the later as it's the faster path right now.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually ended up splitting the PRs

Copy link
Contributor

@collinjackson collinjackson left a comment

Choose a reason for hiding this comment

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

LGTM once comments are addressed

@amirh amirh merged commit 189fa93 into flutter:master Dec 13, 2019
@amirh amirh deleted the mock_fix branch December 13, 2019 20:20
sanekyy pushed a commit to sanekyy/plugins that referenced this pull request Dec 21, 2019
hjc22 pushed a commit to hjc22/plugins that referenced this pull request Jan 8, 2020
…acheing-01-08

* flutterPlugin/master: (30 commits)
  Update Gradle version (flutter#2448)
  [image_picker] support android V2 embedding (flutter#2430)
  [webview_flutter] Setup XCTests (flutter#2445)
  [video_player] Fixes video initialization future stall. (flutter#2134)
  [ci] Upgrade to Xcode 11.3 (flutter#2435)
  [In_app_purchases] migrate to Play Billing Library 2.0. (flutter#2287)
  Migrate away from deprecated `BinaryMessages` (flutter#2444)
  [google_sign_in]Update google_sign_in_example name in pubspec.yaml (flutter#2335)
  [ios_platform_images] Removed android support from the pubspec. (flutter#2432)
  [google_sign_in] Expose network error (flutter#2398)
  [battery] cleanup for Android embedding post 1.12 (flutter#2400)
  [flutter_webview] Raise min Flutter SDK to stable (flutter#2425)
  re-enable stable CI (flutter#2402)
  [in_app_purchase]Change a comment. (flutter#2329)
  [google_sign_in] Pass the client id to the platform interface. (flutter#2427)
  [ios_platform_images] Made ios_platform_images set the correct image scale. (flutter#2414)
  [url_launcher_platform_interface] use non static token for platform interface (flutter#2418)
  [plugin_platform_interface] Don't use const Object as a token (flutter#2417)
  Update endorsed macos plugins readme and update others (flutter#2407)
  [webview_flutter] add gesture navigation for iOS (flutter#2339)
  ...

# Conflicts:
#	packages/video_player/video_player/CHANGELOG.md
#	packages/video_player/video_player/pubspec.yaml
FlutterSu pushed a commit to FlutterSu/flutter-plugins that referenced this pull request Nov 20, 2020
collin-jackson added a commit to collin-jackson/plugins that referenced this pull request Aug 4, 2021
Updates the documentation for `PlatformInterface` to reflect that the token should be `static final` rather than `static const`. This was fixed in flutter#2417.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants