portone_flutter_v2 1.2.1
portone_flutter_v2: ^1.2.1 copied to clipboard
A module for integrating PortOne V2 payment service in Flutter App.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.2.1 - 2025-10-26 #
Changed #
- Returned
PortoneLocalizationsEnandPortoneLocalizationsKoasconstinstances to keep the localization delegates immutable and avoid unnecessary allocations when switching locales. - Adopted Dart's default 80-character
page_widthacrossanalysis_options.yaml,.trunk/trunk.yaml, the formatter scripts, and CI, then reformatted the package and example sources so they match the new style guide. - Re-aligned the
json_serializablebuilder configuration (including disablingchecked) and regenerated all model.g.dartfiles to remove redundant runtime guards and shrink the generated code. - Updated the primary and example dependencies to their latest stable releases (
url_launcher6.3.2,go_router16.3.0,build_runner2.10.1,json_serializable6.11.1,mockito5.5.1,very_good_analysis10.0.0) and quieted the upgrade scripts to reduce noise during maintenance. - Expanded
.pubignoreso IDE metadata, documentation artifacts, helper scripts, and the platform-specificexamplefolders are excluded from the published package, keeping the archive leaner.
Removed #
- Breaking:
PortonePayment's state class is now private (_PortonePaymentState), so consuming apps must interact with the widget exclusively through the publicPortonePaymentAPI and callbacks.
Fixed #
- Removed the upper bound from the Flutter SDK constraint (
flutter: ">=3.35.1") to comply withdart pub publishvalidation and allow future Flutter releases without republishing.
1.2.0 - 2025-08-20 #
Added #
- Introduced a
PlatformUtilclass to provide utility methods for detecting the current target platform (Web, iOS, Android, Windows, macOS, Linux).
Changed #
- Reformatted all Dart files with the new Dart version (3.9.0) format rules.
- Updated SDK (3.9.0) and Flutter version (3.35.1) constraints to reflect current compatibility requirements.
- Updated example app iOS deployment target to iOS 13.
Fixed #
- Improved intent URL handling and error management within the payment flow, adding robust error catching, parsing, and fallback support.
- Ensured app market links (e.g., Google Play) are opened externally on Android for a better user experience.
- Upgrade
very_good_analysisfor better error analyzing
1.1.0 - 2025-05-12 #
Added #
- Added
redirectUrlproperty to thePaymentRequestmodel in both the example app and the tests. - Introduced a
NormalizedUrlutility class for normalizing deep‐link redirect URLs and custom app schemes, preserving query parameters and fragments and handling null or whitespace inputs. - Integrated the
NormalizedUrlutility intoPortonePaymentto generate a normalizedredirectUrlandappSchemefor theInAppWebView, passing the normalizedredirectUrltopaymentDataand addingappSchemetoresourceCustomSchemes.
Changed #
- Removed unused export files (
helpers.dartandl10n.dart); updated the import inpayment_request.dartto directly importsupported_methods.dart; and updated the exports inportone_flutter_v2.dartto export individual files. - Simplified the
PopScopecondition inPortonePaymentStateby using a null‐awarecontroller?.canGoBack() ?? falsecheck. - Removed the default assignment of
redirectUrlwithin thePortonePaymentwidget;redirectUrlmust now be provided explicitly.
Fixed #
- Handled potential
CheckedFromJsonExceptioninPaymentResponse.fromJsonby adding a try‐catch, detailed logging (including incoming parameters, missing keys, and stack trace), improved scheme matching with acasepattern, and routed errors through_handleError. - Wrapped
launchUrlcalls in try‐catch, logged any errors, and enforcedLaunchMode.externalApplicationto ensure URLs open in an external application. - Prevented the
InAppWebViewfrom loading custom schemes by callingcontroller.stopLoading()and returningnullinonLoadResourceWithCustomScheme. - Removed a redundant
txIdfix in the Kakao Pay iOS AppLinks callback and enhancedInAppWebViewsettings: enabledjavaScriptCanOpenWindowsAutomatically, disabledallowsLinkPreview, enabledallowsInlineMediaPlayback, enableduseOnLoadResourceanduseOnDownloadStart, allowed theintentscheme, and clearedcontentBlockers.
Removed #
- Removed the
app_linksdependency and all associated deep‐link handling code fromPortonePayment(includingAppLinksinstance, stream subscription, and related logic), updatedpubspec.yaml,README.md, andexample/ios/Podfile.lock.
1.0.11 - 2025-05-10 #
Changed #
- Correct txId parameter for Kakao Pay iOS AppLinks callback - where the
txIdparameter was missing in the AppLinks callback from Kakao Pay on iOS, while thetidparameter was present. - Adding a
try-catchblock around thePaymentResponse.fromJsoncall to catchCheckedFromJsonException.
1.0.10 - 2025-05-07 #
Added #
- Introduces the
WebviewErrorUseCaseclass to centralize the logic for determining whichWebResourceErrorcases can be safely ignored during the PortOne payment flow in a WebView.- The
WebviewErrorUseCase.shouldIgnoremethod consults a predefined set of rules to determine if an error can be safely ignored based on its type and description. This helps to prevent unnecessary error handling for benign WebView errors that do not affect the payment process, such as cancelled navigations, host lookup failures, and network timeouts. - The
onReceivedErrorcallback inPortonePaymentStateis updated to use theWebviewErrorUseCase.shouldIgnoremethod to filter out ignorable errors, improving the robustness and clarity of the error handling logic.
- The
1.0.9 - 2025-05-03 #
Fixed #
- Prevents unnecessary error handling for
WebResourceErrortypes withUNKNOWNerrors and a description containing 'WebKitErrorDomain'. These errors are often non-critical and can be safely ignored.
1.0.8 - 2025-04-30 #
Added #
- Added a null check for
errorResponse.statusCodeto prevent errors when the status code is not available. If the status code is null, the error is logged and ignored. - Added a check to ignore HTTP errors that occur on subresource requests (i.e., requests that are not for the main frame document). This prevents unnecessary error handling for resources like images or stylesheets that may fail to load. The URL and status code of the ignored error are logged.
Changed #
-
Replaced the default
Container()in theIndexedStackwith aCenterwidget containing aCircularProgressIndicator. This ensures that a loading indicator is displayed to the user while the WebView is being initialized, providing visual feedback and preventing a perceived delay. -
Introduced a new
_handleSuccessmethod to encapsulate the logic for handling successful payment responses. This method calls thewidget.callbackwith thepaymentResponseand clears the_redirectedUrlslist. -
Replaced direct calls to
widget.callbackwith calls to_handleSuccessin the app link and URL override handling logic.
Fixed #
- Improved logging messages to provide more context about the type of HTTP error being handled or ignored.
- Ensured that
_redirectedUrlsis cleared in_handleErrorto prevent memory leaks and ensure a clean state for subsequent payment attempts. - Added a check to ignore errors that occur on subresource requests (i.e., requests that are not for the main frame document). This prevents unnecessary error handling for resources like images or stylesheets that may fail to load.
- Added checks to ignore specific
WebResourceErrortypes:UNKNOWNerrors with a description containing 'WebKitErrorDomain' are ignored, as these are often non-critical.CANCELLEDerrors with a description containing 'NSURLErrorDomain' are ignored, as these represent cancelled navigations.
1.0.7 - 2025-04-28 #
Added #
- Introduces the
PortoneErrorHandlerclass to provide a flexible way to handle error callbacks. - Added
_redirectedUrlsto track redirected URLs during WebView navigation. This list is used to generate a stack trace if an error occurs, providing a history of navigation events leading to the error.
Changed #
- Modified the
onErrorparameter in thePortonePaymentconstructor to accept aPortoneErrorHandlerinstance. - Ensured that errors originating from the PortOne SDK, WebView errors, and navigation errors include stack traces when invoking the error callback.
- Introduced the
_handleErrormethod to centralize error reporting, ensuring that both the error object and a stack trace (either the current stack trace or one generated from_redirectedUrls) are consistently passed to thewidget.onErrorcallback. - Added null safety check for url in
shouldOverrideUrlLoadingto prevent errors when the URL is null.
1.0.6 - 2025-04-27 #
Added #
- Added
onReceivedErrorcallback to capture and propagateWebResourceErrorobjects via thewidget.onErrorhandler. - Added
onReceivedHttpErrorcallback to capture and propagateWebResourceResponseobjects via thewidget.onErrorhandler.
Changed #
- Modified payment data processing to directly include the
appSchemein the payment data map. - Removed the conditional logic for setting
retAppSchemespecifically for Toss Payments, as it's no longer required. - Updated paymentData to be a mutable map to allow modification.
1.0.5 - 2025-04-26 #
- Added
portone_flutter_v2.podspecfor CocoaPods integration. - Created
PrivacyInfo.xcprivacyto declare the app's privacy practices. - Added
ios/Runner.xcodeproj/project.pbxprojto unmanaged files in.metadatato prevent template overwrites.
1.0.4 - 2025-04-26 #
Added #
- Updated the supported payment methods section in the README to reflect the new PG Company specific support.
- Enable the Android plugin so that the app has the schema without modifying the manifest separately, and declare the external app schema (including
1.0.3 - 2025-04-26 #
Added #
- Added
pgfield to thePaymentRequestmodel, accepting aPGCompanyenum to specify the payment gateway. - Updated the
PaymentRequest.fromJsonfactory method to handle the newpgfield. - Added
PGCompanyenum to represent supported PG companies. - Added conditional logic to include the
retAppSchemeparameter when using the Tosspayments PG for redirect handling.
Changed #
- Introduced validation in the
PaymentRequestconstructor to ensure the selectedpayMethodis supported by the specifiedPGCompany. - Throws an
ArgumentErrorwhen an unsupportedpayMethodis provided, with a clear error message listing the supported methods. - Added unit tests verifying that an
ArgumentErroris thrown for unsupportedpayMethodcases and that object creation succeeds for supported cases. - Removed
includeToJson: falseannotation from thepgfield in thePaymentRequestmodel. (If still present, please remove.)
1.0.2 - 2025-04-25 #
Added #
- Added unit tests for most of model classes
Changed #
- Exposes the
PortonePaymentStateclass as public and adds comprehensive documentation to facilitate testing and improve understanding of the payment process. - Sets a default
redirectUrlin thepaymentDataif it is null. - Adds
retAppSchemeto thepaymentDatafor compatibility with Tosspayments' TossPay, as it requires this parameter.
1.0.1 - 2025-04-12 #
Added #
- Added
PaymentCurrencyenum with support for a wide range of currencies based on ISO 4217. - Added Missing documentation for all public members to improve code readability and maintainability.
Changed #
- Translated the CHANGELOG from Korean to English.
- Converted enum values in
CashReceiptTradeOptionto snake case for consistency.
1.0.0 - 2025-04-11 #
Added #
- Initial integration of PortOne V2 payment service
- Implementation of payment process using the
PortonePaymentwidget - Support for multiple payment methods (credit card, virtual account, easy-pay, etc.)
- Implementation of payment request model (
PaymentRequest) and payment response model (PaymentResponse) - Added
PGCompanyenumeration to support various PG companies - Added
PaymentSupportedMethodsextension for checking supported payment methods per PG company - Functionality for handling payment callbacks via app schemes
- Option to configure payment window type (iframe, popup)
- Multilingual support (Korean, English)
- Localization support for PG company names
- Support for multiple currencies (according to the ISO 4217 standard)
- Support for country information (according to the ISO 3166-1 alpha-2 standard)
- Added bypass parameter support for each PG company:
- e.g., KakaoPay, Toss Payments, Toss Pay V2, KSNET, Smartro V2, Naver Pay, etc.
- Support for transmitting additional information such as custom data, store information, and shipping address
- Error handling and logging functionality
Changed #
- Renamed class from
PortOnePaymenttoPortonePaymentfor consistency
Fixed #
- Improved handling of intent URL processing
- Improved payment response processing via app scheme
- Modified field type in PaymentRequest model (changed
isEscrowto nullable) - Changed
paypaltoconvenienceStorein thePaymentPayMethodenumeration