From 282f8d2be9af693698f12de0333f3422bdc952ce Mon Sep 17 00:00:00 2001 From: Jose Ugia Date: Mon, 14 Sep 2026 17:07:26 +0200 Subject: [PATCH 1/2] Retire the dynamic configuration extracted from the pubspec.yaml in favor of a static file that gets generated and overwritten at release time --- .../lib/core/payment_configuration.dart | 4 ++-- .../lib/generated/package_info.dart | 5 +++++ pay_platform_interface/lib/pay_channel.dart | 5 ++--- .../lib/util/configurations.dart | 21 ++++++------------- .../test/payment_configuration_test.dart | 6 +++--- 5 files changed, 18 insertions(+), 23 deletions(-) create mode 100644 pay_platform_interface/lib/generated/package_info.dart diff --git a/pay_platform_interface/lib/core/payment_configuration.dart b/pay_platform_interface/lib/core/payment_configuration.dart index ff87916f..4a3636c2 100644 --- a/pay_platform_interface/lib/core/payment_configuration.dart +++ b/pay_platform_interface/lib/core/payment_configuration.dart @@ -49,7 +49,7 @@ class PaymentConfiguration { final PayProvider provider; /// The configuration parameters for a given payment provider. - final Future> _parameters; + final Map _parameters; /// The raw configuration provided final String _rawConfigurationData; @@ -105,7 +105,7 @@ class PaymentConfiguration { (s) async => jsonDecode(s) as Map); /// Returns the core configuration map in this object. - Future> parameterMap() async { + Map parameterMap() { return _parameters; } diff --git a/pay_platform_interface/lib/generated/package_info.dart b/pay_platform_interface/lib/generated/package_info.dart new file mode 100644 index 00000000..67648667 --- /dev/null +++ b/pay_platform_interface/lib/generated/package_info.dart @@ -0,0 +1,5 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +// This file is updated automatically by the release.sh script. +class PackageInfo { + static const String version = '0.0.0.debug'; +} diff --git a/pay_platform_interface/lib/pay_channel.dart b/pay_platform_interface/lib/pay_channel.dart index 10634ef4..63c4243e 100644 --- a/pay_platform_interface/lib/pay_channel.dart +++ b/pay_platform_interface/lib/pay_channel.dart @@ -43,8 +43,7 @@ class PayMethodChannel extends PayPlatform { @override Future userCanPay(PaymentConfiguration paymentConfiguration) async { return await _channel.invokeMethod( - 'userCanPay', jsonEncode(await paymentConfiguration.parameterMap())) - as bool; + 'userCanPay', jsonEncode(paymentConfiguration.parameterMap())) as bool; } /// Shows the payment selector to complete the payment operation. @@ -59,7 +58,7 @@ class PayMethodChannel extends PayPlatform { List paymentItems, ) async { final paymentResult = await _channel.invokeMethod('showPaymentSelector', { - 'payment_profile': jsonEncode(await paymentConfiguration.parameterMap()), + 'payment_profile': jsonEncode(paymentConfiguration.parameterMap()), 'payment_items': paymentItems.map((item) => item.toMap()).toList(), }) as String; diff --git a/pay_platform_interface/lib/util/configurations.dart b/pay_platform_interface/lib/util/configurations.dart index d087abef..1b073a21 100644 --- a/pay_platform_interface/lib/util/configurations.dart +++ b/pay_platform_interface/lib/util/configurations.dart @@ -12,10 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import 'package:flutter/services.dart'; - -import 'package:yaml/yaml.dart'; import 'package:pay_platform_interface/core/payment_configuration.dart'; +import 'package:pay_platform_interface/generated/package_info.dart'; /// A utility class to handle configuration objects and metadata associated /// with this plugin. @@ -23,10 +21,10 @@ class Configurations { /// Complements the payment configuration object with metadata about the /// package. /// - /// Takes the configuration included in [config] and returns and updated - /// version of the object wrapped in a [Future] with additional metadata. - static Future> extractParameters( - Map configuration) async { + /// Takes the configuration included in [configuration] and returns an updated + /// version of the object with additional metadata. + static Map extractParameters( + Map configuration) { PayProvider provider = PayProviders.fromString(configuration['provider'] as String)!; Map configurationParams = @@ -43,7 +41,7 @@ class Configurations { ...(configurationParams['merchantInfo'] ?? {}) as Map, 'softwareInfo': { 'id': 'flutter/pay-plugin', - 'version': (await _getPackageConfiguration())['version'] + 'version': PackageInfo.version } }; @@ -53,11 +51,4 @@ class Configurations { return updatedPaymentConfiguration; } } - - /// Retrieves package information from the `pubspec.yaml` file as a [Map]. - static Future> _getPackageConfiguration() async { - final configurationFile = await rootBundle - .loadString('packages/pay_platform_interface/pubspec.yaml'); - return loadYaml(configurationFile) as Map; - } } diff --git a/pay_platform_interface/test/payment_configuration_test.dart b/pay_platform_interface/test/payment_configuration_test.dart index 71c32965..6fef8b97 100644 --- a/pay_platform_interface/test/payment_configuration_test.dart +++ b/pay_platform_interface/test/payment_configuration_test.dart @@ -47,7 +47,7 @@ void main() { test('Load payment configuration from a string', () async { final configuration = PaymentConfiguration.fromJsonString(_payConfigString); expect(configuration.provider, _providerGooglePay); - expect(await configuration.parameterMap(), isNotEmpty); + expect(configuration.parameterMap(), isNotEmpty); }); test('Load payment configuration from an asset', () async { @@ -56,7 +56,7 @@ void main() { profileLoader: _testProfileLoader); expect(configuration.provider, _providerGooglePay); - expect(await configuration.parameterMap(), isNotEmpty); + expect(configuration.parameterMap(), isNotEmpty); }); test('Check that software info is included in Google Pay requests', () async { @@ -64,7 +64,7 @@ void main() { 'google_pay_prod_payment_profile.json', profileLoader: _testProfileLoader); - final configParams = await config.parameterMap(); + final configParams = config.parameterMap(); expect(configParams.containsKey('merchantInfo'), isTrue); expect(configParams['merchantInfo'].containsKey('softwareInfo'), isTrue); From 6963d1872ce651f4a6db6c558a7f2ad4ea77b6bc Mon Sep 17 00:00:00 2001 From: Jose Ugia Date: Mon, 14 Sep 2026 17:20:12 +0200 Subject: [PATCH 2/2] Update comment to remove stringency referring a concrete build file --- pay_platform_interface/lib/generated/package_info.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pay_platform_interface/lib/generated/package_info.dart b/pay_platform_interface/lib/generated/package_info.dart index 67648667..c65894ae 100644 --- a/pay_platform_interface/lib/generated/package_info.dart +++ b/pay_platform_interface/lib/generated/package_info.dart @@ -1,5 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -// This file is updated automatically by the release.sh script. +// This file is updated automatically by a script that takes the version +// directly for the `pubspec.yaml` file. class PackageInfo { static const String version = '0.0.0.debug'; }