Repository navigation
[In_app _purchase] README excerpt examples and changelog - #12739
auto-submit[bot] merged 9 commits into
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the in_app_purchase package's README examples and documentation excerpts to match the current package API, introducing a new readme_examples.dart file to house these code snippets. Feedback on the new file highlights several potential runtime issues, including missing platform guards for iOS/macOS-specific platform additions, a potential out-of-bounds index error when reading transactions, and unsafe null assertions on subscription details for non-subscription products.
Guard StoreKit platform-addition calls with the correct iOS/macOS platform checks, and avoid unsafe null assertions/index access when reading Android subscription offers and StoreKit 2 transactions.
I don't see a version change in the PR. |
Also, please complete the PR description.
This step also has not been done. Marking as a draft; once the PR description is complete and accurate, please mark this as ready for review. |
The README/doc-excerpt update needs its own release since 3.3.0 is already published on pub.dev.
|
@stuartmorgan-g Thanks for the feedback — should be addressed now:
|
There was a problem hiding this comment.
Code Review
This pull request updates the in_app_purchase package to version 3.3.1, migrating the README.md code examples to be extracted from a new source file, readme_examples.dart. Feedback on the new example file suggests several improvements to prevent runtime errors and crashes, including adding platform checks for platform-specific APIs (StoreKit 2 and Google Play), wrapping purchase updates in a try-catch block, and safely accessing list elements to avoid a StateError.
- Wrap per-purchase processing in a try-catch so one failed purchase doesn't block the rest of the batch or throw an unhandled async error. - Guard StoreKit 2 purchases/transactions with an iOS/macOS platform check, and the Google Play subscription upgrade with an Android check. - Use pricingPhases.firstOrNull instead of .first to avoid a StateError on an empty list.
- Restore the surrounding State class context (field, initState, dispose) for the purchase-updates snippet instead of showing only the inner listen() call. - Drop the function wrappers added purely to satisfy code-excerpt for store-availability, product-query, restore-purchases, and purchase-flow, since they added no context the original inline snippets didn't already have. - Restore the platform-specific package imports (in_app_purchase_android, in_app_purchase_storekit, store_kit_wrappers, store_kit_2_wrappers) that used to be shown inline in each platform-specific example, using multi-part code-excerpt regions anchored on the file's real imports. - Remove ci_config.yaml now that this package no longer needs the exempt_from_excerpts override, instead of leaving it with a default value and an obsolete TODO. README regenerated via `dart run script/tool/bin/flutter_plugin_tools.dart update-excerpts --packages=in_app_purchase`.
|
@stuartmorgan-g Thanks for the detailed feedback. All addressed by regenerating the excerpts and README:
Regenerated with |
stuartmorgan-g
left a comment
There was a problem hiding this comment.
This mostly looks good, but has a bunch of analysis issues (see CI failures, or run analysis locally).
avoid_print and public_member_api_docs you can suppress at the file level, and the others should be fixed.
Suppress avoid_print and public_member_api_docs at the file level, since they're expected in illustrative example code. Fix the rest: drop redundant type annotations that the analyzer flags as obvious, and use the products variable instead of leaving it unused.
|
@stuartmorgan-g Fixed:
|
stuartmorgan-g
left a comment
There was a problem hiding this comment.
LGTM with one small change.
@bparrishMines for secondary review
The print was only there to satisfy the unused_local_variable lint; it shouldn't be part of the visible README snippet.
|
@stuartmorgan-g Good catch — moved |
…er#193289) Roll Packages from c2b58e1a97fb to 431ea69a42e2 (56 revisions) flutter/packages@c2b58e1...431ea69 2026-09-24 [email protected] [cross_file] Updates cross_file to a package separated federated plugin (flutter/packages#11010) 2026-09-23 [email protected] [material_ui] Remove static access of `copyWith` from `dart fix` golden tests for `ThemeData/TextTheme` (flutter/packages#12994) 2026-09-23 [email protected] [camera_avfoundation] Replace deprecated high-resolution capture APIs (flutter/packages#12372) 2026-09-23 [email protected] [pigeon] update nullish checks to use new isNullish method (flutter/packages#12985) 2026-09-23 [email protected] [ci] Assign batch release PR approver as reviewer on sync-back PR (flutter/packages#12976) 2026-09-23 [email protected] [image_picker] Fix scaling 10-bit images (flutter/packages#12557) 2026-09-23 [email protected] [material_ui] Improve Autocomplete, DrawerHeader, and Tooltip accessibility (flutter/packages#12918) 2026-09-23 [email protected] [google_fonts] Decouple GoogleFontsLite for full tree-shaking and add full feature parity (flutter/packages#12830) 2026-09-23 [email protected] [file_selector] Ignore flakey `file_selector_android` tests (flutter/packages#12992) 2026-09-23 [email protected] [CI] Remove bringup from `Mac_arm64 build_all_packages` targets (flutter/packages#12978) 2026-09-22 [email protected] [material_ui] Unskip 5 passing web tests in bottom_app_bar_test and text_field_test (flutter/packages#12983) 2026-09-22 [email protected] [cupertino_ui] Unskip 5 passing web tests in adaptive_text_selection_toolbar_test and text_field_test (flutter/packages#12984) 2026-09-22 [email protected] [go_router] Fix ShellRoute chrome dropped from semantics tree by ModalBarrier (flutter/packages#12353) 2026-09-22 [email protected] [material_ui] Add contrastLevel for M3 ColorScheme (flutter/packages#12743) 2026-09-22 [email protected] [go_router] Preserve nested pushes during config updates (flutter/packages#12611) 2026-09-22 [email protected] [material_ui] Migrate M3 Chip template to use new gen_defaults (flutter/packages#12847) 2026-09-22 [email protected] [material_ui] Fix LocalHistoryEntry leak when double tapping Drawer scrim (flutter/packages#12552) 2026-09-22 [email protected] Update suggested reviewers (flutter/packages#12974) 2026-09-22 [email protected] Sync release-material_ui-1.4.0 to main (flutter/packages#12966) 2026-09-22 [email protected] Sync release-cupertino_ui-1.1.1 to main (flutter/packages#12965) 2026-09-21 [email protected] [ci] Update repo for 3.47 stable release (flutter/packages#12959) 2026-09-21 [email protected] Manual roll Flutter from 27fec0e to 4fcd90b (1 revision) (flutter/packages#12904) 2026-09-21 [email protected] Revert "[go_router_builder] Migrate to material_ui" (flutter/packages#12962) 2026-09-21 [email protected] [material_ui] Update `material_ui` tests to prevent them from failing when framework `TextStyle` changes (flutter/packages#12728) 2026-09-21 [email protected] [go_router_builder] Migrate to material_ui (flutter/packages#12913) 2026-09-21 [email protected] [material_ui, cupertino_ui] Bump Flutter version from to 3.47 (flutter/packages#12944) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in example checkbox tests (flutter/packages#12961) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in checkbox_test.dart (flutter/packages#12956) 2026-09-21 [email protected] [google_sign_in] PR 3/4 Migrate ViewProvider and GID SDK wrappers from Objective-C to Swift (flutter/packages#12657) 2026-09-21 [email protected] [google_sign_in] PR 2/4 Migrate the plugin class from Objective-C to Swift. (flutter/packages#12655) 2026-09-20 [email protected] [cross_file_darwin] iOS/macOS implementation of `cross_file` (flutter/packages#12910) 2026-09-20 [email protected] [cross_file_web] Web implementation of `cross_file` (flutter/packages#12908) 2026-09-20 [email protected] [material_ui] Migrate M3 `InputChip` template to use new gen_defaults (flutter/packages#12850) 2026-09-20 [email protected] [material_ui] Migrate M3 Checkbox defaults to new gen_defaults (flutter/packages#12816) 2026-09-20 [email protected] [material_ui] Migrate M3 `FilterChip` template to use new gen_defaults (flutter/packages#12849) 2026-09-19 [email protected] [material_ui] Announce PopupMenuButton with a child as a button (flutter/packages#12585) 2026-09-19 [email protected] Roll Flutter (stable) from 9584c67 to 6a19cca (7 revisions) (flutter/packages#12950) 2026-09-18 [email protected] [material_ui] Reduce the `material_ui` non-wasm web test suite (flutter/packages#12763) 2026-09-18 [email protected] Replace `Mac_x64` builders with `Mac_arm64` ones (flutter/packages#12941) 2026-09-18 [email protected] [in_app_purchase_storekit] Use `_$SKPaymentDiscountWrapperToJson` (flutter/packages#12721) 2026-09-18 [email protected] [In_app _purchase] README excerpt examples and changelog (flutter/packages#12739) 2026-09-18 [email protected] [material_ui] Add alternative input method for `RangeSlider` in `NavigationMode.directional` (flutter/packages#12630) 2026-09-18 [email protected] [cross_file_android] Android implementation of `cross_file` (flutter/packages#12909) 2026-09-18 [email protected] [camera_platform_interface] Adds videoOutputPath support to startVideoRecording (flutter/packages#12667) 2026-09-17 [email protected] [cupertino_ui] Migrate a snippet in `CupertinoCheckbox`'s API doc to `{@example}` and add unit tests (flutter/packages#12180) 2026-09-17 [email protected] [material_ui] Default gen_defaults color helper prefix (flutter/packages#12848) ...
Adds a
readme_examples.dartfile underexample/libfor thein_app_purchasepackage and switches the package README to use<?code-excerpt?>-generated snippets sourced from it, instead of hand-maintained inline code blocks. This keeps the README examples compiling and in sync with the current package API, and removesin_app_purchase's exemption fromcode-excerptadoption.Also fixes several runtime-safety issues in those new excerpts that were flagged in review (missing
Platform.isIOS/Platform.isMacOSguards around StoreKit-only APIs, and unsafe null/index access when reading Android subscription offers and StoreKit 2 transactions), and bumps the package version with a CHANGELOG entry for the change.Addresses the
in_app_purchase/in_app_purchaseitem of flutter/flutter#102679 (that issue tracks many packages, so it should stay open after this merges).Pre-Review Checklist
[shared_preferences]///).If you need help, consider asking for advice on the #hackers-new channel on Discord.
Test plan
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