From 9e27e424c8693e967feec528669e8bd1ffeb8f9f Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 4 Dec 2024 14:47:59 -0500 Subject: [PATCH 1/6] autoupdate --- .../lib/src/messages.g.dart | 108 ++++++---- packages/ios_platform_images/pubspec.yaml | 2 +- .../path_provider_foundation/messages.g.swift | 90 +++++++- .../lib/messages.g.dart | 130 ++++++++---- .../path_provider_foundation/pubspec.yaml | 2 +- .../test/messages_test.g.dart | 98 +++++++-- .../Sources/url_launcher_ios/messages.g.swift | 111 ++++++++-- .../url_launcher_ios/lib/src/messages.g.dart | 198 +++++++++++------- .../url_launcher_ios/pubspec.yaml | 2 +- .../lib/src/messages.g.dart | 120 ++++++----- .../url_launcher_macos/messages.g.swift | 90 +++++--- .../url_launcher_macos/pubspec.yaml | 2 +- 12 files changed, 672 insertions(+), 281 deletions(-) diff --git a/packages/ios_platform_images/lib/src/messages.g.dart b/packages/ios_platform_images/lib/src/messages.g.dart index a3a5ab43350..523c70d7895 100644 --- a/packages/ios_platform_images/lib/src/messages.g.dart +++ b/packages/ios_platform_images/lib/src/messages.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v11.0.1), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -11,6 +11,13 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + /// A serialization of a platform image's data. class PlatformImageData { PlatformImageData({ @@ -40,12 +47,15 @@ class PlatformImageData { } } -class _PlatformImagesApiCodec extends StandardMessageCodec { - const _PlatformImagesApiCodec(); +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is PlatformImageData) { - buffer.putUint8(128); + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is PlatformImageData) { + buffer.putUint8(129); writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); @@ -55,7 +65,7 @@ class _PlatformImagesApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 129: return PlatformImageData.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -67,60 +77,66 @@ class PlatformImagesApi { /// Constructor for [PlatformImagesApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - PlatformImagesApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + PlatformImagesApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - static const MessageCodec codec = _PlatformImagesApiCodec(); + final String pigeonVar_messageChannelSuffix; /// Returns the URL for the given resource, or null if no such resource is /// found. - Future resolveUrl( - String arg_resourceName, String? arg_extension) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_resourceName, arg_extension]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future resolveUrl(String resourceName, String? extension) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([resourceName, extension]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { - return (replyList[0] as String?); + return (pigeonVar_replyList[0] as String?); } } /// Returns the data for the image resource with the given name, or null if /// no such resource is found. - Future loadImage(String arg_name) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_name]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future loadImage(String name) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([name]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { - return (replyList[0] as PlatformImageData?); + return (pigeonVar_replyList[0] as PlatformImageData?); } } } diff --git a/packages/ios_platform_images/pubspec.yaml b/packages/ios_platform_images/pubspec.yaml index 3d2fb1cb064..6acc1a46dec 100644 --- a/packages/ios_platform_images/pubspec.yaml +++ b/packages/ios_platform_images/pubspec.yaml @@ -21,7 +21,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - pigeon: ^11.0.0 + pigeon: ^22.6.4 topics: - image diff --git a/packages/path_provider/path_provider_foundation/darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift b/packages/path_provider/path_provider_foundation/darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift index 4af5ac36663..c12242270ba 100644 --- a/packages/path_provider/path_provider_foundation/darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift +++ b/packages/path_provider/path_provider_foundation/darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v10.1.3), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,11 +14,36 @@ import Foundation #error("Unsupported platform.") #endif +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + private func wrapResult(_ result: Any?) -> [Any?] { return [result] } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -33,6 +58,10 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func isNullish(_ value: Any?) -> Bool { + return value is NSNull || value == nil +} + private func nilOrValue(_ value: Any?) -> T? { if value is NSNull { return nil } return value as! T? @@ -46,6 +75,47 @@ enum DirectoryType: Int { case temp = 4 case applicationCache = 5 } + +private class messagesPigeonCodecReader: FlutterStandardReader { + override func readValue(ofType type: UInt8) -> Any? { + switch type { + case 129: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return DirectoryType(rawValue: enumResultAsInt) + } + return nil + default: + return super.readValue(ofType: type) + } + } +} + +private class messagesPigeonCodecWriter: FlutterStandardWriter { + override func writeValue(_ value: Any) { + if let value = value as? DirectoryType { + super.writeByte(129) + super.writeValue(value.rawValue) + } else { + super.writeValue(value) + } + } +} + +private class messagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + return messagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + return messagesPigeonCodecWriter(data: data) + } +} + +class messagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = messagesPigeonCodec(readerWriter: messagesPigeonCodecReaderWriter()) +} + /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol PathProviderApi { func getDirectoryPath(type: DirectoryType) throws -> String? @@ -54,15 +124,21 @@ protocol PathProviderApi { /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. class PathProviderApiSetup { - /// The codec used by PathProviderApi. + static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `PathProviderApi` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: PathProviderApi?) { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: PathProviderApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" let getDirectoryPathChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.PathProviderApi.getDirectoryPath", binaryMessenger: binaryMessenger) + name: + "dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getDirectoryPathChannel.setMessageHandler { message, reply in let args = message as! [Any?] - let typeArg = DirectoryType(rawValue: args[0] as! Int)! + let typeArg = args[0] as! DirectoryType do { let result = try api.getDirectoryPath(type: typeArg) reply(wrapResult(result)) @@ -74,7 +150,9 @@ class PathProviderApiSetup { getDirectoryPathChannel.setMessageHandler(nil) } let getContainerPathChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.PathProviderApi.getContainerPath", binaryMessenger: binaryMessenger) + name: + "dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { getContainerPathChannel.setMessageHandler { message, reply in let args = message as! [Any?] diff --git a/packages/path_provider/path_provider_foundation/lib/messages.g.dart b/packages/path_provider/path_provider_foundation/lib/messages.g.dart index 3fdbadd5ae2..dbe046b89ad 100644 --- a/packages/path_provider/path_provider_foundation/lib/messages.g.dart +++ b/packages/path_provider/path_provider_foundation/lib/messages.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v10.1.3), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -11,6 +11,24 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + +List wrapResponse( + {Object? result, PlatformException? error, bool empty = false}) { + if (empty) { + return []; + } + if (error == null) { + return [result]; + } + return [error.code, error.message, error.details]; +} + enum DirectoryType { applicationDocuments, applicationSupport, @@ -20,57 +38,93 @@ enum DirectoryType { applicationCache, } +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is DirectoryType) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : DirectoryType.values[value]; + default: + return super.readValueOfType(type, buffer); + } + } +} + class PathProviderApi { /// Constructor for [PathProviderApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - PathProviderApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + PathProviderApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - Future getDirectoryPath(DirectoryType arg_type) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PathProviderApi.getDirectoryPath', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_type.index]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + final String pigeonVar_messageChannelSuffix; + + Future getDirectoryPath(DirectoryType type) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([type]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { - return (replyList[0] as String?); + return (pigeonVar_replyList[0] as String?); } } - Future getContainerPath(String arg_appGroupIdentifier) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PathProviderApi.getContainerPath', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_appGroupIdentifier]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future getContainerPath(String appGroupIdentifier) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([appGroupIdentifier]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { - return (replyList[0] as String?); + return (pigeonVar_replyList[0] as String?); } } } diff --git a/packages/path_provider/path_provider_foundation/pubspec.yaml b/packages/path_provider/path_provider_foundation/pubspec.yaml index cfeac45f6cd..fe75da0d11b 100644 --- a/packages/path_provider/path_provider_foundation/pubspec.yaml +++ b/packages/path_provider/path_provider_foundation/pubspec.yaml @@ -32,7 +32,7 @@ dev_dependencies: sdk: flutter mockito: ^5.4.4 path: ^1.8.0 - pigeon: ^10.1.3 + pigeon: ^22.6.4 topics: - files diff --git a/packages/path_provider/path_provider_foundation/test/messages_test.g.dart b/packages/path_provider/path_provider_foundation/test/messages_test.g.dart index c1477dfe415..36b84bc1f94 100644 --- a/packages/path_provider/path_provider_foundation/test/messages_test.g.dart +++ b/packages/path_provider/path_provider_foundation/test/messages_test.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v10.1.3), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, unnecessary_import, no_leading_underscores_for_local_identifiers // ignore_for_file: avoid_relative_lib_imports import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -13,59 +13,111 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:path_provider_foundation/messages.g.dart'; +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is DirectoryType) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : DirectoryType.values[value]; + default: + return super.readValueOfType(type, buffer); + } + } +} + abstract class TestPathProviderApi { static TestDefaultBinaryMessengerBinding? get _testBinaryMessengerBinding => TestDefaultBinaryMessengerBinding.instance; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); String? getDirectoryPath(DirectoryType type); String? getContainerPath(String appGroupIdentifier); - static void setup(TestPathProviderApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setUp( + TestPathProviderApi? api, { + BinaryMessenger? binaryMessenger, + String messageChannelSuffix = '', + }) { + messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PathProviderApi.getDirectoryPath', codec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PathProviderApi.getDirectoryPath was null.'); + 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath was null.'); final List args = (message as List?)!; - final DirectoryType? arg_type = - args[0] == null ? null : DirectoryType.values[args[0] as int]; + final DirectoryType? arg_type = (args[0] as DirectoryType?); assert(arg_type != null, - 'Argument for dev.flutter.pigeon.PathProviderApi.getDirectoryPath was null, expected non-null DirectoryType.'); - final String? output = api.getDirectoryPath(arg_type!); - return [output]; + 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getDirectoryPath was null, expected non-null DirectoryType.'); + try { + final String? output = api.getDirectoryPath(arg_type!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } }); } } { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.PathProviderApi.getContainerPath', codec, + final BasicMessageChannel< + Object?> pigeonVar_channel = BasicMessageChannel< + Object?>( + 'dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath$messageChannelSuffix', + pigeonChannelCodec, binaryMessenger: binaryMessenger); if (api == null) { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, null); + .setMockDecodedMessageHandler(pigeonVar_channel, null); } else { _testBinaryMessengerBinding!.defaultBinaryMessenger - .setMockDecodedMessageHandler(channel, + .setMockDecodedMessageHandler(pigeonVar_channel, (Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.PathProviderApi.getContainerPath was null.'); + 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath was null.'); final List args = (message as List?)!; final String? arg_appGroupIdentifier = (args[0] as String?); assert(arg_appGroupIdentifier != null, - 'Argument for dev.flutter.pigeon.PathProviderApi.getContainerPath was null, expected non-null String.'); - final String? output = api.getContainerPath(arg_appGroupIdentifier!); - return [output]; + 'Argument for dev.flutter.pigeon.path_provider_foundation.PathProviderApi.getContainerPath was null, expected non-null String.'); + try { + final String? output = + api.getContainerPath(arg_appGroupIdentifier!); + return [output]; + } on PlatformException catch (e) { + return wrapResponse(error: e); + } catch (e) { + return wrapResponse( + error: PlatformException(code: 'error', message: e.toString())); + } }); } } diff --git a/packages/url_launcher/url_launcher_ios/ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift b/packages/url_launcher/url_launcher_ios/ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift index c3b0b8a65df..4c9c4693e89 100644 --- a/packages/url_launcher/url_launcher_ios/ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift +++ b/packages/url_launcher/url_launcher_ios/ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v11.0.1), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,8 +14,22 @@ import Foundation #error("Unsupported platform.") #endif -private func isNullish(_ value: Any?) -> Bool { - return value is NSNull || value == nil +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } } private func wrapResult(_ result: Any?) -> [Any?] { @@ -23,6 +37,13 @@ private func wrapResult(_ result: Any?) -> [Any?] { } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -37,6 +58,10 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func isNullish(_ value: Any?) -> Bool { + return value is NSNull || value == nil +} + private func nilOrValue(_ value: Any?) -> T? { if value is NSNull { return nil } return value as! T? @@ -62,6 +87,55 @@ enum InAppLoadResult: Int { case invalidUrl = 2 } +private class messagesPigeonCodecReader: FlutterStandardReader { + override func readValue(ofType type: UInt8) -> Any? { + switch type { + case 129: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return LaunchResult(rawValue: enumResultAsInt) + } + return nil + case 130: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return InAppLoadResult(rawValue: enumResultAsInt) + } + return nil + default: + return super.readValue(ofType: type) + } + } +} + +private class messagesPigeonCodecWriter: FlutterStandardWriter { + override func writeValue(_ value: Any) { + if let value = value as? LaunchResult { + super.writeByte(129) + super.writeValue(value.rawValue) + } else if let value = value as? InAppLoadResult { + super.writeByte(130) + super.writeValue(value.rawValue) + } else { + super.writeValue(value) + } + } +} + +private class messagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + return messagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + return messagesPigeonCodecWriter(data: data) + } +} + +class messagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = messagesPigeonCodec(readerWriter: messagesPigeonCodecReaderWriter()) +} + /// Generated protocol from Pigeon that represents a handler of messages from Flutter. protocol UrlLauncherApi { /// Checks whether a URL can be loaded. @@ -80,20 +154,23 @@ protocol UrlLauncherApi { /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. class UrlLauncherApiSetup { - /// The codec used by UrlLauncherApi. + static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `UrlLauncherApi` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: UrlLauncherApi?) { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: UrlLauncherApi?, messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" /// Checks whether a URL can be loaded. let canLaunchUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.canLaunchUrl", - binaryMessenger: binaryMessenger) + name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.canLaunchUrl\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { canLaunchUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] let urlArg = args[0] as! String do { let result = try api.canLaunchUrl(url: urlArg) - reply(wrapResult(result.rawValue)) + reply(wrapResult(result)) } catch { reply(wrapError(error)) } @@ -103,8 +180,8 @@ class UrlLauncherApiSetup { } /// Opens the URL externally, returning the status of launching it. let launchUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.launchUrl", - binaryMessenger: binaryMessenger) + name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.launchUrl\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { launchUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -113,7 +190,7 @@ class UrlLauncherApiSetup { api.launchUrl(url: urlArg, universalLinksOnly: universalLinksOnlyArg) { result in switch result { case .success(let res): - reply(wrapResult(res.rawValue)) + reply(wrapResult(res)) case .failure(let error): reply(wrapError(error)) } @@ -125,8 +202,9 @@ class UrlLauncherApiSetup { /// Opens the URL in an in-app SFSafariViewController, returning the results /// of loading it. let openUrlInSafariViewControllerChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.openUrlInSafariViewController", - binaryMessenger: binaryMessenger) + name: + "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.openUrlInSafariViewController\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { openUrlInSafariViewControllerChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -134,7 +212,7 @@ class UrlLauncherApiSetup { api.openUrlInSafariViewController(url: urlArg) { result in switch result { case .success(let res): - reply(wrapResult(res.rawValue)) + reply(wrapResult(res)) case .failure(let error): reply(wrapError(error)) } @@ -145,8 +223,9 @@ class UrlLauncherApiSetup { } /// Closes the view controller opened by [openUrlInSafariViewController]. let closeSafariViewControllerChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.closeSafariViewController", - binaryMessenger: binaryMessenger) + name: + "dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.closeSafariViewController\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { closeSafariViewControllerChannel.setMessageHandler { _, reply in do { diff --git a/packages/url_launcher/url_launcher_ios/lib/src/messages.g.dart b/packages/url_launcher/url_launcher_ios/lib/src/messages.g.dart index a7e9a8c6e5a..b4963035976 100644 --- a/packages/url_launcher/url_launcher_ios/lib/src/messages.g.dart +++ b/packages/url_launcher/url_launcher_ios/lib/src/messages.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v11.0.1), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -11,6 +11,13 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + /// Possible outcomes of launching a URL. enum LaunchResult { /// The URL was successfully launched (or could be, for `canLaunchUrl`). @@ -35,121 +42,164 @@ enum InAppLoadResult { invalidUrl, } +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); + @override + void writeValue(WriteBuffer buffer, Object? value) { + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is LaunchResult) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else if (value is InAppLoadResult) { + buffer.putUint8(130); + writeValue(buffer, value.index); + } else { + super.writeValue(buffer, value); + } + } + + @override + Object? readValueOfType(int type, ReadBuffer buffer) { + switch (type) { + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : LaunchResult.values[value]; + case 130: + final int? value = readValue(buffer) as int?; + return value == null ? null : InAppLoadResult.values[value]; + default: + return super.readValueOfType(type, buffer); + } + } +} + class UrlLauncherApi { /// Constructor for [UrlLauncherApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - UrlLauncherApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + UrlLauncherApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; - static const MessageCodec codec = StandardMessageCodec(); + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + final String pigeonVar_messageChannelSuffix; /// Checks whether a URL can be loaded. - Future canLaunchUrl(String arg_url) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.canLaunchUrl', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_url]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future canLaunchUrl(String url) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.canLaunchUrl$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([url]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); - } else if (replyList[0] == null) { + } else if (pigeonVar_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return LaunchResult.values[replyList[0]! as int]; + return (pigeonVar_replyList[0] as LaunchResult?)!; } } /// Opens the URL externally, returning the status of launching it. - Future launchUrl( - String arg_url, bool arg_universalLinksOnly) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.launchUrl', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_url, arg_universalLinksOnly]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future launchUrl(String url, bool universalLinksOnly) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.launchUrl$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = await pigeonVar_channel + .send([url, universalLinksOnly]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); - } else if (replyList[0] == null) { + } else if (pigeonVar_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return LaunchResult.values[replyList[0]! as int]; + return (pigeonVar_replyList[0] as LaunchResult?)!; } } /// Opens the URL in an in-app SFSafariViewController, returning the results /// of loading it. - Future openUrlInSafariViewController(String arg_url) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.openUrlInSafariViewController', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_url]) as List?; - if (replyList == null) { + Future openUrlInSafariViewController(String url) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.openUrlInSafariViewController$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([url]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else if (replyList[0] == null) { + } else if (pigeonVar_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return InAppLoadResult.values[replyList[0]! as int]; + return (pigeonVar_replyList[0] as InAppLoadResult?)!; } } /// Closes the view controller opened by [openUrlInSafariViewController]. Future closeSafariViewController() async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.closeSafariViewController', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel.send(null) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_ios.UrlLauncherApi.closeSafariViewController$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send(null) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); } else { return; diff --git a/packages/url_launcher/url_launcher_ios/pubspec.yaml b/packages/url_launcher/url_launcher_ios/pubspec.yaml index 684bd9e4242..751aca7f8f8 100644 --- a/packages/url_launcher/url_launcher_ios/pubspec.yaml +++ b/packages/url_launcher/url_launcher_ios/pubspec.yaml @@ -26,7 +26,7 @@ dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 - pigeon: ^11.0.1 + pigeon: ^22.6.4 plugin_platform_interface: ^2.1.7 test: ^1.16.3 diff --git a/packages/url_launcher/url_launcher_macos/lib/src/messages.g.dart b/packages/url_launcher/url_launcher_macos/lib/src/messages.g.dart index c519b7d6bd1..15252ef6e5e 100644 --- a/packages/url_launcher/url_launcher_macos/lib/src/messages.g.dart +++ b/packages/url_launcher/url_launcher_macos/lib/src/messages.g.dart @@ -1,9 +1,9 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v10.1.3), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon -// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import +// ignore_for_file: public_member_api_docs, non_constant_identifier_names, avoid_as, unused_import, unnecessary_parenthesis, prefer_null_aware_operators, omit_local_variable_types, unused_shown_name, unnecessary_import, no_leading_underscores_for_local_identifiers import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -11,6 +11,13 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; +PlatformException _createConnectionError(String channelName) { + return PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel: "$channelName".', + ); +} + /// Possible error conditions for [UrlLauncherApi] calls. enum UrlLauncherError { /// The URL could not be parsed as an NSURL. @@ -31,7 +38,7 @@ class UrlLauncherBoolResult { Object encode() { return [ value, - error?.index, + error, ]; } @@ -39,18 +46,23 @@ class UrlLauncherBoolResult { result as List; return UrlLauncherBoolResult( value: result[0]! as bool, - error: - result[1] != null ? UrlLauncherError.values[result[1]! as int] : null, + error: result[1] as UrlLauncherError?, ); } } -class _UrlLauncherApiCodec extends StandardMessageCodec { - const _UrlLauncherApiCodec(); +class _PigeonCodec extends StandardMessageCodec { + const _PigeonCodec(); @override void writeValue(WriteBuffer buffer, Object? value) { - if (value is UrlLauncherBoolResult) { - buffer.putUint8(128); + if (value is int) { + buffer.putUint8(4); + buffer.putInt64(value); + } else if (value is UrlLauncherError) { + buffer.putUint8(129); + writeValue(buffer, value.index); + } else if (value is UrlLauncherBoolResult) { + buffer.putUint8(130); writeValue(buffer, value.encode()); } else { super.writeValue(buffer, value); @@ -60,7 +72,10 @@ class _UrlLauncherApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 129: + final int? value = readValue(buffer) as int?; + return value == null ? null : UrlLauncherError.values[value]; + case 130: return UrlLauncherBoolResult.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -72,65 +87,74 @@ class UrlLauncherApi { /// Constructor for [UrlLauncherApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default /// BinaryMessenger will be used which routes to the host platform. - UrlLauncherApi({BinaryMessenger? binaryMessenger}) - : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; + UrlLauncherApi( + {BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = + messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); - static const MessageCodec codec = _UrlLauncherApiCodec(); + final String pigeonVar_messageChannelSuffix; /// Returns a true result if the URL can definitely be launched. - Future canLaunchUrl(String arg_url) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.UrlLauncherApi.canLaunchUrl', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_url]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future canLaunchUrl(String url) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_macos.UrlLauncherApi.canLaunchUrl$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([url]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); - } else if (replyList[0] == null) { + } else if (pigeonVar_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as UrlLauncherBoolResult?)!; + return (pigeonVar_replyList[0] as UrlLauncherBoolResult?)!; } } /// Opens the URL externally, returning a true result if successful. - Future launchUrl(String arg_url) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.UrlLauncherApi.launchUrl', codec, - binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_url]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { + Future launchUrl(String url) async { + final String pigeonVar_channelName = + 'dev.flutter.pigeon.url_launcher_macos.UrlLauncherApi.launchUrl$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = + BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final List? pigeonVar_replyList = + await pigeonVar_channel.send([url]) as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], ); - } else if (replyList[0] == null) { + } else if (pigeonVar_replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyList[0] as UrlLauncherBoolResult?)!; + return (pigeonVar_replyList[0] as UrlLauncherBoolResult?)!; } } } diff --git a/packages/url_launcher/url_launcher_macos/macos/url_launcher_macos/Sources/url_launcher_macos/messages.g.swift b/packages/url_launcher/url_launcher_macos/macos/url_launcher_macos/Sources/url_launcher_macos/messages.g.swift index bada84a91ad..01be19b92f5 100644 --- a/packages/url_launcher/url_launcher_macos/macos/url_launcher_macos/Sources/url_launcher_macos/messages.g.swift +++ b/packages/url_launcher/url_launcher_macos/macos/url_launcher_macos/Sources/url_launcher_macos/messages.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v10.1.3), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,11 +14,36 @@ import Foundation #error("Unsupported platform.") #endif +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + private func wrapResult(_ result: Any?) -> [Any?] { return [result] } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -33,6 +58,10 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func isNullish(_ value: Any?) -> Bool { + return value is NSNull || value == nil +} + private func nilOrValue(_ value: Any?) -> T? { if value is NSNull { return nil } return value as! T? @@ -51,13 +80,10 @@ struct UrlLauncherBoolResult { var value: Bool var error: UrlLauncherError? = nil - static func fromList(_ list: [Any?]) -> UrlLauncherBoolResult? { - let value = list[0] as! Bool - var error: UrlLauncherError? = nil - let errorEnumVal: Int? = nilOrValue(list[1]) - if let errorRawValue = errorEnumVal { - error = UrlLauncherError(rawValue: errorRawValue)! - } + // swift-format-ignore: AlwaysUseLowerCamelCase + static func fromList(_ pigeonVar_list: [Any?]) -> UrlLauncherBoolResult? { + let value = pigeonVar_list[0] as! Bool + let error: UrlLauncherError? = nilOrValue(pigeonVar_list[1]) return UrlLauncherBoolResult( value: value, @@ -67,14 +93,21 @@ struct UrlLauncherBoolResult { func toList() -> [Any?] { return [ value, - error?.rawValue, + error, ] } } -private class UrlLauncherApiCodecReader: FlutterStandardReader { + +private class messagesPigeonCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { - case 128: + case 129: + let enumResultAsInt: Int? = nilOrValue(self.readValue() as! Int?) + if let enumResultAsInt = enumResultAsInt { + return UrlLauncherError(rawValue: enumResultAsInt) + } + return nil + case 130: return UrlLauncherBoolResult.fromList(self.readValue() as! [Any?]) default: return super.readValue(ofType: type) @@ -82,10 +115,13 @@ private class UrlLauncherApiCodecReader: FlutterStandardReader { } } -private class UrlLauncherApiCodecWriter: FlutterStandardWriter { +private class messagesPigeonCodecWriter: FlutterStandardWriter { override func writeValue(_ value: Any) { - if let value = value as? UrlLauncherBoolResult { - super.writeByte(128) + if let value = value as? UrlLauncherError { + super.writeByte(129) + super.writeValue(value.rawValue) + } else if let value = value as? UrlLauncherBoolResult { + super.writeByte(130) super.writeValue(value.toList()) } else { super.writeValue(value) @@ -93,18 +129,18 @@ private class UrlLauncherApiCodecWriter: FlutterStandardWriter { } } -private class UrlLauncherApiCodecReaderWriter: FlutterStandardReaderWriter { +private class messagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { override func reader(with data: Data) -> FlutterStandardReader { - return UrlLauncherApiCodecReader(data: data) + return messagesPigeonCodecReader(data: data) } override func writer(with data: NSMutableData) -> FlutterStandardWriter { - return UrlLauncherApiCodecWriter(data: data) + return messagesPigeonCodecWriter(data: data) } } -class UrlLauncherApiCodec: FlutterStandardMessageCodec { - static let shared = UrlLauncherApiCodec(readerWriter: UrlLauncherApiCodecReaderWriter()) +class messagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = messagesPigeonCodec(readerWriter: messagesPigeonCodecReaderWriter()) } /// Generated protocol from Pigeon that represents a handler of messages from Flutter. @@ -117,14 +153,16 @@ protocol UrlLauncherApi { /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. class UrlLauncherApiSetup { - /// The codec used by UrlLauncherApi. - static var codec: FlutterStandardMessageCodec { UrlLauncherApiCodec.shared } + static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `UrlLauncherApi` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: UrlLauncherApi?) { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: UrlLauncherApi?, messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" /// Returns a true result if the URL can definitely be launched. let canLaunchUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.UrlLauncherApi.canLaunchUrl", binaryMessenger: binaryMessenger, - codec: codec) + name: "dev.flutter.pigeon.url_launcher_macos.UrlLauncherApi.canLaunchUrl\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { canLaunchUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] @@ -141,8 +179,8 @@ class UrlLauncherApiSetup { } /// Opens the URL externally, returning a true result if successful. let launchUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.UrlLauncherApi.launchUrl", binaryMessenger: binaryMessenger, - codec: codec) + name: "dev.flutter.pigeon.url_launcher_macos.UrlLauncherApi.launchUrl\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec) if let api = api { launchUrlChannel.setMessageHandler { message, reply in let args = message as! [Any?] diff --git a/packages/url_launcher/url_launcher_macos/pubspec.yaml b/packages/url_launcher/url_launcher_macos/pubspec.yaml index d5e29fc0e9d..3ba970deb28 100644 --- a/packages/url_launcher/url_launcher_macos/pubspec.yaml +++ b/packages/url_launcher/url_launcher_macos/pubspec.yaml @@ -25,7 +25,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - pigeon: ^10.1.3 + pigeon: ^22.6.4 test: ^1.16.3 topics: From f074d012dbaab04ed40334a051003a1573c3f9f4 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 4 Dec 2024 14:52:16 -0500 Subject: [PATCH 2/6] Upadate generated mocks --- .../test/url_launcher_ios_test.mocks.dart | 52 +++++++++++-------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/packages/url_launcher/url_launcher_ios/test/url_launcher_ios_test.mocks.dart b/packages/url_launcher/url_launcher_ios/test/url_launcher_ios_test.mocks.dart index 383599f5209..ce90785fdec 100644 --- a/packages/url_launcher/url_launcher_ios/test/url_launcher_ios_test.mocks.dart +++ b/packages/url_launcher/url_launcher_ios/test/url_launcher_ios_test.mocks.dart @@ -3,9 +3,10 @@ // Do not manually edit this file. // ignore_for_file: no_leading_underscores_for_library_prefixes -import 'dart:async' as _i3; +import 'dart:async' as _i4; import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i3; import 'package:url_launcher_ios/src/messages.g.dart' as _i2; // ignore_for_file: type=lint @@ -30,52 +31,59 @@ class MockUrlLauncherApi extends _i1.Mock implements _i2.UrlLauncherApi { } @override - _i3.Future<_i2.LaunchResult> canLaunchUrl(String? arg_url) => - (super.noSuchMethod( + String get pigeonVar_messageChannelSuffix => (super.noSuchMethod( + Invocation.getter(#pigeonVar_messageChannelSuffix), + returnValue: _i3.dummyValue( + this, + Invocation.getter(#pigeonVar_messageChannelSuffix), + ), + ) as String); + + @override + _i4.Future<_i2.LaunchResult> canLaunchUrl(String? url) => (super.noSuchMethod( Invocation.method( #canLaunchUrl, - [arg_url], + [url], ), returnValue: - _i3.Future<_i2.LaunchResult>.value(_i2.LaunchResult.success), - ) as _i3.Future<_i2.LaunchResult>); + _i4.Future<_i2.LaunchResult>.value(_i2.LaunchResult.success), + ) as _i4.Future<_i2.LaunchResult>); @override - _i3.Future<_i2.LaunchResult> launchUrl( - String? arg_url, - bool? arg_universalLinksOnly, + _i4.Future<_i2.LaunchResult> launchUrl( + String? url, + bool? universalLinksOnly, ) => (super.noSuchMethod( Invocation.method( #launchUrl, [ - arg_url, - arg_universalLinksOnly, + url, + universalLinksOnly, ], ), returnValue: - _i3.Future<_i2.LaunchResult>.value(_i2.LaunchResult.success), - ) as _i3.Future<_i2.LaunchResult>); + _i4.Future<_i2.LaunchResult>.value(_i2.LaunchResult.success), + ) as _i4.Future<_i2.LaunchResult>); @override - _i3.Future<_i2.InAppLoadResult> openUrlInSafariViewController( - String? arg_url) => + _i4.Future<_i2.InAppLoadResult> openUrlInSafariViewController(String? url) => (super.noSuchMethod( Invocation.method( #openUrlInSafariViewController, - [arg_url], + [url], ), returnValue: - _i3.Future<_i2.InAppLoadResult>.value(_i2.InAppLoadResult.success), - ) as _i3.Future<_i2.InAppLoadResult>); + _i4.Future<_i2.InAppLoadResult>.value(_i2.InAppLoadResult.success), + ) as _i4.Future<_i2.InAppLoadResult>); @override - _i3.Future closeSafariViewController() => (super.noSuchMethod( + _i4.Future closeSafariViewController() => (super.noSuchMethod( Invocation.method( #closeSafariViewController, [], ), - returnValue: _i3.Future.value(), - returnValueForMissingStub: _i3.Future.value(), - ) as _i3.Future); + returnValue: _i4.Future.value(), + returnValueForMissingStub: _i4.Future.value(), + ) as _i4.Future); } From 7840a1610e0d0829dcde4c496a77f46b457e04c1 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 4 Dec 2024 14:53:34 -0500 Subject: [PATCH 3/6] Manual fixes --- .../test/ios_platform_images_test.dart | 8 ++++++++ .../test/path_provider_foundation_test.dart | 2 +- .../url_launcher_macos/test/url_launcher_macos_test.dart | 8 ++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/ios_platform_images/test/ios_platform_images_test.dart b/packages/ios_platform_images/test/ios_platform_images_test.dart index 04605c1e5cb..9a873688c31 100644 --- a/packages/ios_platform_images/test/ios_platform_images_test.dart +++ b/packages/ios_platform_images/test/ios_platform_images_test.dart @@ -64,4 +64,12 @@ class FakePlatformImagesApi implements PlatformImagesApi { passedExtension = extension; return resolutionResult; } + + @override + // ignore: non_constant_identifier_names + BinaryMessenger? get pigeonVar_binaryMessenger => null; + + @override + // ignore: non_constant_identifier_names + String get pigeonVar_messageChannelSuffix => ''; } diff --git a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart b/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart index e13e182a413..4006af774f5 100644 --- a/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart +++ b/packages/path_provider/path_provider_foundation/test/path_provider_foundation_test.dart @@ -28,7 +28,7 @@ void main() { setUp(() async { testRoot = Directory.systemTemp.createTempSync(); mockApi = MockTestPathProviderApi(); - TestPathProviderApi.setup(mockApi); + TestPathProviderApi.setUp(mockApi); }); tearDown(() { diff --git a/packages/url_launcher/url_launcher_macos/test/url_launcher_macos_test.dart b/packages/url_launcher/url_launcher_macos/test/url_launcher_macos_test.dart index e9cc3c6c6dc..eb1c459956a 100644 --- a/packages/url_launcher/url_launcher_macos/test/url_launcher_macos_test.dart +++ b/packages/url_launcher/url_launcher_macos/test/url_launcher_macos_test.dart @@ -179,4 +179,12 @@ class _FakeUrlLauncherApi implements UrlLauncherApi { return UrlLauncherBoolResult(value: false); } } + + @override + // ignore: non_constant_identifier_names + BinaryMessenger? get pigeonVar_binaryMessenger => null; + + @override + // ignore: non_constant_identifier_names + String get pigeonVar_messageChannelSuffix => ''; } From 69671a82aa286922a35e4200937a28da3b0bd3ab Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Wed, 4 Dec 2024 16:10:03 -0500 Subject: [PATCH 4/6] Version bumps --- packages/ios_platform_images/CHANGELOG.md | 3 ++- packages/ios_platform_images/pubspec.yaml | 2 +- packages/path_provider/path_provider_foundation/CHANGELOG.md | 3 ++- packages/path_provider/path_provider_foundation/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_ios/CHANGELOG.md | 3 ++- packages/url_launcher/url_launcher_ios/pubspec.yaml | 2 +- packages/url_launcher/url_launcher_macos/CHANGELOG.md | 4 ++++ packages/url_launcher/url_launcher_macos/pubspec.yaml | 2 +- 8 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/ios_platform_images/CHANGELOG.md b/packages/ios_platform_images/CHANGELOG.md index 61e3b597f50..2dda63366d0 100644 --- a/packages/ios_platform_images/CHANGELOG.md +++ b/packages/ios_platform_images/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 0.2.4+1 +* Updates to Pigeon v22. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 0.2.4 diff --git a/packages/ios_platform_images/pubspec.yaml b/packages/ios_platform_images/pubspec.yaml index 6acc1a46dec..dc5925b42f7 100644 --- a/packages/ios_platform_images/pubspec.yaml +++ b/packages/ios_platform_images/pubspec.yaml @@ -2,7 +2,7 @@ name: ios_platform_images description: A plugin to share images between Flutter and iOS in add-to-app setups. repository: https://github.com/flutter/packages/tree/main/packages/ios_platform_images issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+ios_platform_images%22 -version: 0.2.4 +version: 0.2.4+1 environment: sdk: ^3.3.0 diff --git a/packages/path_provider/path_provider_foundation/CHANGELOG.md b/packages/path_provider/path_provider_foundation/CHANGELOG.md index 8846f5503ae..39374d87dcb 100644 --- a/packages/path_provider/path_provider_foundation/CHANGELOG.md +++ b/packages/path_provider/path_provider_foundation/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 2.4.1 +* Updates to Pigeon v22. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 2.4.0 diff --git a/packages/path_provider/path_provider_foundation/pubspec.yaml b/packages/path_provider/path_provider_foundation/pubspec.yaml index fe75da0d11b..02a4dcbdb4a 100644 --- a/packages/path_provider/path_provider_foundation/pubspec.yaml +++ b/packages/path_provider/path_provider_foundation/pubspec.yaml @@ -2,7 +2,7 @@ name: path_provider_foundation description: iOS and macOS implementation of the path_provider plugin repository: https://github.com/flutter/packages/tree/main/packages/path_provider/path_provider_foundation issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+path_provider%22 -version: 2.4.0 +version: 2.4.1 environment: sdk: ^3.3.0 diff --git a/packages/url_launcher/url_launcher_ios/CHANGELOG.md b/packages/url_launcher/url_launcher_ios/CHANGELOG.md index b0e3fa3f2dc..d0953fd6176 100644 --- a/packages/url_launcher/url_launcher_ios/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_ios/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 6.3.2 +* Updates to Pigeon v22. * Updates minimum supported SDK version to Flutter 3.19/Dart 3.3. ## 6.3.1 diff --git a/packages/url_launcher/url_launcher_ios/pubspec.yaml b/packages/url_launcher/url_launcher_ios/pubspec.yaml index 751aca7f8f8..2069aa0931e 100644 --- a/packages/url_launcher/url_launcher_ios/pubspec.yaml +++ b/packages/url_launcher/url_launcher_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_ios description: iOS implementation of the url_launcher plugin. repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 6.3.1 +version: 6.3.2 environment: sdk: ^3.3.0 diff --git a/packages/url_launcher/url_launcher_macos/CHANGELOG.md b/packages/url_launcher/url_launcher_macos/CHANGELOG.md index 2dcb7526387..5da4d7951ec 100644 --- a/packages/url_launcher/url_launcher_macos/CHANGELOG.md +++ b/packages/url_launcher/url_launcher_macos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.2.2 + +* Updates to Pigeon v22. + ## 3.2.1 * Adds privacy manifest. diff --git a/packages/url_launcher/url_launcher_macos/pubspec.yaml b/packages/url_launcher/url_launcher_macos/pubspec.yaml index 3ba970deb28..7f6505c702b 100644 --- a/packages/url_launcher/url_launcher_macos/pubspec.yaml +++ b/packages/url_launcher/url_launcher_macos/pubspec.yaml @@ -2,7 +2,7 @@ name: url_launcher_macos description: macOS implementation of the url_launcher plugin. repository: https://github.com/flutter/packages/tree/main/packages/url_launcher/url_launcher_macos issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+url_launcher%22 -version: 3.2.1 +version: 3.2.2 environment: sdk: ^3.3.0 From fd4e49549b2830c0c172a5e51a245912f26fe02c Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 5 Dec 2024 07:15:33 -0500 Subject: [PATCH 5/6] Fix Pigeon output path in ios_platform_images --- packages/ios_platform_images/pigeons/messages.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ios_platform_images/pigeons/messages.dart b/packages/ios_platform_images/pigeons/messages.dart index f45a914e19a..ce04b8f4058 100644 --- a/packages/ios_platform_images/pigeons/messages.dart +++ b/packages/ios_platform_images/pigeons/messages.dart @@ -7,7 +7,7 @@ import 'package:pigeon/pigeon.dart'; @ConfigurePigeon(PigeonOptions( dartOut: 'lib/src/messages.g.dart', swiftOut: - 'ios/ios_platform_images/Sources/ios_platform_messages/messages.g.swift', + 'ios/ios_platform_images/Sources/ios_platform_images/messages.g.swift', copyrightHeader: 'pigeons/copyright.txt', )) From 8190a9497424c156e75383043b8af2ad54aff069 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Thu, 5 Dec 2024 07:16:06 -0500 Subject: [PATCH 6/6] Regenerate Swift code --- .../ios_platform_images/messages.g.swift | 70 +++++++++++++------ 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/packages/ios_platform_images/ios/ios_platform_images/Sources/ios_platform_images/messages.g.swift b/packages/ios_platform_images/ios/ios_platform_images/Sources/ios_platform_images/messages.g.swift index 30e14c74242..761f5082bc6 100644 --- a/packages/ios_platform_images/ios/ios_platform_images/Sources/ios_platform_images/messages.g.swift +++ b/packages/ios_platform_images/ios/ios_platform_images/Sources/ios_platform_images/messages.g.swift @@ -1,7 +1,7 @@ // Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Autogenerated from Pigeon (v11.0.1), do not edit directly. +// Autogenerated from Pigeon (v22.6.4), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,8 +14,22 @@ import Foundation #error("Unsupported platform.") #endif -private func isNullish(_ value: Any?) -> Bool { - return value is NSNull || value == nil +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Any? + + init(code: String, message: String?, details: Any?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + return + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } } private func wrapResult(_ result: Any?) -> [Any?] { @@ -23,6 +37,13 @@ private func wrapResult(_ result: Any?) -> [Any?] { } private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } if let flutterError = error as? FlutterError { return [ flutterError.code, @@ -37,6 +58,10 @@ private func wrapError(_ error: Any) -> [Any?] { ] } +private func isNullish(_ value: Any?) -> Bool { + return value is NSNull || value == nil +} + private func nilOrValue(_ value: Any?) -> T? { if value is NSNull { return nil } return value as! T? @@ -51,9 +76,10 @@ struct PlatformImageData { /// The image's scale factor. var scale: Double - static func fromList(_ list: [Any?]) -> PlatformImageData? { - let data = list[0] as! FlutterStandardTypedData - let scale = list[1] as! Double + // swift-format-ignore: AlwaysUseLowerCamelCase + static func fromList(_ pigeonVar_list: [Any?]) -> PlatformImageData? { + let data = pigeonVar_list[0] as! FlutterStandardTypedData + let scale = pigeonVar_list[1] as! Double return PlatformImageData( data: data, @@ -67,10 +93,11 @@ struct PlatformImageData { ] } } -private class PlatformImagesApiCodecReader: FlutterStandardReader { + +private class messagesPigeonCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { - case 128: + case 129: return PlatformImageData.fromList(self.readValue() as! [Any?]) default: return super.readValue(ofType: type) @@ -78,10 +105,10 @@ private class PlatformImagesApiCodecReader: FlutterStandardReader { } } -private class PlatformImagesApiCodecWriter: FlutterStandardWriter { +private class messagesPigeonCodecWriter: FlutterStandardWriter { override func writeValue(_ value: Any) { if let value = value as? PlatformImageData { - super.writeByte(128) + super.writeByte(129) super.writeValue(value.toList()) } else { super.writeValue(value) @@ -89,18 +116,18 @@ private class PlatformImagesApiCodecWriter: FlutterStandardWriter { } } -private class PlatformImagesApiCodecReaderWriter: FlutterStandardReaderWriter { +private class messagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { override func reader(with data: Data) -> FlutterStandardReader { - return PlatformImagesApiCodecReader(data: data) + return messagesPigeonCodecReader(data: data) } override func writer(with data: NSMutableData) -> FlutterStandardWriter { - return PlatformImagesApiCodecWriter(data: data) + return messagesPigeonCodecWriter(data: data) } } -class PlatformImagesApiCodec: FlutterStandardMessageCodec { - static let shared = PlatformImagesApiCodec(readerWriter: PlatformImagesApiCodecReaderWriter()) +class messagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = messagesPigeonCodec(readerWriter: messagesPigeonCodecReaderWriter()) } /// Generated protocol from Pigeon that represents a handler of messages from Flutter. @@ -115,14 +142,17 @@ protocol PlatformImagesApi { /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. class PlatformImagesApiSetup { - /// The codec used by PlatformImagesApi. - static var codec: FlutterStandardMessageCodec { PlatformImagesApiCodec.shared } + static var codec: FlutterStandardMessageCodec { messagesPigeonCodec.shared } /// Sets up an instance of `PlatformImagesApi` to handle messages through the `binaryMessenger`. - static func setUp(binaryMessenger: FlutterBinaryMessenger, api: PlatformImagesApi?) { + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: PlatformImagesApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" /// Returns the URL for the given resource, or null if no such resource is /// found. let resolveUrlChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl", + name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.resolveUrl\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { resolveUrlChannel.setMessageHandler { message, reply in @@ -142,7 +172,7 @@ class PlatformImagesApiSetup { /// Returns the data for the image resource with the given name, or null if /// no such resource is found. let loadImageChannel = FlutterBasicMessageChannel( - name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage", + name: "dev.flutter.pigeon.ios_platform_images.PlatformImagesApi.loadImage\(channelSuffix)", binaryMessenger: binaryMessenger, codec: codec) if let api = api { loadImageChannel.setMessageHandler { message, reply in