From 6d74c8ac3bd65f1488238ab1ac82f4d07d9181cc Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 17:46:03 +0000 Subject: [PATCH 01/10] Update file_selector_ios to the latest pigeon The current version is incompatible with the latest analyzer, which is a blocker for getting the latest mockito, which is a blocker for getting the latest test_api, which is pinned by flutter_test and will be breaking in the next package roll. Also update to the latest `build_runner` and use a range constraint since the older `build_runner` is also incompatible with the latest `analyzer`. --- .../file_selector_ios/CHANGELOG.md | 4 + .../ios/Classes/messages.g.h | 17 ++-- .../ios/Classes/messages.g.m | 88 ++++++++----------- .../file_selector_ios/lib/src/messages.g.dart | 48 +++++----- .../file_selector_ios/pubspec.yaml | 7 +- .../file_selector_ios/test/test_api.g.dart | 23 ++--- 6 files changed, 83 insertions(+), 104 deletions(-) diff --git a/packages/file_selector/file_selector_ios/CHANGELOG.md b/packages/file_selector/file_selector_ios/CHANGELOG.md index f79cb9282ff..207a2e29930 100644 --- a/packages/file_selector/file_selector_ios/CHANGELOG.md +++ b/packages/file_selector/file_selector_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Update to `pigeon` version 9. + ## 0.5.1+1 * Clarifies explanation of endorsement in README. diff --git a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h index a04b41129a7..240ab2535ab 100644 --- a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h +++ b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h @@ -1,9 +1,11 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import + @protocol FlutterBinaryMessenger; @protocol FlutterMessageCodec; @class FlutterError; @@ -17,21 +19,18 @@ NS_ASSUME_NONNULL_BEGIN /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithUtis:(NSArray *)utis - allowMultiSelection:(NSNumber *)allowMultiSelection; -@property(nonatomic, strong) NSArray *utis; -@property(nonatomic, strong) NSNumber *allowMultiSelection; + allowMultiSelection:(NSNumber *)allowMultiSelection; +@property(nonatomic, strong) NSArray * utis; +@property(nonatomic, strong) NSNumber * allowMultiSelection; @end /// The codec used by FFSFileSelectorApi. NSObject *FFSFileSelectorApiGetCodec(void); @protocol FFSFileSelectorApi -- (void)openFileSelectorWithConfig:(FFSFileSelectorConfig *)config - completion:(void (^)(NSArray *_Nullable, - FlutterError *_Nullable))completion; +- (void)openFileSelectorWithConfig:(FFSFileSelectorConfig *)config completion:(void (^)(NSArray *_Nullable, FlutterError *_Nullable))completion; @end -extern void FFSFileSelectorApiSetup(id binaryMessenger, - NSObject *_Nullable api); +extern void FFSFileSelectorApiSetup(id binaryMessenger, NSObject *_Nullable api); NS_ASSUME_NONNULL_END diff --git a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m index d4046d28129..46353f9ba50 100644 --- a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m +++ b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m @@ -1,8 +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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), do not edit directly. // See also: https://pub.dev/packages/pigeon + #import "messages.g.h" #import @@ -10,23 +11,13 @@ #error File requires ARC to be enabled. #endif -static NSDictionary *wrapResult(id result, FlutterError *error) { - NSDictionary *errorDict = (NSDictionary *)[NSNull null]; +static NSArray *wrapResult(id result, FlutterError *error) { if (error) { - errorDict = @{ - @"code" : (error.code ?: [NSNull null]), - @"message" : (error.message ?: [NSNull null]), - @"details" : (error.details ?: [NSNull null]), - }; + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; } - return @{ - @"result" : (result ?: [NSNull null]), - @"error" : errorDict, - }; -} -static id GetNullableObject(NSDictionary *dict, id key) { - id result = dict[key]; - return (result == [NSNull null]) ? nil : result; + return @[ result ?: [NSNull null] ]; } static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { id result = array[key]; @@ -34,35 +25,35 @@ static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { } @interface FFSFileSelectorConfig () -+ (FFSFileSelectorConfig *)fromMap:(NSDictionary *)dict; -+ (nullable FFSFileSelectorConfig *)nullableFromMap:(NSDictionary *)dict; -- (NSDictionary *)toMap; ++ (FFSFileSelectorConfig *)fromList:(NSArray *)list; ++ (nullable FFSFileSelectorConfig *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; @end @implementation FFSFileSelectorConfig + (instancetype)makeWithUtis:(NSArray *)utis - allowMultiSelection:(NSNumber *)allowMultiSelection { - FFSFileSelectorConfig *pigeonResult = [[FFSFileSelectorConfig alloc] init]; + allowMultiSelection:(NSNumber *)allowMultiSelection { + FFSFileSelectorConfig* pigeonResult = [[FFSFileSelectorConfig alloc] init]; pigeonResult.utis = utis; pigeonResult.allowMultiSelection = allowMultiSelection; return pigeonResult; } -+ (FFSFileSelectorConfig *)fromMap:(NSDictionary *)dict { ++ (FFSFileSelectorConfig *)fromList:(NSArray *)list { FFSFileSelectorConfig *pigeonResult = [[FFSFileSelectorConfig alloc] init]; - pigeonResult.utis = GetNullableObject(dict, @"utis"); + pigeonResult.utis = GetNullableObjectAtIndex(list, 0); NSAssert(pigeonResult.utis != nil, @""); - pigeonResult.allowMultiSelection = GetNullableObject(dict, @"allowMultiSelection"); + pigeonResult.allowMultiSelection = GetNullableObjectAtIndex(list, 1); NSAssert(pigeonResult.allowMultiSelection != nil, @""); return pigeonResult; } -+ (nullable FFSFileSelectorConfig *)nullableFromMap:(NSDictionary *)dict { - return (dict) ? [FFSFileSelectorConfig fromMap:dict] : nil; ++ (nullable FFSFileSelectorConfig *)nullableFromList:(NSArray *)list { + return (list) ? [FFSFileSelectorConfig fromList:list] : nil; } -- (NSDictionary *)toMap { - return @{ - @"utis" : (self.utis ?: [NSNull null]), - @"allowMultiSelection" : (self.allowMultiSelection ?: [NSNull null]), - }; +- (NSArray *)toList { + return @[ + (self.utis ?: [NSNull null]), + (self.allowMultiSelection ?: [NSNull null]), + ]; } @end @@ -71,9 +62,8 @@ @interface FFSFileSelectorApiCodecReader : FlutterStandardReader @implementation FFSFileSelectorApiCodecReader - (nullable id)readValueOfType:(UInt8)type { switch (type) { - case 128: - return [FFSFileSelectorConfig fromMap:[self readValue]]; - + case 128: + return [FFSFileSelectorConfig fromList:[self readValue]]; default: return [super readValueOfType:type]; } @@ -86,7 +76,7 @@ @implementation FFSFileSelectorApiCodecWriter - (void)writeValue:(id)value { if ([value isKindOfClass:[FFSFileSelectorConfig class]]) { [self writeByte:128]; - [self writeValue:[value toMap]]; + [self writeValue:[value toList]]; } else { [super writeValue:value]; } @@ -105,36 +95,30 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { @end NSObject *FFSFileSelectorApiGetCodec() { - static dispatch_once_t sPred = 0; static FlutterStandardMessageCodec *sSharedObject = nil; + static dispatch_once_t sPred = 0; dispatch_once(&sPred, ^{ - FFSFileSelectorApiCodecReaderWriter *readerWriter = - [[FFSFileSelectorApiCodecReaderWriter alloc] init]; + FFSFileSelectorApiCodecReaderWriter *readerWriter = [[FFSFileSelectorApiCodecReaderWriter alloc] init]; sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; }); return sSharedObject; } -void FFSFileSelectorApiSetup(id binaryMessenger, - NSObject *api) { +void FFSFileSelectorApiSetup(id binaryMessenger, NSObject *api) { { - FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.FileSelectorApi.openFile" + FlutterBasicMessageChannel *channel = + [[FlutterBasicMessageChannel alloc] + initWithName:@"dev.flutter.pigeon.FileSelectorApi.openFile" binaryMessenger:binaryMessenger - codec:FFSFileSelectorApiGetCodec()]; + codec:FFSFileSelectorApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(openFileSelectorWithConfig:completion:)], - @"FFSFileSelectorApi api (%@) doesn't respond to " - @"@selector(openFileSelectorWithConfig:completion:)", - api); + NSCAssert([api respondsToSelector:@selector(openFileSelectorWithConfig:completion:)], @"FFSFileSelectorApi api (%@) doesn't respond to @selector(openFileSelectorWithConfig:completion:)", api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FFSFileSelectorConfig *arg_config = GetNullableObjectAtIndex(args, 0); - [api openFileSelectorWithConfig:arg_config - completion:^(NSArray *_Nullable output, - FlutterError *_Nullable error) { - callback(wrapResult(output, error)); - }]; + [api openFileSelectorWithConfig:arg_config completion:^(NSArray *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; }]; } else { [channel setMessageHandler:nil]; diff --git a/packages/file_selector/file_selector_ios/lib/src/messages.g.dart b/packages/file_selector/file_selector_ios/lib/src/messages.g.dart index 42184740358..3431f426266 100644 --- a/packages/file_selector/file_selector_ios/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_ios/lib/src/messages.g.dart @@ -1,13 +1,14 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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 + import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; class FileSelectorConfig { @@ -17,20 +18,21 @@ class FileSelectorConfig { }); List utis; + bool allowMultiSelection; Object encode() { - final Map pigeonMap = {}; - pigeonMap['utis'] = utis; - pigeonMap['allowMultiSelection'] = allowMultiSelection; - return pigeonMap; + return [ + utis, + allowMultiSelection, + ]; } - static FileSelectorConfig decode(Object message) { - final Map pigeonMap = message as Map; + static FileSelectorConfig decode(Object result) { + result as List; return FileSelectorConfig( - utis: (pigeonMap['utis'] as List?)!.cast(), - allowMultiSelection: pigeonMap['allowMultiSelection']! as bool, + utis: (result[0] as List?)!.cast(), + allowMultiSelection: result[1]! as bool, ); } } @@ -50,9 +52,8 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return FileSelectorConfig.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -65,7 +66,6 @@ class FileSelectorApi { /// BinaryMessenger will be used which routes to the host platform. FileSelectorApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _FileSelectorApiCodec(); @@ -74,28 +74,26 @@ class FileSelectorApi { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.openFile', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = - await channel.send([arg_config]) as Map?; - if (replyMap == null) { + final List? replyList = + await channel.send([arg_config]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); - } else if (replyMap['result'] == null) { + } else if (replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyMap['result'] as List?)!.cast(); + return (replyList[0] as List?)!.cast(); } } } diff --git a/packages/file_selector/file_selector_ios/pubspec.yaml b/packages/file_selector/file_selector_ios/pubspec.yaml index 59c1daa2391..077fe8e717e 100644 --- a/packages/file_selector/file_selector_ios/pubspec.yaml +++ b/packages/file_selector/file_selector_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_ios description: iOS implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.5.1+1 +version: 0.5.2 environment: sdk: ">=2.18.0 <4.0.0" @@ -22,9 +22,8 @@ dependencies: sdk: flutter dev_dependencies: - build_runner: 2.1.11 + build_runner: ^2.3.0 flutter_test: sdk: flutter mockito: 5.3.2 - pigeon: ^3.2.5 - + pigeon: ^9.1.0 diff --git a/packages/file_selector/file_selector_ios/test/test_api.g.dart b/packages/file_selector/file_selector_ios/test/test_api.g.dart index 69f6c19d5a2..e38157c8706 100644 --- a/packages/file_selector/file_selector_ios/test/test_api.g.dart +++ b/packages/file_selector/file_selector_ios/test/test_api.g.dart @@ -1,19 +1,16 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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: avoid_relative_lib_imports import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -// This line has been hand-edited due to -// https://github.com/flutter/flutter/issues/97744 -// ignore: directives_ordering import 'package:file_selector_ios/src/messages.g.dart'; class _TestFileSelectorApiCodec extends StandardMessageCodec { @@ -31,9 +28,8 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return FileSelectorConfig.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -44,8 +40,8 @@ abstract class TestFileSelectorApi { static const MessageCodec codec = _TestFileSelectorApiCodec(); Future> openFile(FileSelectorConfig config); - static void setup(TestFileSelectorApi? api, - {BinaryMessenger? binaryMessenger}) { + + static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.openFile', codec, @@ -55,14 +51,13 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null.'); final List args = (message as List?)!; - final FileSelectorConfig? arg_config = - (args[0] as FileSelectorConfig?); + final FileSelectorConfig? arg_config = (args[0] as FileSelectorConfig?); assert(arg_config != null, 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null, expected non-null FileSelectorConfig.'); final List output = await api.openFile(arg_config!); - return {'result': output}; + return [output]; }); } } From c5695e07b98b2a442bc52400004e8124b611ed0d Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 17:54:01 +0000 Subject: [PATCH 02/10] Update version in _macos --- .../file_selector_macos/CHANGELOG.md | 4 + .../lib/src/messages.g.dart | 12 ++- .../macos/Classes/messages.g.swift | 82 +++++++++++-------- .../file_selector_macos/pubspec.yaml | 4 +- .../test/messages_test.g.dart | 18 ++-- 5 files changed, 67 insertions(+), 53 deletions(-) diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md index 7bebb74020f..f9e1ba55909 100644 --- a/packages/file_selector/file_selector_macos/CHANGELOG.md +++ b/packages/file_selector/file_selector_macos/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Update to `pigeon` version 9. + ## 0.9.0+6 * Clarifies explanation of endorsement in README. diff --git a/packages/file_selector/file_selector_macos/lib/src/messages.g.dart b/packages/file_selector/file_selector_macos/lib/src/messages.g.dart index 5f1daf94283..3e7c25b674c 100644 --- a/packages/file_selector/file_selector_macos/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_macos/lib/src/messages.g.dart @@ -1,9 +1,10 @@ // 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 (v4.2.14), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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 + import 'dart:async'; import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; @@ -144,15 +145,12 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return AllowedTypes.decode(readValue(buffer)!); - - case 129: + case 129: return OpenPanelOptions.decode(readValue(buffer)!); - - case 130: + case 130: return SavePanelOptions.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } diff --git a/packages/file_selector/file_selector_macos/macos/Classes/messages.g.swift b/packages/file_selector/file_selector_macos/macos/Classes/messages.g.swift index 75753d96252..5303e818044 100644 --- a/packages/file_selector/file_selector_macos/macos/Classes/messages.g.swift +++ b/packages/file_selector/file_selector_macos/macos/Classes/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 (v4.2.14), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), do not edit directly. // See also: https://pub.dev/packages/pigeon import Foundation @@ -14,7 +14,25 @@ import FlutterMacOS #endif -/// Generated class from Pigeon. + +private func wrapResult(_ result: Any?) -> [Any?] { + return [result] +} + +private func wrapError(_ error: Any) -> [Any?] { + if let flutterError = error as? FlutterError { + return [ + flutterError.code, + flutterError.message, + flutterError.details + ] + } + return [ + "\(error)", + "\(type(of: error))", + "Stacktrace: \(Thread.callStackSymbols)" + ] +} /// A Pigeon representation of the macOS portion of an `XTypeGroup`. /// @@ -24,7 +42,7 @@ struct AllowedTypes { var mimeTypes: [String?] var utis: [String?] - static func fromList(_ list: [Any?]) -> AllowedTypes? { + static func fromList(_ list: [Any]) -> AllowedTypes? { let extensions = list[0] as! [String?] let mimeTypes = list[1] as! [String?] let utis = list[2] as! [String?] @@ -56,14 +74,14 @@ struct SavePanelOptions { var nameFieldStringValue: String? = nil var prompt: String? = nil - static func fromList(_ list: [Any?]) -> SavePanelOptions? { + static func fromList(_ list: [Any]) -> SavePanelOptions? { var allowedFileTypes: AllowedTypes? = nil - if let allowedFileTypesList = list[0] as? [Any?] { - allowedFileTypes = AllowedTypes.fromList(allowedFileTypesList) + if let allowedFileTypesList = list[0] as! [Any]? { + allowedFileTypes = AllowedTypes.fromList(allowedFileTypesList as [Any]) } - let directoryPath = list[1] as? String - let nameFieldStringValue = list[2] as? String - let prompt = list[3] as? String + let directoryPath = list[1] as! String? + let nameFieldStringValue = list[2] as! String? + let prompt = list[3] as! String? return SavePanelOptions( allowedFileTypes: allowedFileTypes, @@ -93,11 +111,11 @@ struct OpenPanelOptions { var canChooseFiles: Bool var baseOptions: SavePanelOptions - static func fromList(_ list: [Any?]) -> OpenPanelOptions? { + static func fromList(_ list: [Any]) -> OpenPanelOptions? { let allowsMultipleSelection = list[0] as! Bool let canChooseDirectories = list[1] as! Bool let canChooseFiles = list[2] as! Bool - let baseOptions = SavePanelOptions.fromList(list[3] as! [Any?])! + let baseOptions = SavePanelOptions.fromList(list[3] as! [Any])! return OpenPanelOptions( allowsMultipleSelection: allowsMultipleSelection, @@ -120,17 +138,17 @@ private class FileSelectorApiCodecReader: FlutterStandardReader { override func readValue(ofType type: UInt8) -> Any? { switch type { case 128: - return AllowedTypes.fromList(self.readValue() as! [Any]) + return AllowedTypes.fromList(self.readValue() as! [Any]) case 129: - return OpenPanelOptions.fromList(self.readValue() as! [Any]) + return OpenPanelOptions.fromList(self.readValue() as! [Any]) case 130: - return SavePanelOptions.fromList(self.readValue() as! [Any]) + return SavePanelOptions.fromList(self.readValue() as! [Any]) default: return super.readValue(ofType: type) - } } } + private class FileSelectorApiCodecWriter: FlutterStandardWriter { override func writeValue(_ value: Any) { if let value = value as? AllowedTypes { @@ -168,11 +186,11 @@ protocol FileSelectorApi { /// selected paths. /// /// An empty list corresponds to a cancelled selection. - func displayOpenPanel(options: OpenPanelOptions, completion: @escaping ([String?]) -> Void) + func displayOpenPanel(options: OpenPanelOptions, completion: @escaping (Result<[String?], Error>) -> Void) /// Shows a save panel with the given [options], returning the selected path. /// /// A null return corresponds to a cancelled save. - func displaySavePanel(options: SavePanelOptions, completion: @escaping (String?) -> Void) + func displaySavePanel(options: SavePanelOptions, completion: @escaping (Result) -> Void) } /// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. @@ -188,10 +206,15 @@ class FileSelectorApiSetup { let displayOpenPanelChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FileSelectorApi.displayOpenPanel", binaryMessenger: binaryMessenger, codec: codec) if let api = api { displayOpenPanelChannel.setMessageHandler { message, reply in - let args = message as! [Any?] + let args = message as! [Any] let optionsArg = args[0] as! OpenPanelOptions api.displayOpenPanel(options: optionsArg) { result in - reply(wrapResult(result)) + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } } } } else { @@ -203,10 +226,15 @@ class FileSelectorApiSetup { let displaySavePanelChannel = FlutterBasicMessageChannel(name: "dev.flutter.pigeon.FileSelectorApi.displaySavePanel", binaryMessenger: binaryMessenger, codec: codec) if let api = api { displaySavePanelChannel.setMessageHandler { message, reply in - let args = message as! [Any?] + let args = message as! [Any] let optionsArg = args[0] as! SavePanelOptions api.displaySavePanel(options: optionsArg) { result in - reply(wrapResult(result)) + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } } } } else { @@ -214,15 +242,3 @@ class FileSelectorApiSetup { } } } - -private func wrapResult(_ result: Any?) -> [Any?] { - return [result] -} - -private func wrapError(_ error: FlutterError) -> [Any?] { - return [ - error.code, - error.message, - error.details - ] -} diff --git a/packages/file_selector/file_selector_macos/pubspec.yaml b/packages/file_selector/file_selector_macos/pubspec.yaml index 073adbb7b2c..272d8afc86a 100644 --- a/packages/file_selector/file_selector_macos/pubspec.yaml +++ b/packages/file_selector/file_selector_macos/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_macos description: macOS implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_macos issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.0+6 +version: 0.9.1 environment: sdk: ">=2.17.0 <4.0.0" @@ -27,4 +27,4 @@ dev_dependencies: flutter_test: sdk: flutter mockito: 5.3.2 - pigeon: ^4.2.14 + pigeon: ^9.1.0 diff --git a/packages/file_selector/file_selector_macos/test/messages_test.g.dart b/packages/file_selector/file_selector_macos/test/messages_test.g.dart index 731f1fb1d51..ee61ff51863 100644 --- a/packages/file_selector/file_selector_macos/test/messages_test.g.dart +++ b/packages/file_selector/file_selector_macos/test/messages_test.g.dart @@ -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 (v4.2.14), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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: avoid_relative_lib_imports @@ -34,15 +34,12 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return AllowedTypes.decode(readValue(buffer)!); - - case 129: + case 129: return OpenPanelOptions.decode(readValue(buffer)!); - - case 130: + case 130: return SavePanelOptions.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -63,8 +60,7 @@ abstract class TestFileSelectorApi { /// A null return corresponds to a cancelled save. Future displaySavePanel(SavePanelOptions options); - static void setup(TestFileSelectorApi? api, - {BinaryMessenger? binaryMessenger}) { + static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.displayOpenPanel', codec, @@ -74,7 +70,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.displayOpenPanel was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.displayOpenPanel was null.'); final List args = (message as List?)!; final OpenPanelOptions? arg_options = (args[0] as OpenPanelOptions?); assert(arg_options != null, @@ -93,7 +89,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.displaySavePanel was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.displaySavePanel was null.'); final List args = (message as List?)!; final SavePanelOptions? arg_options = (args[0] as SavePanelOptions?); assert(arg_options != null, From 875b69f617b02fa2284d16b39564a986c1536992 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 17:56:45 +0000 Subject: [PATCH 03/10] Update in _windows --- .../file_selector_windows/CHANGELOG.md | 4 + .../lib/src/messages.g.dart | 108 +++---- .../file_selector_windows/pubspec.yaml | 6 +- .../test/test_api.g.dart | 41 +-- .../windows/messages.g.cpp | 299 +++++++----------- .../windows/messages.g.h | 87 ++--- 6 files changed, 230 insertions(+), 315 deletions(-) diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md index 29724630a96..b3092442dff 100644 --- a/packages/file_selector/file_selector_windows/CHANGELOG.md +++ b/packages/file_selector/file_selector_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## NEXT + +* Update to `pigeon` version 9. + ## 0.9.1+6 * Clarifies explanation of endorsement in README. diff --git a/packages/file_selector/file_selector_windows/lib/src/messages.g.dart b/packages/file_selector/file_selector_windows/lib/src/messages.g.dart index ad3d5af8327..5f16170d2f7 100644 --- a/packages/file_selector/file_selector_windows/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_windows/lib/src/messages.g.dart @@ -1,13 +1,14 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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 + import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; class TypeGroup { @@ -17,20 +18,21 @@ class TypeGroup { }); String label; + List extensions; Object encode() { - final Map pigeonMap = {}; - pigeonMap['label'] = label; - pigeonMap['extensions'] = extensions; - return pigeonMap; + return [ + label, + extensions, + ]; } - static TypeGroup decode(Object message) { - final Map pigeonMap = message as Map; + static TypeGroup decode(Object result) { + result as List; return TypeGroup( - label: pigeonMap['label']! as String, - extensions: (pigeonMap['extensions'] as List?)!.cast(), + label: result[0]! as String, + extensions: (result[1] as List?)!.cast(), ); } } @@ -43,24 +45,25 @@ class SelectionOptions { }); bool allowMultiple; + bool selectFolders; + List allowedTypes; Object encode() { - final Map pigeonMap = {}; - pigeonMap['allowMultiple'] = allowMultiple; - pigeonMap['selectFolders'] = selectFolders; - pigeonMap['allowedTypes'] = allowedTypes; - return pigeonMap; + return [ + allowMultiple, + selectFolders, + allowedTypes, + ]; } - static SelectionOptions decode(Object message) { - final Map pigeonMap = message as Map; + static SelectionOptions decode(Object result) { + result as List; return SelectionOptions( - allowMultiple: pigeonMap['allowMultiple']! as bool, - selectFolders: pigeonMap['selectFolders']! as bool, - allowedTypes: - (pigeonMap['allowedTypes'] as List?)!.cast(), + allowMultiple: result[0]! as bool, + selectFolders: result[1]! as bool, + allowedTypes: (result[2] as List?)!.cast(), ); } } @@ -83,12 +86,10 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return SelectionOptions.decode(readValue(buffer)!); - - case 129: + case 129: return TypeGroup.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -101,76 +102,61 @@ class FileSelectorApi { /// BinaryMessenger will be used which routes to the host platform. FileSelectorApi({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger; - final BinaryMessenger? _binaryMessenger; static const MessageCodec codec = _FileSelectorApiCodec(); - Future> showOpenDialog(SelectionOptions arg_options, - String? arg_initialDirectory, String? arg_confirmButtonText) async { + Future> showOpenDialog(SelectionOptions arg_options, String? arg_initialDirectory, String? arg_confirmButtonText) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showOpenDialog', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send( - [arg_options, arg_initialDirectory, arg_confirmButtonText]) - as Map?; - if (replyMap == null) { + final List? replyList = + await channel.send([arg_options, arg_initialDirectory, arg_confirmButtonText]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); - } else if (replyMap['result'] == null) { + } else if (replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyMap['result'] as List?)!.cast(); + return (replyList[0] as List?)!.cast(); } } - Future> showSaveDialog( - SelectionOptions arg_options, - String? arg_initialDirectory, - String? arg_suggestedName, - String? arg_confirmButtonText) async { + Future> showSaveDialog(SelectionOptions arg_options, String? arg_initialDirectory, String? arg_suggestedName, String? arg_confirmButtonText) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showSaveDialog', codec, binaryMessenger: _binaryMessenger); - final Map? replyMap = await channel.send([ - arg_options, - arg_initialDirectory, - arg_suggestedName, - arg_confirmButtonText - ]) as Map?; - if (replyMap == null) { + final List? replyList = + await channel.send([arg_options, arg_initialDirectory, arg_suggestedName, arg_confirmButtonText]) as List?; + if (replyList == null) { throw PlatformException( code: 'channel-error', message: 'Unable to establish connection on channel.', ); - } else if (replyMap['error'] != null) { - final Map error = - (replyMap['error'] as Map?)!; + } else if (replyList.length > 1) { throw PlatformException( - code: (error['code'] as String?)!, - message: error['message'] as String?, - details: error['details'], + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], ); - } else if (replyMap['result'] == null) { + } else if (replyList[0] == null) { throw PlatformException( code: 'null-error', message: 'Host platform returned null value for non-null return value.', ); } else { - return (replyMap['result'] as List?)!.cast(); + return (replyList[0] as List?)!.cast(); } } } diff --git a/packages/file_selector/file_selector_windows/pubspec.yaml b/packages/file_selector/file_selector_windows/pubspec.yaml index a93ab0fbd7e..54c13519035 100644 --- a/packages/file_selector/file_selector_windows/pubspec.yaml +++ b/packages/file_selector/file_selector_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_windows description: Windows implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.1+6 +version: 0.9.2 environment: sdk: ">=2.17.0 <4.0.0" @@ -23,8 +23,8 @@ dependencies: sdk: flutter dev_dependencies: - build_runner: 2.1.11 + build_runner: ^2.3.0 flutter_test: sdk: flutter mockito: 5.3.2 - pigeon: ^3.2.5 + pigeon: ^9.1.0 diff --git a/packages/file_selector/file_selector_windows/test/test_api.g.dart b/packages/file_selector/file_selector_windows/test/test_api.g.dart index f9b979f7b85..4520ade6591 100644 --- a/packages/file_selector/file_selector_windows/test/test_api.g.dart +++ b/packages/file_selector/file_selector_windows/test/test_api.g.dart @@ -1,17 +1,16 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), 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: avoid_relative_lib_imports import 'dart:async'; -import 'dart:typed_data' show Uint8List, Int32List, Int64List, Float64List; -import 'package:flutter/foundation.dart' show WriteBuffer, ReadBuffer; +import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List; +import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; -// ignore: directives_ordering import 'package:file_selector_windows/src/messages.g.dart'; class _TestFileSelectorApiCodec extends StandardMessageCodec { @@ -32,12 +31,10 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return SelectionOptions.decode(readValue(buffer)!); - - case 129: + case 129: return TypeGroup.decode(readValue(buffer)!); - default: return super.readValueOfType(type, buffer); } @@ -47,15 +44,11 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { abstract class TestFileSelectorApi { static const MessageCodec codec = _TestFileSelectorApiCodec(); - List showOpenDialog(SelectionOptions options, - String? initialDirectory, String? confirmButtonText); - List showSaveDialog( - SelectionOptions options, - String? initialDirectory, - String? suggestedName, - String? confirmButtonText); - static void setup(TestFileSelectorApi? api, - {BinaryMessenger? binaryMessenger}) { + List showOpenDialog(SelectionOptions options, String? initialDirectory, String? confirmButtonText); + + List showSaveDialog(SelectionOptions options, String? initialDirectory, String? suggestedName, String? confirmButtonText); + + static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showOpenDialog', codec, @@ -65,16 +58,15 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null.'); final List args = (message as List?)!; final SelectionOptions? arg_options = (args[0] as SelectionOptions?); assert(arg_options != null, 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null, expected non-null SelectionOptions.'); final String? arg_initialDirectory = (args[1] as String?); final String? arg_confirmButtonText = (args[2] as String?); - final List output = api.showOpenDialog( - arg_options!, arg_initialDirectory, arg_confirmButtonText); - return {'result': output}; + final List output = api.showOpenDialog(arg_options!, arg_initialDirectory, arg_confirmButtonText); + return [output]; }); } } @@ -87,7 +79,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.showSaveDialog was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.showSaveDialog was null.'); final List args = (message as List?)!; final SelectionOptions? arg_options = (args[0] as SelectionOptions?); assert(arg_options != null, @@ -95,9 +87,8 @@ abstract class TestFileSelectorApi { final String? arg_initialDirectory = (args[1] as String?); final String? arg_suggestedName = (args[2] as String?); final String? arg_confirmButtonText = (args[3] as String?); - final List output = api.showSaveDialog(arg_options!, - arg_initialDirectory, arg_suggestedName, arg_confirmButtonText); - return {'result': output}; + final List output = api.showSaveDialog(arg_options!, arg_initialDirectory, arg_suggestedName, arg_confirmButtonText); + return [output]; }); } } diff --git a/packages/file_selector/file_selector_windows/windows/messages.g.cpp b/packages/file_selector/file_selector_windows/windows/messages.g.cpp index 04e529d8b35..d5bd0e33c3a 100644 --- a/packages/file_selector/file_selector_windows/windows/messages.g.cpp +++ b/packages/file_selector/file_selector_windows/windows/messages.g.cpp @@ -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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), do not edit directly. // See also: https://pub.dev/packages/pigeon #undef _HAS_EXCEPTIONS @@ -18,261 +18,194 @@ #include namespace file_selector_windows { +using flutter::BasicMessageChannel; +using flutter::CustomEncodableValue; +using flutter::EncodableList; +using flutter::EncodableMap; +using flutter::EncodableValue; -/* TypeGroup */ +// TypeGroup const std::string& TypeGroup::label() const { return label_; } void TypeGroup::set_label(std::string_view value_arg) { label_ = value_arg; } -const flutter::EncodableList& TypeGroup::extensions() const { - return extensions_; -} -void TypeGroup::set_extensions(const flutter::EncodableList& value_arg) { - extensions_ = value_arg; -} +const EncodableList& TypeGroup::extensions() const { return extensions_; } +void TypeGroup::set_extensions(const EncodableList& value_arg) { extensions_ = value_arg; } -flutter::EncodableMap TypeGroup::ToEncodableMap() const { - return flutter::EncodableMap{ - {flutter::EncodableValue("label"), flutter::EncodableValue(label_)}, - {flutter::EncodableValue("extensions"), - flutter::EncodableValue(extensions_)}, - }; +EncodableList TypeGroup::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(EncodableValue(label_)); + list.push_back(EncodableValue(extensions_)); + return list; } TypeGroup::TypeGroup() {} -TypeGroup::TypeGroup(flutter::EncodableMap map) { - auto& encodable_label = map.at(flutter::EncodableValue("label")); - if (const std::string* pointer_label = - std::get_if(&encodable_label)) { +TypeGroup::TypeGroup(const EncodableList& list) { + auto& encodable_label = list[0]; + if (const std::string* pointer_label = std::get_if(&encodable_label)) { label_ = *pointer_label; } - auto& encodable_extensions = map.at(flutter::EncodableValue("extensions")); - if (const flutter::EncodableList* pointer_extensions = - std::get_if(&encodable_extensions)) { + auto& encodable_extensions = list[1]; + if (const EncodableList* pointer_extensions = std::get_if(&encodable_extensions)) { extensions_ = *pointer_extensions; } } -/* SelectionOptions */ +// SelectionOptions bool SelectionOptions::allow_multiple() const { return allow_multiple_; } -void SelectionOptions::set_allow_multiple(bool value_arg) { - allow_multiple_ = value_arg; -} +void SelectionOptions::set_allow_multiple(bool value_arg) { allow_multiple_ = value_arg; } bool SelectionOptions::select_folders() const { return select_folders_; } -void SelectionOptions::set_select_folders(bool value_arg) { - select_folders_ = value_arg; -} +void SelectionOptions::set_select_folders(bool value_arg) { select_folders_ = value_arg; } -const flutter::EncodableList& SelectionOptions::allowed_types() const { - return allowed_types_; -} -void SelectionOptions::set_allowed_types( - const flutter::EncodableList& value_arg) { - allowed_types_ = value_arg; -} +const EncodableList& SelectionOptions::allowed_types() const { return allowed_types_; } +void SelectionOptions::set_allowed_types(const EncodableList& value_arg) { allowed_types_ = value_arg; } -flutter::EncodableMap SelectionOptions::ToEncodableMap() const { - return flutter::EncodableMap{ - {flutter::EncodableValue("allowMultiple"), - flutter::EncodableValue(allow_multiple_)}, - {flutter::EncodableValue("selectFolders"), - flutter::EncodableValue(select_folders_)}, - {flutter::EncodableValue("allowedTypes"), - flutter::EncodableValue(allowed_types_)}, - }; +EncodableList SelectionOptions::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(EncodableValue(allow_multiple_)); + list.push_back(EncodableValue(select_folders_)); + list.push_back(EncodableValue(allowed_types_)); + return list; } SelectionOptions::SelectionOptions() {} -SelectionOptions::SelectionOptions(flutter::EncodableMap map) { - auto& encodable_allow_multiple = - map.at(flutter::EncodableValue("allowMultiple")); - if (const bool* pointer_allow_multiple = - std::get_if(&encodable_allow_multiple)) { +SelectionOptions::SelectionOptions(const EncodableList& list) { + auto& encodable_allow_multiple = list[0]; + if (const bool* pointer_allow_multiple = std::get_if(&encodable_allow_multiple)) { allow_multiple_ = *pointer_allow_multiple; } - auto& encodable_select_folders = - map.at(flutter::EncodableValue("selectFolders")); - if (const bool* pointer_select_folders = - std::get_if(&encodable_select_folders)) { + auto& encodable_select_folders = list[1]; + if (const bool* pointer_select_folders = std::get_if(&encodable_select_folders)) { select_folders_ = *pointer_select_folders; } - auto& encodable_allowed_types = - map.at(flutter::EncodableValue("allowedTypes")); - if (const flutter::EncodableList* pointer_allowed_types = - std::get_if(&encodable_allowed_types)) { + auto& encodable_allowed_types = list[2]; + if (const EncodableList* pointer_allowed_types = std::get_if(&encodable_allowed_types)) { allowed_types_ = *pointer_allowed_types; } } FileSelectorApiCodecSerializer::FileSelectorApiCodecSerializer() {} -flutter::EncodableValue FileSelectorApiCodecSerializer::ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const { +EncodableValue FileSelectorApiCodecSerializer::ReadValueOfType(uint8_t type, flutter::ByteStreamReader* stream) const { switch (type) { case 128: - return flutter::CustomEncodableValue( - SelectionOptions(std::get(ReadValue(stream)))); - + return CustomEncodableValue(SelectionOptions(std::get(ReadValue(stream)))); case 129: - return flutter::CustomEncodableValue( - TypeGroup(std::get(ReadValue(stream)))); - + return CustomEncodableValue(TypeGroup(std::get(ReadValue(stream)))); default: return flutter::StandardCodecSerializer::ReadValueOfType(type, stream); } } -void FileSelectorApiCodecSerializer::WriteValue( - const flutter::EncodableValue& value, - flutter::ByteStreamWriter* stream) const { - if (const flutter::CustomEncodableValue* custom_value = - std::get_if(&value)) { +void FileSelectorApiCodecSerializer::WriteValue(const EncodableValue& value, flutter::ByteStreamWriter* stream) const { + if (const CustomEncodableValue* custom_value = std::get_if(&value)) { if (custom_value->type() == typeid(SelectionOptions)) { stream->WriteByte(128); - WriteValue( - std::any_cast(*custom_value).ToEncodableMap(), - stream); + WriteValue(EncodableValue(std::any_cast(*custom_value).ToEncodableList()), stream); return; } if (custom_value->type() == typeid(TypeGroup)) { stream->WriteByte(129); - WriteValue(std::any_cast(*custom_value).ToEncodableMap(), - stream); + WriteValue(EncodableValue(std::any_cast(*custom_value).ToEncodableList()), stream); return; } } flutter::StandardCodecSerializer::WriteValue(value, stream); } -/** The codec used by FileSelectorApi. */ +/// The codec used by FileSelectorApi. const flutter::StandardMessageCodec& FileSelectorApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance( - &FileSelectorApiCodecSerializer::GetInstance()); + return flutter::StandardMessageCodec::GetInstance(&FileSelectorApiCodecSerializer::GetInstance()); } -/** Sets up an instance of `FileSelectorApi` to handle messages through the - * `binary_messenger`. */ -void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger, - FileSelectorApi* api) { +// Sets up an instance of `FileSelectorApi` to handle messages through the `binary_messenger`. +void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger, FileSelectorApi* api) { { - auto channel = - std::make_unique>( - binary_messenger, - "dev.flutter.pigeon.FileSelectorApi.showOpenDialog", &GetCodec()); + auto channel = std::make_unique>(binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showOpenDialog", &GetCodec()); if (api != nullptr) { - channel->SetMessageHandler( - [api](const flutter::EncodableValue& message, - const flutter::MessageReply& reply) { - flutter::EncodableMap wrapped; - try { - const auto& args = std::get(message); - const auto& encodable_options_arg = args.at(0); - if (encodable_options_arg.IsNull()) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError("options_arg unexpectedly null.")); - reply(wrapped); - return; - } - const auto& options_arg = std::any_cast( - std::get( - encodable_options_arg)); - const auto& encodable_initial_directory_arg = args.at(1); - const auto* initial_directory_arg = - std::get_if(&encodable_initial_directory_arg); - const auto& encodable_confirm_button_text_arg = args.at(2); - const auto* confirm_button_text_arg = - std::get_if(&encodable_confirm_button_text_arg); - ErrorOr output = api->ShowOpenDialog( - options_arg, initial_directory_arg, confirm_button_text_arg); - if (output.has_error()) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError(output.error())); - } else { - wrapped.emplace( - flutter::EncodableValue("result"), - flutter::EncodableValue(std::move(output).TakeValue())); - } - } catch (const std::exception& exception) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError(exception.what())); - } - reply(wrapped); - }); + channel->SetMessageHandler([api](const EncodableValue& message, const flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_options_arg = args.at(0); + if (encodable_options_arg.IsNull()) { + reply(WrapError("options_arg unexpectedly null.")); + return; + } + const auto& options_arg = std::any_cast(std::get(encodable_options_arg)); + const auto& encodable_initial_directory_arg = args.at(1); + const auto* initial_directory_arg = std::get_if(&encodable_initial_directory_arg); + const auto& encodable_confirm_button_text_arg = args.at(2); + const auto* confirm_button_text_arg = std::get_if(&encodable_confirm_button_text_arg); + ErrorOr output = api->ShowOpenDialog(options_arg, initial_directory_arg, confirm_button_text_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); } else { channel->SetMessageHandler(nullptr); } } { - auto channel = - std::make_unique>( - binary_messenger, - "dev.flutter.pigeon.FileSelectorApi.showSaveDialog", &GetCodec()); + auto channel = std::make_unique>(binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showSaveDialog", &GetCodec()); if (api != nullptr) { - channel->SetMessageHandler( - [api](const flutter::EncodableValue& message, - const flutter::MessageReply& reply) { - flutter::EncodableMap wrapped; - try { - const auto& args = std::get(message); - const auto& encodable_options_arg = args.at(0); - if (encodable_options_arg.IsNull()) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError("options_arg unexpectedly null.")); - reply(wrapped); - return; - } - const auto& options_arg = std::any_cast( - std::get( - encodable_options_arg)); - const auto& encodable_initial_directory_arg = args.at(1); - const auto* initial_directory_arg = - std::get_if(&encodable_initial_directory_arg); - const auto& encodable_suggested_name_arg = args.at(2); - const auto* suggested_name_arg = - std::get_if(&encodable_suggested_name_arg); - const auto& encodable_confirm_button_text_arg = args.at(3); - const auto* confirm_button_text_arg = - std::get_if(&encodable_confirm_button_text_arg); - ErrorOr output = api->ShowSaveDialog( - options_arg, initial_directory_arg, suggested_name_arg, - confirm_button_text_arg); - if (output.has_error()) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError(output.error())); - } else { - wrapped.emplace( - flutter::EncodableValue("result"), - flutter::EncodableValue(std::move(output).TakeValue())); - } - } catch (const std::exception& exception) { - wrapped.emplace(flutter::EncodableValue("error"), - WrapError(exception.what())); - } - reply(wrapped); - }); + channel->SetMessageHandler([api](const EncodableValue& message, const flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_options_arg = args.at(0); + if (encodable_options_arg.IsNull()) { + reply(WrapError("options_arg unexpectedly null.")); + return; + } + const auto& options_arg = std::any_cast(std::get(encodable_options_arg)); + const auto& encodable_initial_directory_arg = args.at(1); + const auto* initial_directory_arg = std::get_if(&encodable_initial_directory_arg); + const auto& encodable_suggested_name_arg = args.at(2); + const auto* suggested_name_arg = std::get_if(&encodable_suggested_name_arg); + const auto& encodable_confirm_button_text_arg = args.at(3); + const auto* confirm_button_text_arg = std::get_if(&encodable_confirm_button_text_arg); + ErrorOr output = api->ShowSaveDialog(options_arg, initial_directory_arg, suggested_name_arg, confirm_button_text_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); } else { channel->SetMessageHandler(nullptr); } } } -flutter::EncodableMap FileSelectorApi::WrapError( - std::string_view error_message) { - return flutter::EncodableMap( - {{flutter::EncodableValue("message"), - flutter::EncodableValue(std::string(error_message))}, - {flutter::EncodableValue("code"), flutter::EncodableValue("Error")}, - {flutter::EncodableValue("details"), flutter::EncodableValue()}}); +EncodableValue FileSelectorApi::WrapError(std::string_view error_message) { + return EncodableValue(EncodableList{ + EncodableValue(std::string(error_message)), + EncodableValue("Error"), + EncodableValue() + }); } -flutter::EncodableMap FileSelectorApi::WrapError(const FlutterError& error) { - return flutter::EncodableMap( - {{flutter::EncodableValue("message"), - flutter::EncodableValue(error.message())}, - {flutter::EncodableValue("code"), flutter::EncodableValue(error.code())}, - {flutter::EncodableValue("details"), error.details()}}); +EncodableValue FileSelectorApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{ + EncodableValue(error.code()), + EncodableValue(error.message()), + error.details() + }); } } // namespace file_selector_windows diff --git a/packages/file_selector/file_selector_windows/windows/messages.g.h b/packages/file_selector/file_selector_windows/windows/messages.g.h index fb496d2d66e..aeee1aaf0a8 100644 --- a/packages/file_selector/file_selector_windows/windows/messages.g.h +++ b/packages/file_selector/file_selector_windows/windows/messages.g.h @@ -1,11 +1,11 @@ // 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 (v3.2.5), do not edit directly. +// Autogenerated from Pigeon (v9.1.1), do not edit directly. // See also: https://pub.dev/packages/pigeon -#ifndef PIGEON_MESSAGES_G_FILE_SELECTOR_WINDOWS_H_ -#define PIGEON_MESSAGES_G_FILE_SELECTOR_WINDOWS_H_ +#ifndef PIGEON_MESSAGES_G_H_ +#define PIGEON_MESSAGES_G_H_ #include #include #include @@ -17,16 +17,17 @@ namespace file_selector_windows { -/* Generated class from Pigeon. */ + +// Generated class from Pigeon. class FlutterError { public: - FlutterError(const std::string& code) : code_(code) {} - FlutterError(const std::string& code, const std::string& message) - : code_(code), message_(message) {} - FlutterError(const std::string& code, const std::string& message, - const flutter::EncodableValue& details) - : code_(code), message_(message), details_(details) {} + explicit FlutterError(const std::string& code) + : code_(code) {} + explicit FlutterError(const std::string& code, const std::string& message) + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, const flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} const std::string& code() const { return code_; } const std::string& message() const { return message_; } @@ -38,12 +39,13 @@ class FlutterError { flutter::EncodableValue details_; }; -template -class ErrorOr { +template class ErrorOr { public: - ErrorOr(const T& rhs) { new (&v_) T(rhs); } + ErrorOr(const T& rhs) { new(&v_) T(rhs); } ErrorOr(const T&& rhs) { v_ = std::move(rhs); } - ErrorOr(const FlutterError& rhs) { new (&v_) FlutterError(rhs); } + ErrorOr(const FlutterError& rhs) { + new(&v_) FlutterError(rhs); + } ErrorOr(const FlutterError&& rhs) { v_ = std::move(rhs); } bool has_error() const { return std::holds_alternative(v_); } @@ -58,7 +60,8 @@ class ErrorOr { std::variant v_; }; -/* Generated class from Pigeon that represents data sent in messages. */ + +// Generated class from Pigeon that represents data sent in messages. class TypeGroup { public: TypeGroup(); @@ -68,16 +71,19 @@ class TypeGroup { const flutter::EncodableList& extensions() const; void set_extensions(const flutter::EncodableList& value_arg); + private: - TypeGroup(flutter::EncodableMap map); - flutter::EncodableMap ToEncodableMap() const; + TypeGroup(const flutter::EncodableList& list); + flutter::EncodableList ToEncodableList() const; friend class FileSelectorApi; friend class FileSelectorApiCodecSerializer; std::string label_; flutter::EncodableList extensions_; + }; -/* Generated class from Pigeon that represents data sent in messages. */ + +// Generated class from Pigeon that represents data sent in messages. class SelectionOptions { public: SelectionOptions(); @@ -90,18 +96,21 @@ class SelectionOptions { const flutter::EncodableList& allowed_types() const; void set_allowed_types(const flutter::EncodableList& value_arg); + private: - SelectionOptions(flutter::EncodableMap map); - flutter::EncodableMap ToEncodableMap() const; + SelectionOptions(const flutter::EncodableList& list); + flutter::EncodableList ToEncodableList() const; friend class FileSelectorApi; friend class FileSelectorApiCodecSerializer; bool allow_multiple_; bool select_folders_; flutter::EncodableList allowed_types_; + }; class FileSelectorApiCodecSerializer : public flutter::StandardCodecSerializer { public: + inline static FileSelectorApiCodecSerializer& GetInstance() { static FileSelectorApiCodecSerializer sInstance; return sInstance; @@ -110,40 +119,32 @@ class FileSelectorApiCodecSerializer : public flutter::StandardCodecSerializer { FileSelectorApiCodecSerializer(); public: - void WriteValue(const flutter::EncodableValue& value, - flutter::ByteStreamWriter* stream) const override; + void WriteValue(const flutter::EncodableValue& value, flutter::ByteStreamWriter* stream) const override; protected: - flutter::EncodableValue ReadValueOfType( - uint8_t type, flutter::ByteStreamReader* stream) const override; + flutter::EncodableValue ReadValueOfType(uint8_t type, flutter::ByteStreamReader* stream) const override; + }; -/* Generated class from Pigeon that represents a handler of messages from - * Flutter. */ +// Generated interface from Pigeon that represents a handler of messages from Flutter. class FileSelectorApi { public: FileSelectorApi(const FileSelectorApi&) = delete; FileSelectorApi& operator=(const FileSelectorApi&) = delete; - virtual ~FileSelectorApi(){}; - virtual ErrorOr ShowOpenDialog( - const SelectionOptions& options, const std::string* initial_directory, - const std::string* confirm_button_text) = 0; - virtual ErrorOr ShowSaveDialog( - const SelectionOptions& options, const std::string* initial_directory, - const std::string* suggested_name, - const std::string* confirm_button_text) = 0; - - /** The codec used by FileSelectorApi. */ + virtual ~FileSelectorApi() {} + virtual ErrorOr ShowOpenDialog(const SelectionOptions& options, const std::string* initial_directory, const std::string* confirm_button_text) = 0; + virtual ErrorOr ShowSaveDialog(const SelectionOptions& options, const std::string* initial_directory, const std::string* suggested_name, const std::string* confirm_button_text) = 0; + + // The codec used by FileSelectorApi. static const flutter::StandardMessageCodec& GetCodec(); - /** Sets up an instance of `FileSelectorApi` to handle messages through the - * `binary_messenger`. */ - static void SetUp(flutter::BinaryMessenger* binary_messenger, - FileSelectorApi* api); - static flutter::EncodableMap WrapError(std::string_view error_message); - static flutter::EncodableMap WrapError(const FlutterError& error); + // Sets up an instance of `FileSelectorApi` to handle messages through the `binary_messenger`. + static void SetUp(flutter::BinaryMessenger* binary_messenger, FileSelectorApi* api); + static flutter::EncodableValue WrapError(std::string_view error_message); + static flutter::EncodableValue WrapError(const FlutterError& error); protected: FileSelectorApi() = default; + }; } // namespace file_selector_windows -#endif // PIGEON_MESSAGES_G_FILE_SELECTOR_WINDOWS_H_ +#endif // PIGEON_MESSAGES_G_H_ From 29cd7e7c38a38be82977225f4703e5166793da89 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 18:10:54 +0000 Subject: [PATCH 04/10] Actual versions in CHANGELOG The `## NEXT` is for non-published changes. --- packages/file_selector/file_selector_ios/CHANGELOG.md | 2 +- packages/file_selector/file_selector_macos/CHANGELOG.md | 2 +- packages/file_selector/file_selector_windows/CHANGELOG.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/file_selector/file_selector_ios/CHANGELOG.md b/packages/file_selector/file_selector_ios/CHANGELOG.md index 207a2e29930..6e29fe8c663 100644 --- a/packages/file_selector/file_selector_ios/CHANGELOG.md +++ b/packages/file_selector/file_selector_ios/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 0.5.2 * Update to `pigeon` version 9. diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md index f9e1ba55909..d6e3041dc97 100644 --- a/packages/file_selector/file_selector_macos/CHANGELOG.md +++ b/packages/file_selector/file_selector_macos/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 0.9.1 * Update to `pigeon` version 9. diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md index b3092442dff..6343a7f69c8 100644 --- a/packages/file_selector/file_selector_windows/CHANGELOG.md +++ b/packages/file_selector/file_selector_windows/CHANGELOG.md @@ -1,4 +1,4 @@ -## NEXT +## 0.9.2 * Update to `pigeon` version 9. From 760d1ffd97f0398f9500eacb4980026616f9c254 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 18:12:16 +0000 Subject: [PATCH 05/10] Format --- .../ios/Classes/messages.g.h | 13 +- .../ios/Classes/messages.g.m | 32 +-- .../file_selector_ios/lib/src/messages.g.dart | 2 +- .../file_selector_ios/test/test_api.g.dart | 10 +- .../lib/src/messages.g.dart | 6 +- .../test/messages_test.g.dart | 13 +- .../lib/src/messages.g.dart | 26 ++- .../test/test_api.g.dart | 26 ++- .../windows/messages.g.cpp | 210 +++++++++++------- .../windows/messages.g.h | 53 +++-- 10 files changed, 231 insertions(+), 160 deletions(-) diff --git a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h index 240ab2535ab..bcca1d908e4 100644 --- a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h +++ b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.h @@ -19,18 +19,21 @@ NS_ASSUME_NONNULL_BEGIN /// `init` unavailable to enforce nonnull fields, see the `make` class method. - (instancetype)init NS_UNAVAILABLE; + (instancetype)makeWithUtis:(NSArray *)utis - allowMultiSelection:(NSNumber *)allowMultiSelection; -@property(nonatomic, strong) NSArray * utis; -@property(nonatomic, strong) NSNumber * allowMultiSelection; + allowMultiSelection:(NSNumber *)allowMultiSelection; +@property(nonatomic, strong) NSArray *utis; +@property(nonatomic, strong) NSNumber *allowMultiSelection; @end /// The codec used by FFSFileSelectorApi. NSObject *FFSFileSelectorApiGetCodec(void); @protocol FFSFileSelectorApi -- (void)openFileSelectorWithConfig:(FFSFileSelectorConfig *)config completion:(void (^)(NSArray *_Nullable, FlutterError *_Nullable))completion; +- (void)openFileSelectorWithConfig:(FFSFileSelectorConfig *)config + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; @end -extern void FFSFileSelectorApiSetup(id binaryMessenger, NSObject *_Nullable api); +extern void FFSFileSelectorApiSetup(id binaryMessenger, + NSObject *_Nullable api); NS_ASSUME_NONNULL_END diff --git a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m index 46353f9ba50..9d31772a946 100644 --- a/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m +++ b/packages/file_selector/file_selector_ios/ios/Classes/messages.g.m @@ -32,8 +32,8 @@ - (NSArray *)toList; @implementation FFSFileSelectorConfig + (instancetype)makeWithUtis:(NSArray *)utis - allowMultiSelection:(NSNumber *)allowMultiSelection { - FFSFileSelectorConfig* pigeonResult = [[FFSFileSelectorConfig alloc] init]; + allowMultiSelection:(NSNumber *)allowMultiSelection { + FFSFileSelectorConfig *pigeonResult = [[FFSFileSelectorConfig alloc] init]; pigeonResult.utis = utis; pigeonResult.allowMultiSelection = allowMultiSelection; return pigeonResult; @@ -62,7 +62,7 @@ @interface FFSFileSelectorApiCodecReader : FlutterStandardReader @implementation FFSFileSelectorApiCodecReader - (nullable id)readValueOfType:(UInt8)type { switch (type) { - case 128: + case 128: return [FFSFileSelectorConfig fromList:[self readValue]]; default: return [super readValueOfType:type]; @@ -98,27 +98,33 @@ - (FlutterStandardReader *)readerWithData:(NSData *)data { static FlutterStandardMessageCodec *sSharedObject = nil; static dispatch_once_t sPred = 0; dispatch_once(&sPred, ^{ - FFSFileSelectorApiCodecReaderWriter *readerWriter = [[FFSFileSelectorApiCodecReaderWriter alloc] init]; + FFSFileSelectorApiCodecReaderWriter *readerWriter = + [[FFSFileSelectorApiCodecReaderWriter alloc] init]; sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; }); return sSharedObject; } -void FFSFileSelectorApiSetup(id binaryMessenger, NSObject *api) { +void FFSFileSelectorApiSetup(id binaryMessenger, + NSObject *api) { { - FlutterBasicMessageChannel *channel = - [[FlutterBasicMessageChannel alloc] - initWithName:@"dev.flutter.pigeon.FileSelectorApi.openFile" + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:@"dev.flutter.pigeon.FileSelectorApi.openFile" binaryMessenger:binaryMessenger - codec:FFSFileSelectorApiGetCodec()]; + codec:FFSFileSelectorApiGetCodec()]; if (api) { - NSCAssert([api respondsToSelector:@selector(openFileSelectorWithConfig:completion:)], @"FFSFileSelectorApi api (%@) doesn't respond to @selector(openFileSelectorWithConfig:completion:)", api); + NSCAssert([api respondsToSelector:@selector(openFileSelectorWithConfig:completion:)], + @"FFSFileSelectorApi api (%@) doesn't respond to " + @"@selector(openFileSelectorWithConfig:completion:)", + api); [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { NSArray *args = message; FFSFileSelectorConfig *arg_config = GetNullableObjectAtIndex(args, 0); - [api openFileSelectorWithConfig:arg_config completion:^(NSArray *_Nullable output, FlutterError *_Nullable error) { - callback(wrapResult(output, error)); - }]; + [api openFileSelectorWithConfig:arg_config + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; }]; } else { [channel setMessageHandler:nil]; diff --git a/packages/file_selector/file_selector_ios/lib/src/messages.g.dart b/packages/file_selector/file_selector_ios/lib/src/messages.g.dart index 3431f426266..2f38a680696 100644 --- a/packages/file_selector/file_selector_ios/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_ios/lib/src/messages.g.dart @@ -52,7 +52,7 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return FileSelectorConfig.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); diff --git a/packages/file_selector/file_selector_ios/test/test_api.g.dart b/packages/file_selector/file_selector_ios/test/test_api.g.dart index e38157c8706..cf49eb1985d 100644 --- a/packages/file_selector/file_selector_ios/test/test_api.g.dart +++ b/packages/file_selector/file_selector_ios/test/test_api.g.dart @@ -28,7 +28,7 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return FileSelectorConfig.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -41,7 +41,8 @@ abstract class TestFileSelectorApi { Future> openFile(FileSelectorConfig config); - static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestFileSelectorApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.openFile', codec, @@ -51,9 +52,10 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null.'); final List args = (message as List?)!; - final FileSelectorConfig? arg_config = (args[0] as FileSelectorConfig?); + final FileSelectorConfig? arg_config = + (args[0] as FileSelectorConfig?); assert(arg_config != null, 'Argument for dev.flutter.pigeon.FileSelectorApi.openFile was null, expected non-null FileSelectorConfig.'); final List output = await api.openFile(arg_config!); diff --git a/packages/file_selector/file_selector_macos/lib/src/messages.g.dart b/packages/file_selector/file_selector_macos/lib/src/messages.g.dart index 3e7c25b674c..325afd1ce1b 100644 --- a/packages/file_selector/file_selector_macos/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_macos/lib/src/messages.g.dart @@ -145,11 +145,11 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return AllowedTypes.decode(readValue(buffer)!); - case 129: + case 129: return OpenPanelOptions.decode(readValue(buffer)!); - case 130: + case 130: return SavePanelOptions.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); diff --git a/packages/file_selector/file_selector_macos/test/messages_test.g.dart b/packages/file_selector/file_selector_macos/test/messages_test.g.dart index ee61ff51863..0c67c797a87 100644 --- a/packages/file_selector/file_selector_macos/test/messages_test.g.dart +++ b/packages/file_selector/file_selector_macos/test/messages_test.g.dart @@ -34,11 +34,11 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return AllowedTypes.decode(readValue(buffer)!); - case 129: + case 129: return OpenPanelOptions.decode(readValue(buffer)!); - case 130: + case 130: return SavePanelOptions.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -60,7 +60,8 @@ abstract class TestFileSelectorApi { /// A null return corresponds to a cancelled save. Future displaySavePanel(SavePanelOptions options); - static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestFileSelectorApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.displayOpenPanel', codec, @@ -70,7 +71,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.displayOpenPanel was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.displayOpenPanel was null.'); final List args = (message as List?)!; final OpenPanelOptions? arg_options = (args[0] as OpenPanelOptions?); assert(arg_options != null, @@ -89,7 +90,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.displaySavePanel was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.displaySavePanel was null.'); final List args = (message as List?)!; final SavePanelOptions? arg_options = (args[0] as SavePanelOptions?); assert(arg_options != null, diff --git a/packages/file_selector/file_selector_windows/lib/src/messages.g.dart b/packages/file_selector/file_selector_windows/lib/src/messages.g.dart index 5f16170d2f7..a61076b97b3 100644 --- a/packages/file_selector/file_selector_windows/lib/src/messages.g.dart +++ b/packages/file_selector/file_selector_windows/lib/src/messages.g.dart @@ -86,9 +86,9 @@ class _FileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return SelectionOptions.decode(readValue(buffer)!); - case 129: + case 129: return TypeGroup.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -106,12 +106,14 @@ class FileSelectorApi { static const MessageCodec codec = _FileSelectorApiCodec(); - Future> showOpenDialog(SelectionOptions arg_options, String? arg_initialDirectory, String? arg_confirmButtonText) async { + Future> showOpenDialog(SelectionOptions arg_options, + String? arg_initialDirectory, String? arg_confirmButtonText) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showOpenDialog', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_options, arg_initialDirectory, arg_confirmButtonText]) as List?; + final List? replyList = await channel.send( + [arg_options, arg_initialDirectory, arg_confirmButtonText]) + as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', @@ -133,12 +135,20 @@ class FileSelectorApi { } } - Future> showSaveDialog(SelectionOptions arg_options, String? arg_initialDirectory, String? arg_suggestedName, String? arg_confirmButtonText) async { + Future> showSaveDialog( + SelectionOptions arg_options, + String? arg_initialDirectory, + String? arg_suggestedName, + String? arg_confirmButtonText) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showSaveDialog', codec, binaryMessenger: _binaryMessenger); - final List? replyList = - await channel.send([arg_options, arg_initialDirectory, arg_suggestedName, arg_confirmButtonText]) as List?; + final List? replyList = await channel.send([ + arg_options, + arg_initialDirectory, + arg_suggestedName, + arg_confirmButtonText + ]) as List?; if (replyList == null) { throw PlatformException( code: 'channel-error', diff --git a/packages/file_selector/file_selector_windows/test/test_api.g.dart b/packages/file_selector/file_selector_windows/test/test_api.g.dart index 4520ade6591..f9ed8e5b63d 100644 --- a/packages/file_selector/file_selector_windows/test/test_api.g.dart +++ b/packages/file_selector/file_selector_windows/test/test_api.g.dart @@ -31,9 +31,9 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { @override Object? readValueOfType(int type, ReadBuffer buffer) { switch (type) { - case 128: + case 128: return SelectionOptions.decode(readValue(buffer)!); - case 129: + case 129: return TypeGroup.decode(readValue(buffer)!); default: return super.readValueOfType(type, buffer); @@ -44,11 +44,17 @@ class _TestFileSelectorApiCodec extends StandardMessageCodec { abstract class TestFileSelectorApi { static const MessageCodec codec = _TestFileSelectorApiCodec(); - List showOpenDialog(SelectionOptions options, String? initialDirectory, String? confirmButtonText); + List showOpenDialog(SelectionOptions options, + String? initialDirectory, String? confirmButtonText); - List showSaveDialog(SelectionOptions options, String? initialDirectory, String? suggestedName, String? confirmButtonText); + List showSaveDialog( + SelectionOptions options, + String? initialDirectory, + String? suggestedName, + String? confirmButtonText); - static void setup(TestFileSelectorApi? api, {BinaryMessenger? binaryMessenger}) { + static void setup(TestFileSelectorApi? api, + {BinaryMessenger? binaryMessenger}) { { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.FileSelectorApi.showOpenDialog', codec, @@ -58,14 +64,15 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null.'); final List args = (message as List?)!; final SelectionOptions? arg_options = (args[0] as SelectionOptions?); assert(arg_options != null, 'Argument for dev.flutter.pigeon.FileSelectorApi.showOpenDialog was null, expected non-null SelectionOptions.'); final String? arg_initialDirectory = (args[1] as String?); final String? arg_confirmButtonText = (args[2] as String?); - final List output = api.showOpenDialog(arg_options!, arg_initialDirectory, arg_confirmButtonText); + final List output = api.showOpenDialog( + arg_options!, arg_initialDirectory, arg_confirmButtonText); return [output]; }); } @@ -79,7 +86,7 @@ abstract class TestFileSelectorApi { } else { channel.setMockMessageHandler((Object? message) async { assert(message != null, - 'Argument for dev.flutter.pigeon.FileSelectorApi.showSaveDialog was null.'); + 'Argument for dev.flutter.pigeon.FileSelectorApi.showSaveDialog was null.'); final List args = (message as List?)!; final SelectionOptions? arg_options = (args[0] as SelectionOptions?); assert(arg_options != null, @@ -87,7 +94,8 @@ abstract class TestFileSelectorApi { final String? arg_initialDirectory = (args[1] as String?); final String? arg_suggestedName = (args[2] as String?); final String? arg_confirmButtonText = (args[3] as String?); - final List output = api.showSaveDialog(arg_options!, arg_initialDirectory, arg_suggestedName, arg_confirmButtonText); + final List output = api.showSaveDialog(arg_options!, + arg_initialDirectory, arg_suggestedName, arg_confirmButtonText); return [output]; }); } diff --git a/packages/file_selector/file_selector_windows/windows/messages.g.cpp b/packages/file_selector/file_selector_windows/windows/messages.g.cpp index d5bd0e33c3a..24b831e292e 100644 --- a/packages/file_selector/file_selector_windows/windows/messages.g.cpp +++ b/packages/file_selector/file_selector_windows/windows/messages.g.cpp @@ -30,7 +30,9 @@ const std::string& TypeGroup::label() const { return label_; } void TypeGroup::set_label(std::string_view value_arg) { label_ = value_arg; } const EncodableList& TypeGroup::extensions() const { return extensions_; } -void TypeGroup::set_extensions(const EncodableList& value_arg) { extensions_ = value_arg; } +void TypeGroup::set_extensions(const EncodableList& value_arg) { + extensions_ = value_arg; +} EncodableList TypeGroup::ToEncodableList() const { EncodableList list; @@ -44,11 +46,13 @@ TypeGroup::TypeGroup() {} TypeGroup::TypeGroup(const EncodableList& list) { auto& encodable_label = list[0]; - if (const std::string* pointer_label = std::get_if(&encodable_label)) { + if (const std::string* pointer_label = + std::get_if(&encodable_label)) { label_ = *pointer_label; } auto& encodable_extensions = list[1]; - if (const EncodableList* pointer_extensions = std::get_if(&encodable_extensions)) { + if (const EncodableList* pointer_extensions = + std::get_if(&encodable_extensions)) { extensions_ = *pointer_extensions; } } @@ -56,13 +60,21 @@ TypeGroup::TypeGroup(const EncodableList& list) { // SelectionOptions bool SelectionOptions::allow_multiple() const { return allow_multiple_; } -void SelectionOptions::set_allow_multiple(bool value_arg) { allow_multiple_ = value_arg; } +void SelectionOptions::set_allow_multiple(bool value_arg) { + allow_multiple_ = value_arg; +} bool SelectionOptions::select_folders() const { return select_folders_; } -void SelectionOptions::set_select_folders(bool value_arg) { select_folders_ = value_arg; } +void SelectionOptions::set_select_folders(bool value_arg) { + select_folders_ = value_arg; +} -const EncodableList& SelectionOptions::allowed_types() const { return allowed_types_; } -void SelectionOptions::set_allowed_types(const EncodableList& value_arg) { allowed_types_ = value_arg; } +const EncodableList& SelectionOptions::allowed_types() const { + return allowed_types_; +} +void SelectionOptions::set_allowed_types(const EncodableList& value_arg) { + allowed_types_ = value_arg; +} EncodableList SelectionOptions::ToEncodableList() const { EncodableList list; @@ -77,41 +89,54 @@ SelectionOptions::SelectionOptions() {} SelectionOptions::SelectionOptions(const EncodableList& list) { auto& encodable_allow_multiple = list[0]; - if (const bool* pointer_allow_multiple = std::get_if(&encodable_allow_multiple)) { + if (const bool* pointer_allow_multiple = + std::get_if(&encodable_allow_multiple)) { allow_multiple_ = *pointer_allow_multiple; } auto& encodable_select_folders = list[1]; - if (const bool* pointer_select_folders = std::get_if(&encodable_select_folders)) { + if (const bool* pointer_select_folders = + std::get_if(&encodable_select_folders)) { select_folders_ = *pointer_select_folders; } auto& encodable_allowed_types = list[2]; - if (const EncodableList* pointer_allowed_types = std::get_if(&encodable_allowed_types)) { + if (const EncodableList* pointer_allowed_types = + std::get_if(&encodable_allowed_types)) { allowed_types_ = *pointer_allowed_types; } } FileSelectorApiCodecSerializer::FileSelectorApiCodecSerializer() {} -EncodableValue FileSelectorApiCodecSerializer::ReadValueOfType(uint8_t type, flutter::ByteStreamReader* stream) const { +EncodableValue FileSelectorApiCodecSerializer::ReadValueOfType( + uint8_t type, flutter::ByteStreamReader* stream) const { switch (type) { case 128: - return CustomEncodableValue(SelectionOptions(std::get(ReadValue(stream)))); + return CustomEncodableValue( + SelectionOptions(std::get(ReadValue(stream)))); case 129: - return CustomEncodableValue(TypeGroup(std::get(ReadValue(stream)))); + return CustomEncodableValue( + TypeGroup(std::get(ReadValue(stream)))); default: return flutter::StandardCodecSerializer::ReadValueOfType(type, stream); } } -void FileSelectorApiCodecSerializer::WriteValue(const EncodableValue& value, flutter::ByteStreamWriter* stream) const { - if (const CustomEncodableValue* custom_value = std::get_if(&value)) { +void FileSelectorApiCodecSerializer::WriteValue( + const EncodableValue& value, flutter::ByteStreamWriter* stream) const { + if (const CustomEncodableValue* custom_value = + std::get_if(&value)) { if (custom_value->type() == typeid(SelectionOptions)) { stream->WriteByte(128); - WriteValue(EncodableValue(std::any_cast(*custom_value).ToEncodableList()), stream); + WriteValue( + EncodableValue( + std::any_cast(*custom_value).ToEncodableList()), + stream); return; } if (custom_value->type() == typeid(TypeGroup)) { stream->WriteByte(129); - WriteValue(EncodableValue(std::any_cast(*custom_value).ToEncodableList()), stream); + WriteValue(EncodableValue( + std::any_cast(*custom_value).ToEncodableList()), + stream); return; } } @@ -120,73 +145,94 @@ void FileSelectorApiCodecSerializer::WriteValue(const EncodableValue& value, flu /// The codec used by FileSelectorApi. const flutter::StandardMessageCodec& FileSelectorApi::GetCodec() { - return flutter::StandardMessageCodec::GetInstance(&FileSelectorApiCodecSerializer::GetInstance()); + return flutter::StandardMessageCodec::GetInstance( + &FileSelectorApiCodecSerializer::GetInstance()); } -// Sets up an instance of `FileSelectorApi` to handle messages through the `binary_messenger`. -void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger, FileSelectorApi* api) { +// Sets up an instance of `FileSelectorApi` to handle messages through the +// `binary_messenger`. +void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger, + FileSelectorApi* api) { { - auto channel = std::make_unique>(binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showOpenDialog", &GetCodec()); + auto channel = std::make_unique>( + binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showOpenDialog", + &GetCodec()); if (api != nullptr) { - channel->SetMessageHandler([api](const EncodableValue& message, const flutter::MessageReply& reply) { - try { - const auto& args = std::get(message); - const auto& encodable_options_arg = args.at(0); - if (encodable_options_arg.IsNull()) { - reply(WrapError("options_arg unexpectedly null.")); - return; - } - const auto& options_arg = std::any_cast(std::get(encodable_options_arg)); - const auto& encodable_initial_directory_arg = args.at(1); - const auto* initial_directory_arg = std::get_if(&encodable_initial_directory_arg); - const auto& encodable_confirm_button_text_arg = args.at(2); - const auto* confirm_button_text_arg = std::get_if(&encodable_confirm_button_text_arg); - ErrorOr output = api->ShowOpenDialog(options_arg, initial_directory_arg, confirm_button_text_arg); - if (output.has_error()) { - reply(WrapError(output.error())); - return; - } - EncodableList wrapped; - wrapped.push_back(EncodableValue(std::move(output).TakeValue())); - reply(EncodableValue(std::move(wrapped))); - } catch (const std::exception& exception) { - reply(WrapError(exception.what())); - } - }); + channel->SetMessageHandler( + [api](const EncodableValue& message, + const flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_options_arg = args.at(0); + if (encodable_options_arg.IsNull()) { + reply(WrapError("options_arg unexpectedly null.")); + return; + } + const auto& options_arg = std::any_cast( + std::get(encodable_options_arg)); + const auto& encodable_initial_directory_arg = args.at(1); + const auto* initial_directory_arg = + std::get_if(&encodable_initial_directory_arg); + const auto& encodable_confirm_button_text_arg = args.at(2); + const auto* confirm_button_text_arg = + std::get_if(&encodable_confirm_button_text_arg); + ErrorOr output = api->ShowOpenDialog( + options_arg, initial_directory_arg, confirm_button_text_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); } else { channel->SetMessageHandler(nullptr); } } { - auto channel = std::make_unique>(binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showSaveDialog", &GetCodec()); + auto channel = std::make_unique>( + binary_messenger, "dev.flutter.pigeon.FileSelectorApi.showSaveDialog", + &GetCodec()); if (api != nullptr) { - channel->SetMessageHandler([api](const EncodableValue& message, const flutter::MessageReply& reply) { - try { - const auto& args = std::get(message); - const auto& encodable_options_arg = args.at(0); - if (encodable_options_arg.IsNull()) { - reply(WrapError("options_arg unexpectedly null.")); - return; - } - const auto& options_arg = std::any_cast(std::get(encodable_options_arg)); - const auto& encodable_initial_directory_arg = args.at(1); - const auto* initial_directory_arg = std::get_if(&encodable_initial_directory_arg); - const auto& encodable_suggested_name_arg = args.at(2); - const auto* suggested_name_arg = std::get_if(&encodable_suggested_name_arg); - const auto& encodable_confirm_button_text_arg = args.at(3); - const auto* confirm_button_text_arg = std::get_if(&encodable_confirm_button_text_arg); - ErrorOr output = api->ShowSaveDialog(options_arg, initial_directory_arg, suggested_name_arg, confirm_button_text_arg); - if (output.has_error()) { - reply(WrapError(output.error())); - return; - } - EncodableList wrapped; - wrapped.push_back(EncodableValue(std::move(output).TakeValue())); - reply(EncodableValue(std::move(wrapped))); - } catch (const std::exception& exception) { - reply(WrapError(exception.what())); - } - }); + channel->SetMessageHandler( + [api](const EncodableValue& message, + const flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_options_arg = args.at(0); + if (encodable_options_arg.IsNull()) { + reply(WrapError("options_arg unexpectedly null.")); + return; + } + const auto& options_arg = std::any_cast( + std::get(encodable_options_arg)); + const auto& encodable_initial_directory_arg = args.at(1); + const auto* initial_directory_arg = + std::get_if(&encodable_initial_directory_arg); + const auto& encodable_suggested_name_arg = args.at(2); + const auto* suggested_name_arg = + std::get_if(&encodable_suggested_name_arg); + const auto& encodable_confirm_button_text_arg = args.at(3); + const auto* confirm_button_text_arg = + std::get_if(&encodable_confirm_button_text_arg); + ErrorOr output = api->ShowSaveDialog( + options_arg, initial_directory_arg, suggested_name_arg, + confirm_button_text_arg); + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); } else { channel->SetMessageHandler(nullptr); } @@ -194,18 +240,14 @@ void FileSelectorApi::SetUp(flutter::BinaryMessenger* binary_messenger, FileSele } EncodableValue FileSelectorApi::WrapError(std::string_view error_message) { - return EncodableValue(EncodableList{ - EncodableValue(std::string(error_message)), - EncodableValue("Error"), - EncodableValue() - }); + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); } EncodableValue FileSelectorApi::WrapError(const FlutterError& error) { - return EncodableValue(EncodableList{ - EncodableValue(error.code()), - EncodableValue(error.message()), - error.details() - }); + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); } } // namespace file_selector_windows diff --git a/packages/file_selector/file_selector_windows/windows/messages.g.h b/packages/file_selector/file_selector_windows/windows/messages.g.h index aeee1aaf0a8..248ca89c977 100644 --- a/packages/file_selector/file_selector_windows/windows/messages.g.h +++ b/packages/file_selector/file_selector_windows/windows/messages.g.h @@ -17,17 +17,16 @@ namespace file_selector_windows { - // Generated class from Pigeon. class FlutterError { public: - explicit FlutterError(const std::string& code) - : code_(code) {} + explicit FlutterError(const std::string& code) : code_(code) {} explicit FlutterError(const std::string& code, const std::string& message) - : code_(code), message_(message) {} - explicit FlutterError(const std::string& code, const std::string& message, const flutter::EncodableValue& details) - : code_(code), message_(message), details_(details) {} + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, + const flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} const std::string& code() const { return code_; } const std::string& message() const { return message_; } @@ -39,13 +38,12 @@ class FlutterError { flutter::EncodableValue details_; }; -template class ErrorOr { +template +class ErrorOr { public: - ErrorOr(const T& rhs) { new(&v_) T(rhs); } + ErrorOr(const T& rhs) { new (&v_) T(rhs); } ErrorOr(const T&& rhs) { v_ = std::move(rhs); } - ErrorOr(const FlutterError& rhs) { - new(&v_) FlutterError(rhs); - } + ErrorOr(const FlutterError& rhs) { new (&v_) FlutterError(rhs); } ErrorOr(const FlutterError&& rhs) { v_ = std::move(rhs); } bool has_error() const { return std::holds_alternative(v_); } @@ -60,7 +58,6 @@ template class ErrorOr { std::variant v_; }; - // Generated class from Pigeon that represents data sent in messages. class TypeGroup { public: @@ -71,7 +68,6 @@ class TypeGroup { const flutter::EncodableList& extensions() const; void set_extensions(const flutter::EncodableList& value_arg); - private: TypeGroup(const flutter::EncodableList& list); flutter::EncodableList ToEncodableList() const; @@ -79,10 +75,8 @@ class TypeGroup { friend class FileSelectorApiCodecSerializer; std::string label_; flutter::EncodableList extensions_; - }; - // Generated class from Pigeon that represents data sent in messages. class SelectionOptions { public: @@ -96,7 +90,6 @@ class SelectionOptions { const flutter::EncodableList& allowed_types() const; void set_allowed_types(const flutter::EncodableList& value_arg); - private: SelectionOptions(const flutter::EncodableList& list); flutter::EncodableList ToEncodableList() const; @@ -105,12 +98,10 @@ class SelectionOptions { bool allow_multiple_; bool select_folders_; flutter::EncodableList allowed_types_; - }; class FileSelectorApiCodecSerializer : public flutter::StandardCodecSerializer { public: - inline static FileSelectorApiCodecSerializer& GetInstance() { static FileSelectorApiCodecSerializer sInstance; return sInstance; @@ -119,32 +110,40 @@ class FileSelectorApiCodecSerializer : public flutter::StandardCodecSerializer { FileSelectorApiCodecSerializer(); public: - void WriteValue(const flutter::EncodableValue& value, flutter::ByteStreamWriter* stream) const override; + void WriteValue(const flutter::EncodableValue& value, + flutter::ByteStreamWriter* stream) const override; protected: - flutter::EncodableValue ReadValueOfType(uint8_t type, flutter::ByteStreamReader* stream) const override; - + flutter::EncodableValue ReadValueOfType( + uint8_t type, flutter::ByteStreamReader* stream) const override; }; -// Generated interface from Pigeon that represents a handler of messages from Flutter. +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. class FileSelectorApi { public: FileSelectorApi(const FileSelectorApi&) = delete; FileSelectorApi& operator=(const FileSelectorApi&) = delete; virtual ~FileSelectorApi() {} - virtual ErrorOr ShowOpenDialog(const SelectionOptions& options, const std::string* initial_directory, const std::string* confirm_button_text) = 0; - virtual ErrorOr ShowSaveDialog(const SelectionOptions& options, const std::string* initial_directory, const std::string* suggested_name, const std::string* confirm_button_text) = 0; + virtual ErrorOr ShowOpenDialog( + const SelectionOptions& options, const std::string* initial_directory, + const std::string* confirm_button_text) = 0; + virtual ErrorOr ShowSaveDialog( + const SelectionOptions& options, const std::string* initial_directory, + const std::string* suggested_name, + const std::string* confirm_button_text) = 0; // The codec used by FileSelectorApi. static const flutter::StandardMessageCodec& GetCodec(); - // Sets up an instance of `FileSelectorApi` to handle messages through the `binary_messenger`. - static void SetUp(flutter::BinaryMessenger* binary_messenger, FileSelectorApi* api); + // Sets up an instance of `FileSelectorApi` to handle messages through the + // `binary_messenger`. + static void SetUp(flutter::BinaryMessenger* binary_messenger, + FileSelectorApi* api); static flutter::EncodableValue WrapError(std::string_view error_message); static flutter::EncodableValue WrapError(const FlutterError& error); protected: FileSelectorApi() = default; - }; } // namespace file_selector_windows #endif // PIGEON_MESSAGES_G_H_ From f4182ec1ce525acd0cf4d14b49e2d54818180fa1 Mon Sep 17 00:00:00 2001 From: Nate Bosch Date: Mon, 27 Mar 2023 18:23:54 +0000 Subject: [PATCH 06/10] Phrasing an + version --- packages/file_selector/file_selector_ios/CHANGELOG.md | 4 ++-- packages/file_selector/file_selector_ios/pubspec.yaml | 2 +- packages/file_selector/file_selector_macos/CHANGELOG.md | 4 ++-- packages/file_selector/file_selector_macos/pubspec.yaml | 2 +- packages/file_selector/file_selector_windows/CHANGELOG.md | 4 ++-- packages/file_selector/file_selector_windows/pubspec.yaml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/file_selector/file_selector_ios/CHANGELOG.md b/packages/file_selector/file_selector_ios/CHANGELOG.md index 6e29fe8c663..1404a746fd4 100644 --- a/packages/file_selector/file_selector_ios/CHANGELOG.md +++ b/packages/file_selector/file_selector_ios/CHANGELOG.md @@ -1,6 +1,6 @@ -## 0.5.2 +## 0.5.1+2 -* Update to `pigeon` version 9. +* Updates to `pigeon` version 9. ## 0.5.1+1 diff --git a/packages/file_selector/file_selector_ios/pubspec.yaml b/packages/file_selector/file_selector_ios/pubspec.yaml index 077fe8e717e..7e452fe51f9 100644 --- a/packages/file_selector/file_selector_ios/pubspec.yaml +++ b/packages/file_selector/file_selector_ios/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_ios description: iOS implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_ios issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.5.2 +version: 0.5.1+2 environment: sdk: ">=2.18.0 <4.0.0" diff --git a/packages/file_selector/file_selector_macos/CHANGELOG.md b/packages/file_selector/file_selector_macos/CHANGELOG.md index d6e3041dc97..a02f6be3c15 100644 --- a/packages/file_selector/file_selector_macos/CHANGELOG.md +++ b/packages/file_selector/file_selector_macos/CHANGELOG.md @@ -1,6 +1,6 @@ -## 0.9.1 +## 0.9.0+7 -* Update to `pigeon` version 9. +* Updates to `pigeon` version 9. ## 0.9.0+6 diff --git a/packages/file_selector/file_selector_macos/pubspec.yaml b/packages/file_selector/file_selector_macos/pubspec.yaml index 272d8afc86a..da99217761a 100644 --- a/packages/file_selector/file_selector_macos/pubspec.yaml +++ b/packages/file_selector/file_selector_macos/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_macos description: macOS implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_macos issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.1 +version: 0.9.0+7 environment: sdk: ">=2.17.0 <4.0.0" diff --git a/packages/file_selector/file_selector_windows/CHANGELOG.md b/packages/file_selector/file_selector_windows/CHANGELOG.md index 6343a7f69c8..b3c41bacdac 100644 --- a/packages/file_selector/file_selector_windows/CHANGELOG.md +++ b/packages/file_selector/file_selector_windows/CHANGELOG.md @@ -1,6 +1,6 @@ -## 0.9.2 +## 0.9.1+7 -* Update to `pigeon` version 9. +* Updates to `pigeon` version 9. ## 0.9.1+6 diff --git a/packages/file_selector/file_selector_windows/pubspec.yaml b/packages/file_selector/file_selector_windows/pubspec.yaml index 54c13519035..faf4239c1dd 100644 --- a/packages/file_selector/file_selector_windows/pubspec.yaml +++ b/packages/file_selector/file_selector_windows/pubspec.yaml @@ -2,7 +2,7 @@ name: file_selector_windows description: Windows implementation of the file_selector plugin. repository: https://github.com/flutter/packages/tree/main/packages/file_selector/file_selector_windows issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+file_selector%22 -version: 0.9.2 +version: 0.9.1+7 environment: sdk: ">=2.17.0 <4.0.0" From 1b5838bc807fb7a5bc23fd91c5c7c1cfe1e32f63 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 27 Mar 2023 14:24:57 -0400 Subject: [PATCH 07/10] Fix compilation --- .../macos/Classes/FileSelectorPlugin.swift | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift b/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift index 4e1c935dad7..c70e9f33eb5 100644 --- a/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift +++ b/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift @@ -60,20 +60,19 @@ public class FileSelectorPlugin: NSObject, FlutterPlugin, FileSelectorApi { self.panelController = panelController } - func displayOpenPanel(options: OpenPanelOptions, completion: @escaping ([String?]) -> Void) { - + func displayOpenPanel(options: OpenPanelOptions, completion: @escaping (Result<[String?], Error>) -> Void) { let panel = NSOpenPanel() configure(openPanel: panel, with: options) panelController.display(panel, for: viewProvider.view?.window) { (selection: [URL]?) in - completion(selection?.map({ item in item.path }) ?? []) + completion(.success(selection?.map({ item in item.path }) ?? [])) } } - func displaySavePanel(options: SavePanelOptions, completion: @escaping (String?) -> Void) { + func displaySavePanel(options: SavePanelOptions, completion: @escaping (Result) -> Void) { let panel = NSSavePanel() configure(panel: panel, with: options) panelController.display(panel, for: viewProvider.view?.window) { (selection: URL?) in - completion(selection?.path) + completion(.success(selection?.path)) } } From cd9c9827bdc9c6e673411e9bfa068d1412be1eb0 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 27 Mar 2023 14:27:32 -0400 Subject: [PATCH 08/10] Autoformat swift --- .../macos/Classes/FileSelectorPlugin.swift | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift b/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift index c70e9f33eb5..836fcf94244 100644 --- a/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift +++ b/packages/file_selector/file_selector_macos/macos/Classes/FileSelectorPlugin.swift @@ -16,7 +16,7 @@ protocol PanelController { func display( _ panel: NSSavePanel, for window: NSWindow?, - completionHandler: @escaping (URL?) -> Void); + completionHandler: @escaping (URL?) -> Void) /// Displays the given open panel, and provides the selected URLs, or nil if the panel is /// cancelled, to the handler. @@ -27,7 +27,7 @@ protocol PanelController { func display( _ panel: NSOpenPanel, for window: NSWindow?, - completionHandler: @escaping ([URL]?) -> Void); + completionHandler: @escaping ([URL]?) -> Void) } /// Protocol to provide access to the Flutter view, allowing for dependency injection in tests. @@ -60,7 +60,9 @@ public class FileSelectorPlugin: NSObject, FlutterPlugin, FileSelectorApi { self.panelController = panelController } - func displayOpenPanel(options: OpenPanelOptions, completion: @escaping (Result<[String?], Error>) -> Void) { + func displayOpenPanel( + options: OpenPanelOptions, completion: @escaping (Result<[String?], Error>) -> Void + ) { let panel = NSOpenPanel() configure(openPanel: panel, with: options) panelController.display(panel, for: viewProvider.view?.window) { (selection: [URL]?) in @@ -68,7 +70,9 @@ public class FileSelectorPlugin: NSObject, FlutterPlugin, FileSelectorApi { } } - func displaySavePanel(options: SavePanelOptions, completion: @escaping (Result) -> Void) { + func displaySavePanel( + options: SavePanelOptions, completion: @escaping (Result) -> Void + ) { let panel = NSSavePanel() configure(panel: panel, with: options) panelController.display(panel, for: viewProvider.view?.window) { (selection: URL?) in @@ -117,8 +121,8 @@ public class FileSelectorPlugin: NSObject, FlutterPlugin, FileSelectorApi { ) { configure(panel: panel, with: options.baseOptions) panel.allowsMultipleSelection = options.allowsMultipleSelection - panel.canChooseDirectories = options.canChooseDirectories; - panel.canChooseFiles = options.canChooseFiles; + panel.canChooseDirectories = options.canChooseDirectories + panel.canChooseFiles = options.canChooseFiles } } @@ -165,8 +169,6 @@ private class DefaultViewProvider: ViewProvider { } var view: NSView? { - get { - registrar.view - } + registrar.view } } From c68f59296769f7814f20c2e81f575fcde296cd29 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 27 Mar 2023 15:21:45 -0400 Subject: [PATCH 09/10] Update native tests for API adjustment --- .../macos/RunnerTests/RunnerTests.swift | 94 ++++++++++++++----- 1 file changed, 72 insertions(+), 22 deletions(-) diff --git a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift index 2dbd016f66e..a89a610ba3f 100644 --- a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift +++ b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift @@ -52,8 +52,13 @@ class exampleTests: XCTestCase { canChooseDirectories: false, canChooseFiles: true, baseOptions: SavePanelOptions()) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths[0], returnPath) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths[0], returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -84,8 +89,13 @@ class exampleTests: XCTestCase { directoryPath: "/some/dir", nameFieldStringValue: "a name", prompt: "Open it!")) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths[0], returnPath) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths[0], returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -113,10 +123,15 @@ class exampleTests: XCTestCase { canChooseDirectories: false, canChooseFiles: true, baseOptions: SavePanelOptions()) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths.count, returnPaths.count) - XCTAssertEqual(paths[0], returnPaths[0]) - XCTAssertEqual(paths[1], returnPaths[1]) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths.count, returnPaths.count) + XCTAssertEqual(paths[0], returnPaths[0]) + XCTAssertEqual(paths[1], returnPaths[1]) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -143,8 +158,13 @@ class exampleTests: XCTestCase { extensions: ["txt", "json"], mimeTypes: [], utis: ["public.text", "public.image"]))) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths[0], returnPath) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths[0], returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -167,8 +187,13 @@ class exampleTests: XCTestCase { canChooseDirectories: false, canChooseFiles: true, baseOptions: SavePanelOptions()) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths.count, 0) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths.count, 0) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -187,8 +212,13 @@ class exampleTests: XCTestCase { let called = XCTestExpectation() let options = SavePanelOptions() - plugin.displaySavePanel(options: options) { path in - XCTAssertEqual(path, returnPath) + plugin.displaySavePanel(options: options) { result in + switch(result) { + case .success(let path): + XCTAssertEqual(path, returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -209,8 +239,13 @@ class exampleTests: XCTestCase { let options = SavePanelOptions( directoryPath: "/some/dir", prompt: "Save it!") - plugin.displaySavePanel(options: options) { path in - XCTAssertEqual(path, returnPath) + plugin.displaySavePanel(options: options) { result in + switch(result) { + case .success(let path): + XCTAssertEqual(path, returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -230,8 +265,13 @@ class exampleTests: XCTestCase { let called = XCTestExpectation() let options = SavePanelOptions() - plugin.displaySavePanel(options: options) { path in - XCTAssertNil(path) + plugin.displaySavePanel(options: options) { result in + switch(result) { + case .success(let path): + XCTAssertNil(path) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -254,8 +294,13 @@ class exampleTests: XCTestCase { canChooseDirectories: true, canChooseFiles: false, baseOptions: SavePanelOptions()) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths[0], returnPath) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths[0], returnPath) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } @@ -283,8 +328,13 @@ class exampleTests: XCTestCase { canChooseDirectories: true, canChooseFiles: false, baseOptions: SavePanelOptions()) - plugin.displayOpenPanel(options: options) { paths in - XCTAssertEqual(paths.count, 0) + plugin.displayOpenPanel(options: options) { result in + switch(result) { + case .success(let paths): + XCTAssertEqual(paths.count, 0) + case .failure(let error): + XCTFail("\(error)") + } called.fulfill() } From 5b248770043fc4cb3ec670368984d5105a9dba00 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 27 Mar 2023 15:22:37 -0400 Subject: [PATCH 10/10] Autoformat swift tests --- .../macos/RunnerTests/RunnerTests.swift | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift index a89a610ba3f..fcd39c61117 100644 --- a/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift +++ b/packages/file_selector/file_selector_macos/example/macos/RunnerTests/RunnerTests.swift @@ -2,10 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -@testable import file_selector_macos import FlutterMacOS import XCTest +@testable import file_selector_macos + class TestPanelController: NSObject, PanelController { // The last panels that the relevant display methods were called on. public var savePanel: NSSavePanel? @@ -15,12 +16,17 @@ class TestPanelController: NSObject, PanelController { public var saveURL: URL? public var openURLs: [URL]? - func display(_ panel: NSSavePanel, for window: NSWindow?, completionHandler handler: @escaping (URL?) -> Void) { + func display( + _ panel: NSSavePanel, for window: NSWindow?, completionHandler handler: @escaping (URL?) -> Void + ) { savePanel = panel handler(saveURL) } - func display(_ panel: NSOpenPanel, for window: NSWindow?, completionHandler handler: @escaping ([URL]?) -> Void) { + func display( + _ panel: NSOpenPanel, for window: NSWindow?, + completionHandler handler: @escaping ([URL]?) -> Void + ) { openPanel = panel handler(openURLs) } @@ -28,9 +34,7 @@ class TestPanelController: NSObject, PanelController { class TestViewProvider: NSObject, ViewProvider { var view: NSView? { - get { - window?.contentView - } + window?.contentView } var window: NSWindow? = NSWindow() } @@ -53,7 +57,7 @@ class exampleTests: XCTestCase { canChooseFiles: true, baseOptions: SavePanelOptions()) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths[0], returnPath) case .failure(let error): @@ -90,7 +94,7 @@ class exampleTests: XCTestCase { nameFieldStringValue: "a name", prompt: "Open it!")) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths[0], returnPath) case .failure(let error): @@ -124,7 +128,7 @@ class exampleTests: XCTestCase { canChooseFiles: true, baseOptions: SavePanelOptions()) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths.count, returnPaths.count) XCTAssertEqual(paths[0], returnPaths[0]) @@ -159,7 +163,7 @@ class exampleTests: XCTestCase { mimeTypes: [], utis: ["public.text", "public.image"]))) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths[0], returnPath) case .failure(let error): @@ -188,7 +192,7 @@ class exampleTests: XCTestCase { canChooseFiles: true, baseOptions: SavePanelOptions()) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths.count, 0) case .failure(let error): @@ -213,7 +217,7 @@ class exampleTests: XCTestCase { let called = XCTestExpectation() let options = SavePanelOptions() plugin.displaySavePanel(options: options) { result in - switch(result) { + switch result { case .success(let path): XCTAssertEqual(path, returnPath) case .failure(let error): @@ -240,7 +244,7 @@ class exampleTests: XCTestCase { directoryPath: "/some/dir", prompt: "Save it!") plugin.displaySavePanel(options: options) { result in - switch(result) { + switch result { case .success(let path): XCTAssertEqual(path, returnPath) case .failure(let error): @@ -266,7 +270,7 @@ class exampleTests: XCTestCase { let called = XCTestExpectation() let options = SavePanelOptions() plugin.displaySavePanel(options: options) { result in - switch(result) { + switch result { case .success(let path): XCTAssertNil(path) case .failure(let error): @@ -295,7 +299,7 @@ class exampleTests: XCTestCase { canChooseFiles: false, baseOptions: SavePanelOptions()) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths[0], returnPath) case .failure(let error): @@ -329,7 +333,7 @@ class exampleTests: XCTestCase { canChooseFiles: false, baseOptions: SavePanelOptions()) plugin.displayOpenPanel(options: options) { result in - switch(result) { + switch result { case .success(let paths): XCTAssertEqual(paths.count, 0) case .failure(let error):