[Pigeon] Condenses serialization formats (#2745)

* Fixs missed indents on generated comments

* begin improved serialization

* formatting errors

* Dart encoder updated to use lists, tests to match

* Begin swift serial, change error shape

* update tests for swift and dart

* true > false

* Return to Object

* correctly nest lists in dart and tests

* Kotlin gen and tests updated to lists

* Java and Tests updated to new serials

* Stuart check this pr (start of objc changes)

* obj c tests for serial

* update unit tests to match new generated outputs

* finish objc tests

* More kt tests

* c++ generator and unit tests

* analyze, format, changelog

* test file updates for ci

* format and analyze again

* a few more test generated files

* Partial Windows fixes

- Fix API call typo.
- Fix double nesting of arrays for class serialization.
- Replace incorrect emplace calls with push_back.
- Start to update unit tests.

* null field tests c++

* format

* fix merge issue with broken test

* remove unneeded wrapping

* generated files

* fix some formatting errors

* format

* more gen files

* gen files

* generator reviews pt1

* test fixes pt1

* fixed nits and nil issues with objc

* better fix for objc null classes

* fix doc comment

* unit test updates

* format

* some c++ fixes

* typo

* format

* Some nits and such

* comment

* remove deleted files

* c++ nits

* objc nits

* all but one c++ bug

* init all fields

* start of documenting data shape

* nits and error handling

* more nits and such

* bug?

* references

* const

* new null for larger alltypes

Co-authored-by: Stuart Morgan <stuartmorgan@google.com>
This commit is contained in:
Tarrin Neal
2022-12-17 23:55:13 -08:00
committed by GitHub
parent e381bfdbd8
commit 5662a7e579
61 changed files with 1775 additions and 1848 deletions

View File

@ -1,3 +1,7 @@
## 4.2.12
* Updates serialization to use lists instead of maps to improve performance.
## 4.2.11
* [swift] Fixes compressed list data types.

View File

@ -108,7 +108,7 @@ void _writeCodecSource(Indent indent, Api api, Root root) {
indent.write('case ${customClass.enumeration}:');
indent.writeScoped('', '', () {
indent.writeln(
'return flutter::CustomEncodableValue(${customClass.name}(std::get<flutter::EncodableMap>(ReadValue(stream))));');
'return flutter::CustomEncodableValue(${customClass.name}(std::get<flutter::EncodableList>(ReadValue(stream))));');
});
}
indent.write('default:');
@ -131,7 +131,7 @@ void _writeCodecSource(Indent indent, Api api, Root root) {
indent.scoped('{', '}', () {
indent.writeln('stream->WriteByte(${customClass.enumeration});');
indent.writeln(
'WriteValue(std::any_cast<${customClass.name}>(*custom_value).ToEncodableMap(), stream);');
'WriteValue(flutter::EncodableValue(std::any_cast<${customClass.name}>(*custom_value).ToEncodableList()), stream);');
indent.writeln('return;');
});
}
@ -207,7 +207,7 @@ void _writeDataClassDeclaration(Indent indent, Class klass, Root root,
indent.scoped('{', '};', () {
indent.scoped(' public:', '', () {
indent.writeln('${klass.name}();');
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
addDocumentationComments(
indent, field.documentationComments, _docCommentSpec);
final HostDatatype baseDatatype = getFieldHostDatatype(
@ -232,8 +232,8 @@ void _writeDataClassDeclaration(Indent indent, Class klass, Root root,
});
indent.scoped(' private:', '', () {
indent.writeln('${klass.name}(flutter::EncodableMap map);');
indent.writeln('flutter::EncodableMap ToEncodableMap() const;');
indent.writeln('${klass.name}(const flutter::EncodableList& list);');
indent.writeln('flutter::EncodableList ToEncodableList() const;');
for (final Class friend in root.classes) {
if (friend != klass &&
friend.fields.any(
@ -251,7 +251,7 @@ void _writeDataClassDeclaration(Indent indent, Class klass, Root root,
indent.writeln('friend class $testFriend;');
}
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(
field,
root.classes,
@ -280,7 +280,7 @@ void _writeDataClassImplementation(Indent indent, Class klass, Root root) {
indent.addln('');
// Getters and setters.
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(field, root.classes,
root.enums, (TypeDeclaration x) => _baseCppTypeForBuiltinDartType(x));
final String instanceVariableName = _makeInstanceVariableName(field);
@ -317,10 +317,11 @@ void _writeDataClassImplementation(Indent indent, Class klass, Root root) {
}
// Serialization.
indent.write('flutter::EncodableMap ${klass.name}::ToEncodableMap() const ');
indent
.write('flutter::EncodableList ${klass.name}::ToEncodableList() const ');
indent.scoped('{', '}', () {
indent.scoped('return flutter::EncodableMap{', '};', () {
for (final NamedType field in klass.fields) {
indent.scoped('return flutter::EncodableList{', '};', () {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(
field,
root.classes,
@ -329,12 +330,12 @@ void _writeDataClassImplementation(Indent indent, Class klass, Root root) {
final String instanceVariable = _makeInstanceVariableName(field);
final String encodableKey = 'flutter::EncodableValue("${field.name}")';
String encodableValue = '';
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
final String operator = field.type.isNullable ? '->' : '.';
encodableValue = '$instanceVariable${operator}ToEncodableMap()';
encodableValue =
'flutter::EncodableValue($instanceVariable${operator}ToEncodableList())';
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
final String nonNullValue =
@ -351,7 +352,7 @@ void _writeDataClassImplementation(Indent indent, Class klass, Root root) {
'$instanceVariable ? $encodableValue : flutter::EncodableValue()';
}
indent.writeln('{$encodableKey, $encodableValue},');
indent.writeln('$encodableValue,');
}
});
});
@ -362,16 +363,17 @@ void _writeDataClassImplementation(Indent indent, Class klass, Root root) {
indent.addln('');
// Deserialization.
indent.write('${klass.name}::${klass.name}(flutter::EncodableMap map) ');
indent.write(
'${klass.name}::${klass.name}(const flutter::EncodableList& list) ');
indent.scoped('{', '}', () {
for (final NamedType field in klass.fields) {
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
final String instanceVariableName = _makeInstanceVariableName(field);
final String pointerFieldName =
'${_pointerPrefix}_${_makeVariableName(field)}';
final String encodableFieldName =
'${_encodablePrefix}_${_makeVariableName(field)}';
indent.writeln(
'auto& $encodableFieldName = map.at(flutter::EncodableValue("${field.name}"));');
indent.writeln('auto& $encodableFieldName = list[$index];');
if (rootEnumNameSet.contains(field.type.baseName)) {
indent.writeln(
'if (const int32_t* $pointerFieldName = std::get_if<int32_t>(&$encodableFieldName))\t$instanceVariableName = (${field.type.baseName})*$pointerFieldName;');
@ -392,7 +394,7 @@ else if (const int64_t* ${pointerFieldName}_64 = std::get_if<int64_t>(&$encodabl
.map((Class x) => x.name)
.contains(field.type.baseName)) {
indent.write(
'if (const flutter::EncodableMap* $pointerFieldName = std::get_if<flutter::EncodableMap>(&$encodableFieldName)) ');
'if (const flutter::EncodableList* $pointerFieldName = std::get_if<flutter::EncodableList>(&$encodableFieldName)) ');
indent.scoped('{', '}', () {
indent.writeln(
'$instanceVariableName = ${hostDatatype.datatype}(*$pointerFieldName);');
@ -405,7 +407,7 @@ else if (const int64_t* ${pointerFieldName}_64 = std::get_if<int64_t>(&$encodabl
});
}
}
}
});
});
indent.addln('');
}
@ -471,9 +473,9 @@ void _writeHostApiHeader(Indent indent, Api api, Root root) {
indent.writeln(
'static void SetUp(flutter::BinaryMessenger* binary_messenger, ${api.name}* api);');
indent.writeln(
'static flutter::EncodableMap WrapError(std::string_view error_message);');
'static flutter::EncodableList WrapError(std::string_view error_message);');
indent.writeln(
'static flutter::EncodableMap WrapError(const FlutterError& error);');
'static flutter::EncodableList WrapError(const FlutterError& error);');
});
indent.scoped(' protected:', '', () {
indent.writeln('${api.name}() = default;');
@ -514,7 +516,7 @@ const flutter::StandardMessageCodec& ${api.name}::GetCodec() {
indent.write(
'channel->SetMessageHandler([api](const flutter::EncodableValue& message, const flutter::MessageReply<flutter::EncodableValue>& reply) ');
indent.scoped('{', '});', () {
indent.writeln('flutter::EncodableMap wrapped;');
indent.writeln('flutter::EncodableList wrapped;');
indent.write('try ');
indent.scoped('{', '}', () {
final List<String> methodArgument = <String>[];
@ -588,8 +590,7 @@ const flutter::StandardMessageCodec& ${api.name}::GetCodec() {
indent.write('if ($encodableArgName.IsNull()) ');
indent.scoped('{', '}', () {
indent.writeln(
'wrapped.emplace(flutter::EncodableValue("${Keys.error}"), WrapError("$argName unexpectedly null."));');
indent.writeln('reply(wrapped);');
'reply(WrapError("$argName unexpectedly null."));');
indent.writeln('return;');
});
}
@ -605,14 +606,10 @@ const flutter::StandardMessageCodec& ${api.name}::GetCodec() {
final String errorGetter;
final String prefix = (reply != '') ? '\t' : '';
const String resultKey =
'flutter::EncodableValue("${Keys.result}")';
const String errorKey =
'flutter::EncodableValue("${Keys.error}")';
const String nullValue = 'flutter::EncodableValue()';
if (returnType.isVoid) {
elseBody =
'$prefix\twrapped.emplace($resultKey, $nullValue);${indent.newline}';
'$prefix\twrapped.push_back($nullValue);${indent.newline}';
ifCondition = 'output.has_value()';
errorGetter = 'value';
} else {
@ -631,24 +628,23 @@ const flutter::StandardMessageCodec& ${api.name}::GetCodec() {
elseBody = '''
$prefix\tauto output_optional = $extractedValue;
$prefix\tif (output_optional) {
$prefix\t\twrapped.emplace($resultKey, $wrapperType(std::move(output_optional).value()));
$prefix\t\twrapped.push_back($wrapperType(std::move(output_optional).value()));
$prefix\t} else {
$prefix\t\twrapped.emplace($resultKey, $nullValue);
$prefix\t\twrapped.push_back($nullValue);
$prefix\t}${indent.newline}''';
} else {
elseBody =
'$prefix\twrapped.emplace($resultKey, $wrapperType($extractedValue));${indent.newline}';
'$prefix\twrapped.push_back($wrapperType($extractedValue));${indent.newline}';
}
ifCondition = 'output.has_error()';
errorGetter = 'error';
}
return '${prefix}if ($ifCondition) {${indent.newline}'
'$prefix\twrapped.emplace($errorKey, WrapError(output.$errorGetter()));${indent.newline}'
'$prefix$reply'
'$prefix\twrapped = WrapError(output.$errorGetter());${indent.newline}'
'$prefix} else {${indent.newline}'
'$elseBody'
'$prefix$reply'
'$prefix}';
'$prefix}'
'$prefix$reply';
}
final HostDatatype returnType = getHostDatatype(
@ -675,8 +671,7 @@ $prefix\t}${indent.newline}''';
});
indent.write('catch (const std::exception& exception) ');
indent.scoped('{', '}', () {
indent.writeln(
'wrapped.emplace(flutter::EncodableValue("${Keys.error}"), WrapError(exception.what()));');
indent.writeln('wrapped = WrapError(exception.what());');
if (method.isAsynchronous) {
indent.writeln('reply(wrapped);');
}
@ -821,7 +816,7 @@ else if (const int64_t* ${pointerVariable}_64 = std::get_if<int64_t>(&args))
\t$output = *${pointerVariable}_64;''');
} else if (!isBuiltin) {
indent.write(
'if (const flutter::EncodableMap* $pointerVariable = std::get_if<flutter::EncodableMap>(&args)) ');
'if (const flutter::EncodableList* $pointerVariable = std::get_if<flutter::EncodableList>(&args)) ');
indent.scoped('{', '}', () {
indent.writeln('$output = $returnTypeName(*$pointerVariable);');
});
@ -1064,12 +1059,10 @@ void generateCppHeader(
indent, anEnum.documentationComments, _docCommentSpec);
indent.write('enum class ${anEnum.name} ');
indent.scoped('{', '};', () {
int index = 0;
for (final String member in anEnum.members) {
enumerate(anEnum.members, (int index, final String member) {
indent.writeln(
'$member = $index${index == anEnum.members.length - 1 ? '' : ','}');
index++;
}
});
});
}
@ -1150,18 +1143,18 @@ void generateCppSource(CppOptions options, Root root, StringSink sink) {
indent.addln('');
indent.format('''
flutter::EncodableMap ${api.name}::WrapError(std::string_view error_message) {
\treturn flutter::EncodableMap({
\t\t{flutter::EncodableValue("${Keys.errorMessage}"), flutter::EncodableValue(std::string(error_message))},
\t\t{flutter::EncodableValue("${Keys.errorCode}"), flutter::EncodableValue("Error")},
\t\t{flutter::EncodableValue("${Keys.errorDetails}"), flutter::EncodableValue()}
flutter::EncodableList ${api.name}::WrapError(std::string_view error_message) {
\treturn flutter::EncodableList({
\t\tflutter::EncodableValue(std::string(error_message)),
\t\tflutter::EncodableValue("Error"),
\t\tflutter::EncodableValue()
\t});
}
flutter::EncodableMap ${api.name}::WrapError(const FlutterError& error) {
\treturn flutter::EncodableMap({
\t\t{flutter::EncodableValue("${Keys.errorMessage}"), flutter::EncodableValue(error.message())},
\t\t{flutter::EncodableValue("${Keys.errorCode}"), flutter::EncodableValue(error.code())},
\t\t{flutter::EncodableValue("${Keys.errorDetails}"), error.details()}
flutter::EncodableList ${api.name}::WrapError(const FlutterError& error) {
\treturn flutter::EncodableList({
\t\tflutter::EncodableValue(error.message()),
\t\tflutter::EncodableValue(error.code()),
\t\terror.details()
\t});
}''');
indent.addln('');

View File

@ -73,22 +73,27 @@ void _writeCodec(Indent indent, String codecName, Api api, Root root) {
assert(getCodecClasses(api, root).isNotEmpty);
final Iterable<EnumeratedClass> codecClasses = getCodecClasses(api, root);
indent.write('class $codecName extends $_standardMessageCodec');
indent.scoped('{', '}', () {
indent.scoped(' {', '}', () {
indent.writeln('const $codecName();');
indent.writeln('@override');
indent.write('void writeValue(WriteBuffer buffer, Object? value) ');
indent.scoped('{', '}', () {
for (final EnumeratedClass customClass in codecClasses) {
indent.write('if (value is ${customClass.name}) ');
enumerate(codecClasses, (int index, final EnumeratedClass customClass) {
final String ifValue = 'if (value is ${customClass.name}) ';
if (index == 0) {
indent.write('');
}
indent.add(ifValue);
indent.scoped('{', '} else ', () {
indent.writeln('buffer.putUint8(${customClass.enumeration});');
indent.writeln('writeValue(buffer, value.encode());');
});
}
}, addTrailingNewline: false);
});
indent.scoped('{', '}', () {
indent.writeln('super.writeValue(buffer, value);');
});
});
indent.writeln('');
indent.writeln('@override');
indent.write('Object? readValueOfType(int type, ReadBuffer buffer) ');
indent.scoped('{', '}', () {
@ -101,8 +106,8 @@ void _writeCodec(Indent indent, String codecName, Api api, Root root) {
'return ${customClass.name}.decode(readValue(buffer)!);');
});
}
indent.write('default:');
indent.writeScoped('', '', () {
indent.writeln('default:');
indent.scoped('', '', () {
indent.writeln('return super.readValueOfType(type, buffer);');
});
});
@ -157,6 +162,14 @@ String _getMethodArgumentsSignature(
/// static const MessageCodec<Object?> codec = FooCodec();
/// Future<int> add(int x, int y) async {...}
/// }
///
/// Messages will be sent and received in a list.
///
/// If the message recieved was succesful,
/// the result will be contained at the 0'th index.
///
/// If the message was a failure, the list will contain 3 items:
/// a code, a message, and details in that order.
void _writeHostApi(DartOptions opt, Indent indent, Api api, Root root) {
assert(api.location == ApiLocation.host);
String codecName = _standardMessageCodec;
@ -173,7 +186,8 @@ void _writeHostApi(DartOptions opt, Indent indent, Api api, Root root) {
/// Constructor for [${api.name}]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform.
${api.name}({BinaryMessenger? binaryMessenger}) : _binaryMessenger = binaryMessenger;
${api.name}({BinaryMessenger? binaryMessenger})
\t\t: _binaryMessenger = binaryMessenger;
final BinaryMessenger? _binaryMessenger;
''');
@ -212,38 +226,37 @@ final BinaryMessenger? _binaryMessenger;
indent.writeln(
'final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(');
indent.nest(2, () {
indent.writeln(
"'$channelName', codec, binaryMessenger: _binaryMessenger);",
);
indent.writeln("'$channelName', codec,");
indent.writeln('binaryMessenger: _binaryMessenger);');
});
final String returnType = _makeGenericTypeArguments(func.returnType);
final String castCall = _makeGenericCastCall(func.returnType);
const String accessor = "replyMap['${Keys.result}']";
const String accessor = 'replyList[0]';
final String nullHandler =
func.returnType.isNullable ? (castCall.isEmpty ? '' : '?') : '!';
final String returnStatement = func.returnType.isVoid
? 'return;'
: 'return ($accessor as $returnType?)$nullHandler$castCall;';
indent.format('''
final Map<Object?, Object?>? replyMap =\n\t\tawait channel.send($sendArgument) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
\t\tawait channel.send($sendArgument) as List<Object?>?;
if (replyList == null) {
\tthrow PlatformException(
\t\tcode: 'channel-error',
\t\tmessage: 'Unable to establish connection on channel.',
\t);
} else if (replyMap['error'] != null) {
\tfinal Map<Object?, Object?> error = (replyMap['${Keys.error}'] as Map<Object?, Object?>?)!;
} else if (replyList.length > 1) {
\tthrow PlatformException(
\t\tcode: (error['${Keys.errorCode}'] as String?)!,
\t\tmessage: error['${Keys.errorMessage}'] as String?,
\t\tdetails: error['${Keys.errorDetails}'],
\t\tcode: replyList[0]! as String,
\t\tmessage: replyList[1] as String?,
\t\tdetails: replyList[2],
\t);''');
// On iOS we can return nil from functions to accommodate error
// handling. Returning a nil value and not returning an error is an
// exception.
if (!func.returnType.isNullable && !func.returnType.isVoid) {
indent.format('''
} else if (replyMap['${Keys.result}'] == null) {
} else if (replyList[0] == null) {
\tthrow PlatformException(
\t\tcode: 'null-error',
\t\tmessage: 'Host platform returned null value for non-null return value.',
@ -283,6 +296,7 @@ void _writeFlutterApi(
codecName = _getCodecName(api);
_writeCodec(indent, codecName, api, root);
}
indent.addln('');
addDocumentationComments(indent, api.documentationComments, _docCommentSpec);
indent.write('abstract class ${api.name} ');
@ -302,6 +316,7 @@ void _writeFlutterApi(
_getArgumentName,
);
indent.writeln('$returnType ${func.name}($argSignature);');
indent.writeln('');
}
indent.write(
'static void setup(${api.name}? api, {BinaryMessenger? binaryMessenger}) ');
@ -316,8 +331,9 @@ void _writeFlutterApi(
? makeChannelName(api, func)
: channelNameFunc(func);
indent.nest(2, () {
indent.writeln("'$channelName', codec,");
indent.writeln(
"'$channelName', codec, binaryMessenger: binaryMessenger);",
'binaryMessenger: binaryMessenger);',
);
});
final String messageHandlerSetter =
@ -336,7 +352,7 @@ void _writeFlutterApi(
_addGenericTypesNullable(func.returnType);
final bool isAsync = func.isAsynchronous;
final String emptyReturnStatement = isMockHandler
? 'return <Object?, Object?>{};'
? 'return <Object?>[];'
: func.returnType.isVoid
? 'return;'
: 'return null;';
@ -345,9 +361,8 @@ void _writeFlutterApi(
indent.writeln('// ignore message');
call = 'api.${func.name}()';
} else {
indent.writeln(
"assert(message != null, 'Argument for $channelName was null.');",
);
indent.writeln('assert(message != null,');
indent.writeln("'Argument for $channelName was null.');");
const String argsArray = 'args';
indent.writeln(
'final List<Object?> $argsArray = (message as List<Object?>?)!;');
@ -395,7 +410,7 @@ void _writeFlutterApi(
}
const String returnExpression = 'output';
final String returnStatement = isMockHandler
? "return <Object?, Object?>{'${Keys.result}': $returnExpression};"
? 'return <Object?>[$returnExpression];'
: 'return $returnExpression;';
indent.writeln(returnStatement);
}
@ -489,7 +504,7 @@ void generateDart(DartOptions opt, Root root, StringSink sink) {
void writeConstructor() {
indent.write(klass.name);
indent.scoped('({', '});', () {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final String required = field.type.isNullable ? '' : 'required ';
indent.writeln('${required}this.${field.name},');
}
@ -499,37 +514,38 @@ void generateDart(DartOptions opt, Root root, StringSink sink) {
void writeEncode() {
indent.write('Object encode() ');
indent.scoped('{', '}', () {
indent.writeln(
'final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};',
indent.write(
'return <Object?>',
);
for (final NamedType field in klass.fields) {
indent.write("pigeonMap['${field.name}'] = ");
final String conditional = field.type.isNullable ? '?' : '';
if (customClassNames.contains(field.type.baseName)) {
indent.addln(
'${field.name}$conditional.encode();',
);
} else if (customEnumNames.contains(field.type.baseName)) {
indent.addln(
'${field.name}$conditional.index;',
);
} else {
indent.addln('${field.name};');
indent.scoped('[', '];', () {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final String conditional = field.type.isNullable ? '?' : '';
if (customClassNames.contains(field.type.baseName)) {
indent.writeln(
'${field.name}$conditional.encode(),',
);
} else if (customEnumNames.contains(field.type.baseName)) {
indent.writeln(
'${field.name}$conditional.index,',
);
} else {
indent.writeln('${field.name},');
}
}
}
indent.writeln('return pigeonMap;');
});
});
}
void writeDecode() {
void writeValueDecode(NamedType field) {
void writeValueDecode(NamedType field, int index) {
final String resultAt = 'result[$index]';
if (customClassNames.contains(field.type.baseName)) {
final String nonNullValue =
"${field.type.baseName}.decode(pigeonMap['${field.name}']!)";
'${field.type.baseName}.decode($resultAt! as List<Object?>)';
indent.format(
field.type.isNullable
? '''
pigeonMap['${field.name}'] != null
$resultAt != null
\t\t? $nonNullValue
\t\t: null'''
: nonNullValue,
@ -537,11 +553,11 @@ pigeonMap['${field.name}'] != null
trailingNewline: false);
} else if (customEnumNames.contains(field.type.baseName)) {
final String nonNullValue =
"${field.type.baseName}.values[pigeonMap['${field.name}']! as int]";
'${field.type.baseName}.values[$resultAt! as int]';
indent.format(
field.type.isNullable
? '''
pigeonMap['${field.name}'] != null
$resultAt != null
\t\t? $nonNullValue
\t\t: null'''
: nonNullValue,
@ -552,37 +568,35 @@ pigeonMap['${field.name}'] != null
final String castCall = _makeGenericCastCall(field.type);
final String castCallPrefix = field.type.isNullable ? '?' : '!';
indent.add(
"(pigeonMap['${field.name}'] as $genericType?)$castCallPrefix$castCall",
'($resultAt as $genericType?)$castCallPrefix$castCall',
);
} else {
final String genericdType = _addGenericTypesNullable(field.type);
if (field.type.isNullable) {
indent.add(
"pigeonMap['${field.name}'] as $genericdType",
'$resultAt as $genericdType',
);
} else {
indent.add(
"pigeonMap['${field.name}']! as $genericdType",
'$resultAt! as $genericdType',
);
}
}
}
indent.write(
'static ${klass.name} decode(Object message) ',
'static ${klass.name} decode(Object result) ',
);
indent.scoped('{', '}', () {
indent.writeln(
'final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;',
);
indent.writeln('result as List<Object?>;');
indent.write('return ${klass.name}');
indent.scoped('(', ');', () {
for (int index = 0; index < klass.fields.length; index += 1) {
final NamedType field = klass.fields[index];
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
indent.write('${field.name}: ');
writeValueDecode(field);
writeValueDecode(field, index);
indent.addln(',');
}
});
});
});
}
@ -594,14 +608,12 @@ pigeonMap['${field.name}'] != null
indent.scoped('{', '}', () {
writeConstructor();
indent.addln('');
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
addDocumentationComments(
indent, field.documentationComments, _docCommentSpec);
final String datatype = _addGenericTypesNullable(field.type);
indent.writeln('$datatype ${field.name};');
}
if (klass.fields.isNotEmpty) {
indent.writeln('');
}
writeEncode();

View File

@ -9,7 +9,7 @@ import 'dart:mirrors';
import 'ast.dart';
/// The current version of pigeon. This must match the version in pubspec.yaml.
const String pigeonVersion = '4.2.11';
const String pigeonVersion = '4.2.12';
/// Read all the content from [stdin] to a String.
String readStdin() {
@ -491,3 +491,9 @@ void addDocumentationComments(
);
}
}
/// Returns an ordered list of fields to provide consistent serialisation order.
Iterable<NamedType> getFieldsInSerializationOrder(Class klass) {
// This returns the fields in the order they are declared in the pigeon file.
return klass.fields;
}

View File

@ -115,7 +115,7 @@ void _writeCodec(Indent indent, Api api, Root root) {
indent.write('case (byte)${customClass.enumeration}: ');
indent.writeScoped('', '', () {
indent.writeln(
'return ${customClass.name}.fromMap((Map<String, Object>) readValue(buffer));');
'return ${customClass.name}.fromList((ArrayList<Object>) readValue(buffer));');
});
}
indent.write('default:');
@ -133,7 +133,7 @@ void _writeCodec(Indent indent, Api api, Root root) {
indent.scoped('{', '} else ', () {
indent.writeln('stream.write(${customClass.enumeration});');
indent.writeln(
'writeValue(stream, ((${customClass.name}) value).toMap());');
'writeValue(stream, ((${customClass.name}) value).toList());');
});
}
indent.scoped('{', '}', () {
@ -217,7 +217,7 @@ void _writeHostApi(Indent indent, Api api, Root root) {
final String returnType = method.returnType.isVoid
? 'Void'
: _javaTypeForDartType(method.returnType);
indent.writeln('Map<String, Object> wrapped = new HashMap<>();');
indent.writeln('ArrayList wrapped = new ArrayList<>();');
indent.write('try ');
indent.scoped('{', '}', () {
final List<String> methodArgument = <String>[];
@ -260,12 +260,12 @@ void _writeHostApi(Indent indent, Api api, Root root) {
indent.format('''
Result<$returnType> $resultName = new Result<$returnType>() {
\tpublic void success($returnType result) {
\t\twrapped.put("${Keys.result}", $resultValue);
\t\twrapped.add(0, $resultValue);
\t\treply.reply(wrapped);
\t}
\tpublic void error(Throwable error) {
\t\twrapped.put("${Keys.error}", wrapError(error));
\t\treply.reply(wrapped);
\t\tArrayList<Object> wrappedError = wrapError(error);
\t\treply.reply(wrappedError);
\t}
};
''');
@ -277,18 +277,20 @@ Result<$returnType> $resultName = new Result<$returnType>() {
indent.writeln('$call;');
} else if (method.returnType.isVoid) {
indent.writeln('$call;');
indent.writeln('wrapped.put("${Keys.result}", null);');
indent.writeln('wrapped.add(0, null);');
} else {
indent.writeln('$returnType output = $call;');
indent.writeln('wrapped.put("${Keys.result}", output);');
indent.writeln('wrapped.add(0, output);');
}
});
indent.write('catch (Error | RuntimeException exception) ');
indent.scoped('{', '}', () {
indent
.writeln('wrapped.put("${Keys.error}", wrapError(exception));');
indent.writeln(
'ArrayList<Object> wrappedError = wrapError(exception);');
if (method.isAsynchronous) {
indent.writeln('reply.reply(wrapped);');
indent.writeln('reply.reply(wrappedError);');
} else {
indent.writeln('wrapped = wrappedError;');
}
});
if (!method.isAsynchronous) {
@ -513,7 +515,7 @@ String _castObject(
return '($varName == null) ? null : (($varName instanceof Integer) ? (Integer)$varName : (${hostDatatype.datatype})$varName)';
} else if (!hostDatatype.isBuiltin &&
classes.map((Class x) => x.name).contains(field.type.baseName)) {
return '($varName == null) ? null : ${hostDatatype.datatype}.fromMap((Map)$varName)';
return '($varName == null) ? null : ${hostDatatype.datatype}.fromList((ArrayList<Object>)$varName)';
} else {
return '(${hostDatatype.datatype})$varName';
}
@ -567,17 +569,11 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.write('public enum ${anEnum.name} ');
indent.scoped('{', '}', () {
int index = 0;
for (final String member in anEnum.members) {
enumerate(anEnum.members, (int index, final String member) {
indent.writeln(
'${camelToSnake(member)}($index)${index == anEnum.members.length - 1 ? ';' : ','}');
index++;
}
});
indent.writeln('');
// We use explicit indexing here as use of the ordinal() method is
// discouraged. The toMap and fromMap API matches class API to allow
// the same code to work with enums and classes, but this
// can also be done directly in the host and flutter APIs.
indent.writeln('private final int index;');
indent.write('private ${anEnum.name}(final int index) ');
indent.scoped('{', '}', () {
@ -615,11 +611,12 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
});
}
void writeToMap() {
indent.write('@NonNull Map<String, Object> toMap() ');
void writeToList() {
indent.write('@NonNull ArrayList<Object> toList() ');
indent.scoped('{', '}', () {
indent.writeln('Map<String, Object> toMapResult = new HashMap<>();');
for (final NamedType field in klass.fields) {
indent.writeln(
'ArrayList<Object> toListResult = new ArrayList<Object>(${klass.fields.length});');
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(
field,
root.classes,
@ -629,29 +626,30 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
final String fieldName = field.name;
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
toWriteValue = '($fieldName == null) ? null : $fieldName.toMap()';
toWriteValue = '($fieldName == null) ? null : $fieldName.toList()';
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
toWriteValue = '$fieldName == null ? null : $fieldName.index';
} else {
toWriteValue = field.name;
}
indent.writeln('toMapResult.put("${field.name}", $toWriteValue);');
indent.writeln('toListResult.add($toWriteValue);');
}
indent.writeln('return toMapResult;');
indent.writeln('return toListResult;');
});
}
void writeFromMap() {
void writeFromList() {
indent.write(
'static @NonNull ${klass.name} fromMap(@NonNull Map<String, Object> map) ');
'static @NonNull ${klass.name} fromList(@NonNull ArrayList<Object> list) ');
indent.scoped('{', '}', () {
const String result = 'pigeonResult';
indent.writeln('${klass.name} $result = new ${klass.name}();');
for (final NamedType field in klass.fields) {
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
final String fieldVariable = field.name;
final String setter = _makeSetter(field);
indent.writeln('Object $fieldVariable = map.get("${field.name}");');
indent.writeln('Object $fieldVariable = list.get($index);');
if (rootEnumNameSet.contains(field.type.baseName)) {
indent.writeln(
'$result.$setter(${_intToEnum(fieldVariable, field.type.baseName)});');
@ -659,7 +657,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.writeln(
'$result.$setter(${_castObject(field, root.classes, root.enums, fieldVariable)});');
}
}
});
indent.writeln('return $result;');
});
}
@ -667,7 +665,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
void writeBuilder() {
indent.write('public static final class Builder ');
indent.scoped('{', '}', () {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(
field,
root.classes,
@ -688,7 +686,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.scoped('{', '}', () {
const String returnVal = 'pigeonReturn';
indent.writeln('${klass.name} $returnVal = new ${klass.name}();');
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
indent.writeln('$returnVal.${_makeSetter(field)}(${field.name});');
}
indent.writeln('return $returnVal;');
@ -705,12 +703,12 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
indent.write('public static class ${klass.name} ');
indent.scoped('{', '}', () {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
writeField(field);
indent.addln('');
}
if (klass.fields
if (getFieldsInSerializationOrder(klass)
.map((NamedType e) => !e.type.isNullable)
.any((bool e) => e)) {
indent.writeln(
@ -719,8 +717,8 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
}
writeBuilder();
writeToMap();
writeFromMap();
writeToList();
writeFromList();
});
}
@ -742,12 +740,12 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
void writeWrapError() {
indent.format('''
@NonNull private static Map<String, Object> wrapError(@NonNull Throwable exception) {
\tMap<String, Object> errorMap = new HashMap<>();
\terrorMap.put("${Keys.errorMessage}", exception.toString());
\terrorMap.put("${Keys.errorCode}", exception.getClass().getSimpleName());
\terrorMap.put("${Keys.errorDetails}", "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
\treturn errorMap;
@NonNull private static ArrayList<Object> wrapError(@NonNull Throwable exception) {
\tArrayList<Object> errorList = new ArrayList<>(3);
\terrorList.add(exception.toString());
\terrorList.add(exception.getClass().getSimpleName());
\terrorList.add("Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception));
\treturn errorList;
}''');
}
@ -760,7 +758,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
writeImports();
indent.addln('');
indent.writeln(
'${_docCommentPrefix}Generated class from Pigeon.$_docCommentSuffix');
'$_docCommentPrefix Generated class from Pigeon.$_docCommentSuffix');
indent.writeln(
'@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression"})');
if (options.useGeneratedAnnotation ?? false) {

View File

@ -85,10 +85,9 @@ void _writeCodec(Indent indent, Api api, Root root) {
for (final EnumeratedClass customClass in codecClasses) {
indent.write('${customClass.enumeration}.toByte() -> ');
indent.scoped('{', '}', () {
indent.write(
'return (readValue(buffer) as? Map<String, Any?>)?.let ');
indent.write('return (readValue(buffer) as? List<Any?>)?.let ');
indent.scoped('{', '}', () {
indent.writeln('${customClass.name}.fromMap(it)');
indent.writeln('${customClass.name}.fromList(it)');
});
});
}
@ -105,7 +104,7 @@ void _writeCodec(Indent indent, Api api, Root root) {
indent.write('is ${customClass.name} -> ');
indent.scoped('{', '}', () {
indent.writeln('stream.write(${customClass.enumeration})');
indent.writeln('writeValue(stream, value.toMap())');
indent.writeln('writeValue(stream, value.toList())');
});
}
indent.writeln('else -> super.writeValue(stream, value)');
@ -214,8 +213,7 @@ void _writeHostApi(Indent indent, Api api, Root root) {
indent.write('channel.setMessageHandler ');
indent.scoped('{ $messageVarName, reply ->', '}', () {
indent.writeln('val wrapped = hashMapOf<String, Any?>()');
indent.writeln('var wrapped = listOf<Any?>()');
indent.write('try ');
indent.scoped('{', '}', () {
final List<String> methodArgument = <String>[];
@ -240,15 +238,14 @@ void _writeHostApi(Indent indent, Api api, Root root) {
});
} else if (method.returnType.isVoid) {
indent.writeln(call);
indent.writeln('wrapped["${Keys.result}"] = null');
indent.writeln('wrapped = listOf<Any?>(null)');
} else {
indent.writeln('wrapped["${Keys.result}"] = $call');
indent.writeln('wrapped = listOf<Any?>($call)');
}
}, addTrailingNewline: false);
indent.add(' catch (exception: Error) ');
indent.scoped('{', '}', () {
indent.writeln(
'wrapped["${Keys.error}"] = wrapError(exception)');
indent.writeln('wrapped = wrapError(exception)');
if (method.isAsynchronous) {
indent.writeln('reply.reply(wrapped)');
}
@ -474,20 +471,14 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
indent, anEnum.documentationComments, _docCommentSpec);
indent.write('enum class ${anEnum.name}(val raw: Int) ');
indent.scoped('{', '}', () {
// We use explicit indexing here as use of the ordinal() method is
// discouraged. The toMap and fromMap API matches class API to allow
// the same code to work with enums and classes, but this
// can also be done directly in the host and flutter APIs.
int index = 0;
for (final String member in anEnum.members) {
enumerate(anEnum.members, (int index, final String member) {
indent.write('${member.toUpperCase()}($index)');
if (index != anEnum.members.length - 1) {
indent.addln(',');
} else {
indent.addln(';');
}
index++;
}
});
indent.writeln('');
indent.write('companion object ');
@ -510,48 +501,41 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
indent.add(defaultNil);
}
void writeToMap() {
indent.write('fun toMap(): Map<String, Any?> ');
void writeToList() {
indent.write('fun toList(): List<Any?> ');
indent.scoped('{', '}', () {
indent.writeln('val map = mutableMapOf<String, Any?>()');
for (final NamedType field in klass.fields) {
final HostDatatype hostDatatype = getHostDatatype(field);
String toWriteValue = '';
final String fieldName = field.name;
final String prefix = field.type.isNullable ? 'it' : fieldName;
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
toWriteValue = '$prefix.toMap()';
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
toWriteValue = '$prefix.raw';
} else {
toWriteValue = prefix;
indent.write('return listOf<Any?>');
indent.scoped('(', ')', () {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getHostDatatype(field);
String toWriteValue = '';
final String fieldName = field.name;
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
toWriteValue = '$fieldName?.toList()';
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
toWriteValue = '$fieldName?.raw';
} else {
toWriteValue = fieldName;
}
indent.writeln('$toWriteValue,');
}
if (field.type.isNullable) {
indent.writeln(
'$fieldName?.let { map["${field.name}"] = $toWriteValue }');
} else {
indent.writeln('map["${field.name}"] = $toWriteValue');
}
}
indent.writeln('return map');
});
});
}
void writeFromMap() {
void writeFromList() {
final String className = klass.name;
indent.write('companion object ');
indent.scoped('{', '}', () {
indent.writeln('@Suppress("UNCHECKED_CAST")');
indent.write('fun fromMap(map: Map<String, Any?>): $className ');
indent.write('fun fromList(list: List<Any?>): $className ');
indent.scoped('{', '}', () {
for (final NamedType field in klass.fields) {
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
final HostDatatype hostDatatype = getHostDatatype(field);
// The StandardMessageCodec can give us [Integer, Long] for
@ -559,50 +543,51 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
// longs in Pigeon with Kotlin.
final bool isInt = field.type.baseName == 'int';
final String mapValue = 'map["${field.name}"]';
final String listValue = 'list[$index]';
final String fieldType = _kotlinTypeForDartType(field.type);
if (field.type.isNullable) {
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
indent.write('val ${field.name}: $fieldType? = ');
indent.add('($mapValue as? Map<String, Any?>)?.let ');
indent.add('($listValue as? List<Any?>)?.let ');
indent.scoped('{', '}', () {
indent.writeln('$fieldType.fromMap(it)');
indent.writeln('$fieldType.fromList(it)');
});
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
indent.write('val ${field.name}: $fieldType? = ');
indent.add('($mapValue as? Int)?.let ');
indent.add('($listValue as? Int)?.let ');
indent.scoped('{', '}', () {
indent.writeln('$fieldType.ofRaw(it)');
});
} else if (isInt) {
indent.write('val ${field.name} = $mapValue');
indent.write('val ${field.name} = $listValue');
indent.addln(
'.let { if (it is Int) it.toLong() else it as? Long }');
} else {
indent.writeln('val ${field.name} = $mapValue as? $fieldType');
indent.writeln('val ${field.name} = $listValue as? $fieldType');
}
} else {
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
indent.writeln(
'val ${field.name} = $fieldType.fromMap($mapValue as Map<String, Any?>)');
'val ${field.name} = $fieldType.fromList($listValue as List<Any?>)');
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
indent.write(
'val ${field.name} = $fieldType.ofRaw($mapValue as Int)!!');
'val ${field.name} = $fieldType.ofRaw($listValue as Int)!!');
} else {
indent.writeln('val ${field.name} = $mapValue as $fieldType');
indent.writeln('val ${field.name} = $listValue as $fieldType');
}
}
}
});
indent.writeln('');
indent.write('return $className(');
for (final NamedType field in klass.fields) {
final String comma = klass.fields.last == field ? '' : ', ';
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final String comma =
getFieldsInSerializationOrder(klass).last == field ? '' : ', ';
indent.add('${field.name}$comma');
}
indent.addln(')');
@ -619,9 +604,9 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
indent.write('data class ${klass.name} ');
indent.scoped('(', '', () {
for (final NamedType element in klass.fields) {
for (final NamedType element in getFieldsInSerializationOrder(klass)) {
writeField(element);
if (klass.fields.last != element) {
if (getFieldsInSerializationOrder(klass).last != element) {
indent.addln(',');
} else {
indent.addln('');
@ -630,8 +615,8 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
});
indent.scoped(') {', '}', () {
writeFromMap();
writeToMap();
writeFromList();
writeToList();
});
}
@ -644,26 +629,21 @@ void generateKotlin(KotlinOptions options, Root root, StringSink sink) {
}
void writeWrapResult() {
indent.write('private fun wrapResult(result: Any?): Map<String, Any?> ');
indent.write('private fun wrapResult(result: Any?): List<Any?> ');
indent.scoped('{', '}', () {
indent.writeln('return hashMapOf("result" to result)');
indent.writeln('return listOf(result)');
});
}
void writeWrapError() {
indent.write(
'private fun wrapError(exception: Throwable): Map<String, Any> ');
indent.write('private fun wrapError(exception: Throwable): List<Any> ');
indent.scoped('{', '}', () {
indent.write('return ');
indent.scoped('hashMapOf<String, Any>(', ')', () {
indent.write('"error" to ');
indent.scoped('hashMapOf<String, Any>(', ')', () {
indent.writeln(
'"${Keys.errorCode}" to exception.javaClass.simpleName,');
indent.writeln('"${Keys.errorMessage}" to exception.toString(),');
indent.writeln(
'"${Keys.errorDetails}" to "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)');
});
indent.scoped('listOf<Any>(', ')', () {
indent.writeln('exception.javaClass.simpleName,');
indent.writeln('exception.toString(),');
indent.writeln(
'"Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)');
});
});
}

View File

@ -168,7 +168,7 @@ void _writeInitializerDeclaration(Indent indent, Class klass,
indent.write('+ (instancetype)makeWith');
bool isFirst = true;
indent.nest(2, () {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final String label = isFirst ? _capitalize(field.name) : field.name;
final void Function(String) printer = isFirst
? indent.add
@ -206,8 +206,8 @@ void _writeClassDeclarations(
indent, klass.documentationComments, _docCommentSpec);
indent.writeln('@interface ${_className(prefix, klass.name)} : NSObject');
if (klass.fields.isNotEmpty) {
if (klass.fields
if (getFieldsInSerializationOrder(klass).isNotEmpty) {
if (getFieldsInSerializationOrder(klass)
.map((NamedType e) => !e.type.isNullable)
.any((bool e) => e)) {
indent.writeln(
@ -217,7 +217,7 @@ void _writeClassDeclarations(
_writeInitializerDeclaration(indent, klass, classes, enums, prefix);
indent.addln(';');
}
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getFieldHostDatatype(
field,
classes,
@ -281,7 +281,7 @@ void _writeCodec(
indent.write('case ${customClass.enumeration}: ');
indent.writeScoped('', '', () {
indent.writeln(
'return [${_className(options.prefix, customClass.name)} fromMap:[self readValue]];');
'return [${_className(options.prefix, customClass.name)} fromList:[self readValue]];');
});
}
indent.write('default:');
@ -302,7 +302,7 @@ void _writeCodec(
'if ([value isKindOfClass:[${_className(options.prefix, customClass.name)} class]]) ');
indent.scoped('{', '} else ', () {
indent.writeln('[self writeByte:${customClass.enumeration}];');
indent.writeln('[self writeValue:[value toMap]];');
indent.writeln('[self writeValue:[value toList]];');
});
}
indent.scoped('{', '}', () {
@ -561,13 +561,11 @@ void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) {
indent.write('typedef NS_ENUM(NSUInteger, $enumName) ');
indent.scoped('{', '};', () {
int index = 0;
for (final String member in anEnum.members) {
enumerate(anEnum.members, (int index, final String member) {
// Capitalized first letter to ensure Swift compatibility
indent.writeln(
'$enumName${member[0].toUpperCase()}${member.substring(1)} = $index,');
index++;
}
});
});
}
@ -608,23 +606,23 @@ void generateObjcHeader(ObjcOptions options, Root root, StringSink sink) {
indent.writeln('NS_ASSUME_NONNULL_END');
}
String _dictGetter(
List<String> classNames, String dict, NamedType field, String? prefix) {
String _listGetter(List<String> classNames, String list, NamedType field,
int index, String? prefix) {
if (classNames.contains(field.type.baseName)) {
String className = field.type.baseName;
if (prefix != null) {
className = '$prefix$className';
}
return '[$className nullableFromMap:GetNullableObject($dict, @"${field.name}")]';
return '[$className nullableFromList:(GetNullableObjectAtIndex($list, $index))]';
} else {
return 'GetNullableObject($dict, @"${field.name}")';
return 'GetNullableObjectAtIndex($list, $index)';
}
}
String _dictValue(
String _arrayValue(
List<String> classNames, List<String> enumNames, NamedType field) {
if (classNames.contains(field.type.baseName)) {
return '(self.${field.name} ? [self.${field.name} toMap] : [NSNull null])';
return '(self.${field.name} ? [self.${field.name} toList] : [NSNull null])';
} else if (enumNames.contains(field.type.baseName)) {
return '@(self.${field.name})';
} else {
@ -849,7 +847,7 @@ void _writeFlutterApiSource(
indent.writeln('messageChannelWithName:@"${makeChannelName(api, func)}"');
indent.writeln('binaryMessenger:self.binaryMessenger');
indent.write('codec:${_getCodecGetterName(options.prefix, api.name)}()');
indent.write('];');
indent.addln('];');
indent.dec();
indent.dec();
indent.write('[channel sendMessage:$sendArgument reply:^(id reply) ');
@ -902,19 +900,11 @@ void generateObjcSource(ObjcOptions options, Root root, StringSink sink) {
void writeHelperFunctions() {
indent.format('''
static NSDictionary<NSString *, id> *wrapResult(id result, FlutterError *error) {
\tNSDictionary *errorDict = (NSDictionary *)[NSNull null];
static NSArray *wrapResult(id result, FlutterError *error) {
\tif (error) {
\t\terrorDict = @{
\t\t\t\t@"${Keys.errorCode}": (error.code ?: [NSNull null]),
\t\t\t\t@"${Keys.errorMessage}": (error.message ?: [NSNull null]),
\t\t\t\t@"${Keys.errorDetails}": (error.details ?: [NSNull null]),
\t\t\t\t};
\t\treturn @[ error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] ];
\t}
\treturn @{
\t\t\t@"${Keys.result}": (result ?: [NSNull null]),
\t\t\t@"${Keys.error}": errorDict,
\t\t\t};
\treturn @[ result ?: [NSNull null] ];
}''');
indent.format('''
static id GetNullableObject(NSDictionary* dict, id key) {
@ -931,10 +921,10 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) {
void writeDataClassExtension(Class klass) {
final String className = _className(options.prefix, klass.name);
indent.writeln('@interface $className ()');
indent.writeln('+ ($className *)fromMap:(NSDictionary *)dict;');
indent.writeln(
'+ (nullable $className *)nullableFromMap:(NSDictionary *)dict;');
indent.writeln('- (NSDictionary *)toMap;');
indent.writeln('+ ($className *)fromList:(NSArray *)list;');
indent
.writeln('+ (nullable $className *)nullableFromList:(NSArray *)list;');
indent.writeln('- (NSArray *)toList;');
indent.writeln('@end');
}
@ -946,45 +936,46 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) {
indent.writeScoped(' {', '}', () {
const String result = 'pigeonResult';
indent.writeln('$className* $result = [[$className alloc] init];');
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
indent.writeln('$result.${field.name} = ${field.name};');
}
indent.writeln('return $result;');
});
}
void writeFromMap() {
indent.write('+ ($className *)fromMap:(NSDictionary *)dict ');
void writeFromList() {
indent.write('+ ($className *)fromList:(NSArray *)list ');
indent.scoped('{', '}', () {
const String resultName = 'pigeonResult';
indent.writeln('$className *$resultName = [[$className alloc] init];');
for (final NamedType field in klass.fields) {
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
if (enumNames.contains(field.type.baseName)) {
indent.writeln(
'$resultName.${field.name} = [${_dictGetter(classNames, 'dict', field, options.prefix)} integerValue];');
'$resultName.${field.name} = [${_listGetter(classNames, 'list', field, index, options.prefix)} integerValue];');
} else {
indent.writeln(
'$resultName.${field.name} = ${_dictGetter(classNames, 'dict', field, options.prefix)};');
'$resultName.${field.name} = ${_listGetter(classNames, 'list', field, index, options.prefix)};');
if (!field.type.isNullable) {
indent
.writeln('NSAssert($resultName.${field.name} != nil, @"");');
}
}
}
});
indent.writeln('return $resultName;');
});
indent.writeln(
'+ (nullable $className *)nullableFromMap:(NSDictionary *)dict { return (dict) ? [$className fromMap:dict] : nil; }');
'+ (nullable $className *)nullableFromList:(NSArray *)list { return (list) ? [$className fromList:list] : nil; }');
}
void writeToMap() {
indent.write('- (NSDictionary *)toMap ');
void writeToList() {
indent.write('- (NSArray *)toList ');
indent.scoped('{', '}', () {
indent.write('return');
indent.scoped(' @{', '};', () {
indent.scoped(' @[', '];', () {
for (final NamedType field in klass.fields) {
indent.writeln(
'@"${field.name}" : ${_dictValue(classNames, enumNames, field)},');
indent.writeln('${_arrayValue(classNames, enumNames, field)},');
}
});
});
@ -992,8 +983,8 @@ static id GetNullableObjectAtIndex(NSArray* array, NSInteger key) {
indent.writeln('@implementation $className');
writeInitializer();
writeFromMap();
writeToMap();
writeFromList();
writeToList();
indent.writeln('@end');
}

View File

@ -246,29 +246,28 @@ class PigeonOptions {
objcHeaderOut: map['objcHeaderOut'] as String?,
objcSourceOut: map['objcSourceOut'] as String?,
objcOptions: map.containsKey('objcOptions')
? ObjcOptions.fromMap((map['objcOptions'] as Map<String, Object>?)!)
? ObjcOptions.fromMap(map['objcOptions']! as Map<String, Object>)
: null,
javaOut: map['javaOut'] as String?,
javaOptions: map.containsKey('javaOptions')
? JavaOptions.fromMap((map['javaOptions'] as Map<String, Object>?)!)
? JavaOptions.fromMap(map['javaOptions']! as Map<String, Object>)
: null,
swiftOut: map['swiftOut'] as String?,
swiftOptions: map.containsKey('swiftOptions')
? SwiftOptions.fromMap((map['swiftOptions'] as Map<String, Object>?)!)
? SwiftOptions.fromList(map['swiftOptions']! as Map<String, Object>)
: null,
kotlinOut: map['kotlinOut'] as String?,
kotlinOptions: map.containsKey('kotlinOptions')
? KotlinOptions.fromMap(
(map['kotlinOptions'] as Map<String, Object>?)!)
? KotlinOptions.fromMap(map['kotlinOptions']! as Map<String, Object>)
: null,
cppHeaderOut: map['experimental_cppHeaderOut'] as String?,
cppSourceOut: map['experimental_cppSourceOut'] as String?,
cppOptions: map.containsKey('experimental_cppOptions')
? CppOptions.fromMap(
(map['experimental_cppOptions'] as Map<String, Object>?)!)
map['experimental_cppOptions']! as Map<String, Object>)
: null,
dartOptions: map.containsKey('dartOptions')
? DartOptions.fromMap((map['dartOptions'] as Map<String, Object>?)!)
? DartOptions.fromMap(map['dartOptions']! as Map<String, Object>)
: null,
copyrightHeader: map['copyrightHeader'] as String?,
oneLanguage: map['oneLanguage'] as bool?,
@ -633,7 +632,7 @@ List<Error> _validateAst(Root root, String source) {
root.classes.map((Class x) => x.name).toList();
final Iterable<String> customEnums = root.enums.map((Enum x) => x.name);
for (final Class klass in root.classes) {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
if (field.type.typeArguments != null) {
for (final TypeDeclaration typeArgument in field.type.typeArguments) {
if (!typeArgument.isNullable) {

View File

@ -24,15 +24,15 @@ class SwiftOptions {
final Iterable<String>? copyrightHeader;
/// Creates a [SwiftOptions] from a Map representation where:
/// `x = SwiftOptions.fromMap(x.toMap())`.
static SwiftOptions fromMap(Map<String, Object> map) {
/// `x = SwiftOptions.fromList(x.toMap())`.
static SwiftOptions fromList(Map<String, Object> map) {
return SwiftOptions(
copyrightHeader: map['copyrightHeader'] as Iterable<String>?,
);
}
/// Converts a [SwiftOptions] to a Map representation where:
/// `x = SwiftOptions.fromMap(x.toMap())`.
/// `x = SwiftOptions.fromList(x.toMap())`.
Map<String, Object> toMap() {
final Map<String, Object> result = <String, Object>{
if (copyrightHeader != null) 'copyrightHeader': copyrightHeader!,
@ -43,7 +43,7 @@ class SwiftOptions {
/// Overrides any non-null parameters from [options] into this to make a new
/// [SwiftOptions].
SwiftOptions merge(SwiftOptions options) {
return SwiftOptions.fromMap(mergeMaps(toMap(), options.toMap()));
return SwiftOptions.fromList(mergeMaps(toMap(), options.toMap()));
}
}
@ -75,7 +75,7 @@ void _writeCodec(Indent indent, Api api, Root root) {
indent.write('case ${customClass.enumeration}:');
indent.scoped('', '', () {
indent.write(
'return ${customClass.name}.fromMap(self.readValue() as! [String: Any])');
'return ${customClass.name}.fromList(self.readValue() as! [Any])');
});
}
indent.write('default:');
@ -98,7 +98,7 @@ void _writeCodec(Indent indent, Api api, Root root) {
indent.add('if let value = value as? ${customClass.name} ');
indent.scoped('{', '} else ', () {
indent.writeln('super.writeByte(${customClass.enumeration})');
indent.writeln('super.writeValue(value.toMap())');
indent.writeln('super.writeValue(value.toList())');
}, addTrailingNewline: false);
}
indent.scoped('{', '}', () {
@ -145,7 +145,7 @@ void _writeHostApi(Indent indent, Api api, Root root) {
final String apiName = api.name;
const List<String> generatedComments = <String>[
'Generated protocol from Pigeon that represents a handler of messages from Flutter.'
' Generated protocol from Pigeon that represents a handler of messages from Flutter.'
];
addDocumentationComments(indent, api.documentationComments, _docCommentSpec,
generatorComments: generatedComments);
@ -282,7 +282,7 @@ String _camelCase(String text) {
void _writeFlutterApi(Indent indent, Api api, Root root) {
assert(api.location == ApiLocation.flutter);
const List<String> generatedComments = <String>[
'Generated class from Pigeon that represents Flutter messages that can be called from Swift.'
' Generated class from Pigeon that represents Flutter messages that can be called from Swift.'
];
addDocumentationComments(indent, api.documentationComments, _docCommentSpec,
generatorComments: generatedComments);
@ -470,15 +470,9 @@ import FlutterMacOS
indent.write('enum ${anEnum.name}: Int ');
indent.scoped('{', '}', () {
// We use explicit indexing here as use of the ordinal() method is
// discouraged. The toMap and fromMap API matches class API to allow
// the same code to work with enums and classes, but this
// can also be done directly in the host and flutter APIs.
int index = 0;
for (final String member in anEnum.members) {
enumerate(anEnum.members, (int index, final String member) {
indent.writeln('case ${_camelCase(member)} = $index');
index++;
}
});
});
}
@ -493,19 +487,19 @@ import FlutterMacOS
indent.addln(defaultNil);
}
void writeToMap() {
indent.write('func toMap() -> [String: Any?] ');
void writeToList() {
indent.write('func toList() -> [Any?] ');
indent.scoped('{', '}', () {
indent.write('return ');
indent.scoped('[', ']', () {
for (final NamedType field in klass.fields) {
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final HostDatatype hostDatatype = getHostDatatype(field);
String toWriteValue = '';
final String fieldName = field.name;
final String nullsafe = field.type.isNullable ? '?' : '';
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
toWriteValue = '$fieldName$nullsafe.toMap()';
toWriteValue = '$fieldName$nullsafe.toList()';
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
toWriteValue = '$fieldName$nullsafe.rawValue';
@ -513,67 +507,66 @@ import FlutterMacOS
toWriteValue = field.name;
}
final String comma = klass.fields.last == field ? '' : ',';
indent.writeln('"${field.name}": $toWriteValue$comma');
indent.writeln('$toWriteValue,');
}
});
});
}
void writeFromMap() {
void writeFromList() {
final String className = klass.name;
indent
.write('static func fromMap(_ map: [String: Any?]) -> $className? ');
indent.write('static func fromList(_ list: [Any?]) -> $className? ');
indent.scoped('{', '}', () {
for (final NamedType field in klass.fields) {
enumerate(getFieldsInSerializationOrder(klass),
(int index, final NamedType field) {
final HostDatatype hostDatatype = getHostDatatype(field);
final String mapValue = 'map["${field.name}"]';
final String listValue = 'list[$index]';
final String fieldType = _swiftTypeForDartType(field.type);
if (field.type.isNullable) {
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
indent.writeln('var ${field.name}: $fieldType? = nil');
indent.write(
'if let ${field.name}Map = $mapValue as? [String: Any?] ');
indent.write('if let ${field.name}List = $listValue as? [Any?] ');
indent.scoped('{', '}', () {
indent.writeln(
'${field.name} = $fieldType.fromMap(${field.name}Map)');
'${field.name} = $fieldType.fromList(${field.name}List)');
});
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
indent.writeln('var ${field.name}: $fieldType? = nil');
indent.write('if let ${field.name}RawValue = $mapValue as? Int ');
indent
.write('if let ${field.name}RawValue = $listValue as? Int ');
indent.scoped('{', '}', () {
indent.writeln(
'${field.name} = $fieldType(rawValue: ${field.name}RawValue)');
});
} else {
indent.writeln('let ${field.name} = $mapValue as? $fieldType ');
indent.writeln('let ${field.name} = $listValue as? $fieldType ');
}
} else {
if (!hostDatatype.isBuiltin &&
rootClassNameSet.contains(field.type.baseName)) {
indent.writeln(
'let ${field.name} = $fieldType.fromMap($mapValue as! [String: Any?])!');
'let ${field.name} = $fieldType.fromList($listValue as! [Any?])!');
} else if (!hostDatatype.isBuiltin &&
rootEnumNameSet.contains(field.type.baseName)) {
indent.writeln(
'let ${field.name} = $fieldType(rawValue: $mapValue as! Int)!');
'let ${field.name} = $fieldType(rawValue: $listValue as! Int)!');
} else {
indent.writeln('let ${field.name} = $mapValue as! $fieldType');
indent.writeln('let ${field.name} = $listValue as! $fieldType');
}
}
}
});
indent.writeln('');
indent.write('return ');
indent.scoped('$className(', ')', () {
for (final NamedType field in klass.fields) {
final String comma = klass.fields.last == field ? '' : ',';
for (final NamedType field in getFieldsInSerializationOrder(klass)) {
final String comma =
getFieldsInSerializationOrder(klass).last == field ? '' : ',';
indent.writeln('${field.name}: ${field.name}$comma');
}
});
@ -581,7 +574,7 @@ import FlutterMacOS
}
const List<String> generatedComments = <String>[
'Generated class from Pigeon that represents data sent in messages.'
' Generated class from Pigeon that represents data sent in messages.'
];
addDocumentationComments(
indent, klass.documentationComments, _docCommentSpec,
@ -589,11 +582,11 @@ import FlutterMacOS
indent.write('struct ${klass.name} ');
indent.scoped('{', '}', () {
klass.fields.forEach(writeField);
getFieldsInSerializationOrder(klass).forEach(writeField);
indent.writeln('');
writeFromMap();
writeToMap();
writeFromList();
writeToList();
});
}
@ -606,24 +599,20 @@ import FlutterMacOS
}
void writeWrapResult() {
indent.write('private func wrapResult(_ result: Any?) -> [String: Any?] ');
indent.write('private func wrapResult(_ result: Any?) -> [Any?] ');
indent.scoped('{', '}', () {
indent.writeln('return ["result": result]');
indent.writeln('return [result]');
});
}
void writeWrapError() {
indent.write(
'private func wrapError(_ error: FlutterError) -> [String: Any?] ');
indent.write('private func wrapError(_ error: FlutterError) -> [Any?] ');
indent.scoped('{', '}', () {
indent.write('return ');
indent.scoped('[', ']', () {
indent.write('"error": ');
indent.scoped('[', ']', () {
indent.writeln('"${Keys.errorCode}": error.code,');
indent.writeln('"${Keys.errorMessage}": error.message,');
indent.writeln('"${Keys.errorDetails}": error.details');
});
indent.writeln('error.code,');
indent.writeln('error.message,');
indent.writeln('error.details');
});
});
}

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Autogenerated from Pigeon (v4.0.2), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -11,12 +11,22 @@ import 'dart:typed_data' show Float64List, Int32List, Int64List, Uint8List;
import 'package:flutter/foundation.dart' show ReadBuffer, WriteBuffer;
import 'package:flutter/services.dart';
/// This comment is to test enum documentation comments.
///
/// This comment also tests multiple line comments.
///
/// ////////////////////////
/// This comment also tests comments that start with '/'
/// ////////////////////////
enum MessageRequestState {
pending,
success,
failure,
}
/// This comment is to test class documentation comments.
///
/// This comment also tests multiple line comments.
class MessageSearchRequest {
MessageSearchRequest({
this.query,
@ -24,28 +34,34 @@ class MessageSearchRequest {
this.aBool,
});
/// This comment is to test field documentation comments.
String? query;
/// This comment is to test field documentation comments.
int? anInt;
/// This comment is to test field documentation comments.
bool? aBool;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['query'] = query;
pigeonMap['anInt'] = anInt;
pigeonMap['aBool'] = aBool;
return pigeonMap;
return <Object?>[
query,
anInt,
aBool,
];
}
static MessageSearchRequest decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static MessageSearchRequest decode(Object result) {
result as List<Object?>;
return MessageSearchRequest(
query: pigeonMap['query'] as String?,
anInt: pigeonMap['anInt'] as int?,
aBool: pigeonMap['aBool'] as bool?,
query: result[0] as String?,
anInt: result[1] as int?,
aBool: result[2] as bool?,
);
}
}
/// This comment is to test class documentation comments.
class MessageSearchReply {
MessageSearchReply({
this.result,
@ -53,48 +69,57 @@ class MessageSearchReply {
this.state,
});
/// This comment is to test field documentation comments.
///
/// This comment also tests multiple line comments.
String? result;
/// This comment is to test field documentation comments.
String? error;
/// This comment is to test field documentation comments.
MessageRequestState? state;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['result'] = result;
pigeonMap['error'] = error;
pigeonMap['state'] = state?.index;
return pigeonMap;
return <Object?>[
result,
error,
state?.index,
];
}
static MessageSearchReply decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static MessageSearchReply decode(Object result) {
result as List<Object?>;
return MessageSearchReply(
result: pigeonMap['result'] as String?,
error: pigeonMap['error'] as String?,
state: pigeonMap['state'] != null
? MessageRequestState.values[pigeonMap['state']! as int]
result: result[0] as String?,
error: result[1] as String?,
state: result[2] != null
? MessageRequestState.values[result[2]! as int]
: null,
);
}
}
/// This comment is to test class documentation comments.
class MessageNested {
MessageNested({
this.request,
});
/// This comment is to test field documentation comments.
MessageSearchRequest? request;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['request'] = request?.encode();
return pigeonMap;
return <Object?>[
request?.encode(),
];
}
static MessageNested decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static MessageNested decode(Object result) {
result as List<Object?>;
return MessageNested(
request: pigeonMap['request'] != null
? MessageSearchRequest.decode(pigeonMap['request']!)
request: result[0] != null
? MessageSearchRequest.decode(result[0]! as List<Object?>)
: null,
);
}
@ -130,67 +155,68 @@ class _MessageApiCodec extends StandardMessageCodec {
}
}
/// This comment is to test api documentation comments.
///
/// This comment also tests multiple line comments.
class MessageApi {
/// Constructor for [MessageApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform.
MessageApi({BinaryMessenger? binaryMessenger})
: _binaryMessenger = binaryMessenger;
final BinaryMessenger? _binaryMessenger;
static const MessageCodec<Object?> codec = _MessageApiCodec();
/// This comment is to test documentation comments.
///
/// This comment also tests multiple line comments.
Future<void> initialize() async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageApi.initialize', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
}
}
/// This comment is to test method documentation comments.
Future<MessageSearchReply> search(MessageSearchRequest arg_request) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageApi.search', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_request]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_request]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 MessageSearchReply?)!;
return (replyList[0] as MessageSearchReply?)!;
}
}
}
@ -231,43 +257,44 @@ class _MessageNestedApiCodec extends StandardMessageCodec {
}
}
/// This comment is to test api documentation comments.
class MessageNestedApi {
/// Constructor for [MessageNestedApi]. The [binaryMessenger] named argument is
/// available for dependency injection. If it is left null, the default
/// BinaryMessenger will be used which routes to the host platform.
MessageNestedApi({BinaryMessenger? binaryMessenger})
: _binaryMessenger = binaryMessenger;
final BinaryMessenger? _binaryMessenger;
static const MessageCodec<Object?> codec = _MessageNestedApiCodec();
/// This comment is to test method documentation comments.
///
/// This comment also tests multiple line comments.
Future<MessageSearchReply> search(MessageNested arg_nested) async {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageNestedApi.search', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_nested]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_nested]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 MessageSearchReply?)!;
return (replyList[0] as MessageSearchReply?)!;
}
}
}
@ -302,10 +329,13 @@ class _MessageFlutterSearchApiCodec extends StandardMessageCodec {
}
}
/// This comment is to test api documentation comments.
abstract class MessageFlutterSearchApi {
static const MessageCodec<Object?> codec = _MessageFlutterSearchApiCodec();
/// This comment is to test method documentation comments.
MessageSearchReply search(MessageSearchRequest request);
static void setup(MessageFlutterSearchApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Autogenerated from Pigeon (v4.0.2), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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
@ -44,11 +44,20 @@ class _TestHostApiCodec extends StandardMessageCodec {
}
}
/// This comment is to test api documentation comments.
///
/// This comment also tests multiple line comments.
abstract class TestHostApi {
static const MessageCodec<Object?> codec = _TestHostApiCodec();
/// This comment is to test documentation comments.
///
/// This comment also tests multiple line comments.
void initialize();
/// This comment is to test method documentation comments.
MessageSearchReply search(MessageSearchRequest request);
static void setup(TestHostApi? api, {BinaryMessenger? binaryMessenger}) {
{
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
@ -60,7 +69,7 @@ abstract class TestHostApi {
channel.setMockMessageHandler((Object? message) async {
// ignore message
api.initialize();
return <Object?, Object?>{};
return <Object?>[];
});
}
}
@ -80,7 +89,7 @@ abstract class TestHostApi {
assert(arg_request != null,
'Argument for dev.flutter.pigeon.MessageApi.search was null, expected non-null MessageSearchRequest.');
final MessageSearchReply output = api.search(arg_request!);
return <Object?, Object?>{'result': output};
return <Object?>[output];
});
}
}
@ -123,10 +132,15 @@ class _TestNestedApiCodec extends StandardMessageCodec {
}
}
/// This comment is to test api documentation comments.
abstract class TestNestedApi {
static const MessageCodec<Object?> codec = _TestNestedApiCodec();
/// This comment is to test method documentation comments.
///
/// This comment also tests multiple line comments.
MessageSearchReply search(MessageNested nested);
static void setup(TestNestedApi? api, {BinaryMessenger? binaryMessenger}) {
{
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
@ -143,7 +157,7 @@ abstract class TestNestedApi {
assert(arg_nested != null,
'Argument for dev.flutter.pigeon.MessageNestedApi.search was null, expected non-null MessageNested.');
final MessageSearchReply output = api.search(arg_nested!);
return <Object?, Object?>{'result': output};
return <Object?>[output];
});
}
}

View File

@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
@ -85,7 +83,7 @@ void main() {
await const BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MessageApi.search',
StandardMessageCodec(),
).send(<Object?>[null]) as Map<Object?, Object?>?;
).send(<Object?>[null]) as List<Object?>?;
expect(true, isFalse); // should not reach here
} catch (error) {
expect(error, isAssertionError);
@ -98,7 +96,5 @@ void main() {
}
expect(mock.log, <String>['initialize']);
},
// TODO(ianh): skip can be removed after first stable release in 2021
skip: Platform.environment['CHANNEL'] == 'stable',
);
}

View File

@ -14,7 +14,6 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class AllDatatypesTest {
@ -147,10 +146,12 @@ public class AllDatatypesTest {
public void integerToLong() {
AllNullableTypes everything = new AllNullableTypes();
everything.setANullableInt(123L);
Map<String, Object> map = everything.toMap();
assertTrue(map.containsKey("aNullableInt"));
map.put("aNullableInt", 123);
AllNullableTypes readEverything = AllNullableTypes.fromMap(map);
ArrayList<Object> list = everything.toList();
assertNotNull(list);
assertNull(list.get(0));
assertNotNull(list.get(1));
list.set(1, 123);
AllNullableTypes readEverything = AllNullableTypes.fromList(list);
assertEquals(readEverything.getANullableInt(), everything.getANullableInt());
}
}

View File

@ -11,7 +11,7 @@ import com.example.alternate_language_test_plugin.AsyncHandlers.*;
import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MessageCodec;
import java.nio.ByteBuffer;
import java.util.Map;
import java.util.ArrayList;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@ -60,8 +60,8 @@ public class AsyncTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("result"));
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() == 1);
didCall[0] = true;
});
assertTrue(didCall[0]);
@ -87,10 +87,9 @@ public class AsyncTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("error"));
assertEquals(
"java.lang.Exception: error", ((Map) wrapped.get("error")).get("message"));
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() > 1);
assertEquals("java.lang.Exception: error", (String) wrapped.get(0));
didCall[0] = true;
});
assertTrue(didCall[0]);

View File

@ -6,7 +6,7 @@ package com.example.alternate_language_test_plugin;
import static org.junit.Assert.*;
import java.util.Map;
import java.util.ArrayList;
import org.junit.Test;
public class EnumTest {
@ -14,8 +14,8 @@ public class EnumTest {
public void nullValue() {
Enum.DataWithEnum value = new Enum.DataWithEnum();
value.setState(null);
Map<String, Object> map = value.toMap();
Enum.DataWithEnum readValue = Enum.DataWithEnum.fromMap(map);
ArrayList<Object> list = value.toList();
Enum.DataWithEnum readValue = Enum.DataWithEnum.fromList(list);
assertEquals(value.getState(), readValue.getState());
}
}

View File

@ -28,8 +28,7 @@ public class ListTest {
ByteBuffer message = invocation.getArgument(1);
BinaryMessenger.BinaryReply reply = invocation.getArgument(2);
message.position(0);
ArrayList<Object> args =
(ArrayList<Object>) EchoApi.getCodec().decodeMessage(message);
ArrayList args = (ArrayList) EchoApi.getCodec().decodeMessage(message);
ByteBuffer replyData = EchoApi.getCodec().encodeMessage(args.get(0));
replyData.position(0);
reply.reply(replyData);

View File

@ -7,9 +7,8 @@ package com.example.alternate_language_test_plugin;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
public class NullFieldsTest {
@ -63,38 +62,39 @@ public class NullFieldsTest {
@Test
public void requestFromMapWithValues() {
HashMap<String, Object> map = new HashMap<>();
map.put("query", "hello");
map.put("identifier", 1L);
NullFields.NullFieldsSearchRequest request = NullFields.NullFieldsSearchRequest.fromMap(map);
ArrayList<Object> list = new ArrayList<Object>();
list.add("hello");
list.add(1L);
NullFields.NullFieldsSearchRequest request = NullFields.NullFieldsSearchRequest.fromList(list);
assertEquals(request.getQuery(), "hello");
}
@Test
public void requestFromMapWithNulls() {
HashMap<String, Object> map = new HashMap<>();
map.put("query", null);
map.put("identifier", 1L);
ArrayList<Object> list = new ArrayList<Object>();
list.add(null);
list.add(1L);
NullFields.NullFieldsSearchRequest request = NullFields.NullFieldsSearchRequest.fromMap(map);
NullFields.NullFieldsSearchRequest request = NullFields.NullFieldsSearchRequest.fromList(list);
assertNull(request.getQuery());
}
@Test
public void replyFromMapWithValues() {
HashMap<String, Object> requestMap = new HashMap<>();
requestMap.put("query", "hello");
requestMap.put("identifier", 1L);
ArrayList<Object> requestList = new ArrayList<Object>();
HashMap<String, Object> map = new HashMap<>();
map.put("result", "result");
map.put("error", "error");
map.put("indices", Arrays.asList(1L, 2L, 3L));
map.put("request", requestMap);
map.put("type", NullFields.NullFieldsSearchReplyType.SUCCESS.ordinal());
requestList.add("hello");
requestList.add(1L);
NullFields.NullFieldsSearchReply reply = NullFields.NullFieldsSearchReply.fromMap(map);
ArrayList<Object> list = new ArrayList<Object>();
list.add("result");
list.add("error");
list.add(Arrays.asList(1L, 2L, 3L));
list.add(requestList);
list.add(NullFields.NullFieldsSearchReplyType.SUCCESS.ordinal());
NullFields.NullFieldsSearchReply reply = NullFields.NullFieldsSearchReply.fromList(list);
assertEquals(reply.getResult(), "result");
assertEquals(reply.getError(), "error");
assertEquals(reply.getIndices(), Arrays.asList(1L, 2L, 3L));
@ -104,14 +104,15 @@ public class NullFieldsTest {
@Test
public void replyFromMapWithNulls() {
HashMap<String, Object> map = new HashMap<>();
map.put("result", null);
map.put("error", null);
map.put("indices", null);
map.put("request", null);
map.put("type", null);
ArrayList<Object> list = new ArrayList<Object>();
NullFields.NullFieldsSearchReply reply = NullFields.NullFieldsSearchReply.fromMap(map);
list.add(null);
list.add(null);
list.add(null);
list.add(null);
list.add(null);
NullFields.NullFieldsSearchReply reply = NullFields.NullFieldsSearchReply.fromList(list);
assertNull(reply.getResult());
assertNull(reply.getError());
assertNull(reply.getIndices());
@ -127,8 +128,8 @@ public class NullFieldsTest {
.setIdentifier(1L)
.build();
Map<String, Object> map = request.toMap();
assertEquals(map.get("query"), "hello");
ArrayList<Object> list = request.toList();
assertEquals(list.get(0), "hello");
}
@Test
@ -136,8 +137,8 @@ public class NullFieldsTest {
NullFields.NullFieldsSearchRequest request =
new NullFields.NullFieldsSearchRequest.Builder().setQuery(null).setIdentifier(1L).build();
Map<String, Object> map = request.toMap();
assertNull(map.get("query"));
ArrayList<Object> list = request.toList();
assertNull(list.get(0));
}
@Test
@ -155,12 +156,12 @@ public class NullFieldsTest {
.setType(NullFields.NullFieldsSearchReplyType.SUCCESS)
.build();
Map<String, Object> map = reply.toMap();
assertEquals(map.get("result"), "result");
assertEquals(map.get("error"), "error");
assertEquals(map.get("indices"), Arrays.asList(1L, 2L, 3L));
assertEquals(map.get("request"), reply.getRequest().toMap());
assertEquals(map.get("type"), NullFields.NullFieldsSearchReplyType.SUCCESS.ordinal());
ArrayList<Object> list = reply.toList();
assertEquals(list.get(0), "result");
assertEquals(list.get(1), "error");
assertEquals(list.get(2), Arrays.asList(1L, 2L, 3L));
assertEquals(list.get(3), reply.getRequest().toList());
assertEquals(list.get(4), NullFields.NullFieldsSearchReplyType.SUCCESS.ordinal());
}
@Test
@ -174,11 +175,12 @@ public class NullFieldsTest {
.setType(null)
.build();
Map<String, Object> map = reply.toMap();
assertNull(map.get("result"));
assertNull(map.get("error"));
assertNull(map.get("indices"));
assertNull(map.get("request"));
assertNull(map.get("type"));
ArrayList<Object> list = reply.toList();
assertNull(list.get(0));
assertNull(list.get(1));
assertNull(list.get(2));
assertNull(list.get(3));
assertNull(list.get(4));
}
}

View File

@ -11,7 +11,6 @@ import io.flutter.plugin.common.BinaryMessenger;
import io.flutter.plugin.common.MessageCodec;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Map;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@ -40,8 +39,8 @@ public class NullableReturnsTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("result"));
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() == 1);
});
}
@ -53,8 +52,8 @@ public class NullableReturnsTest {
ByteBuffer message = invocation.getArgument(1);
BinaryMessenger.BinaryReply reply = invocation.getArgument(2);
message.position(0);
ArrayList<Object> args =
(ArrayList<Object>)
ArrayList args =
(ArrayList)
NullableReturns.NullableArgFlutterApi.getCodec().decodeMessage(message);
assertNull(args.get(0));
ByteBuffer replyData =

View File

@ -12,31 +12,30 @@ import io.flutter.plugin.common.MessageCodec;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
public class PigeonTest {
@Test
public void toMapAndBack() {
public void toListAndBack() {
Pigeon.AndroidSetRequest request = new Pigeon.AndroidSetRequest();
request.setValue(1234l);
request.setState(Pigeon.AndroidLoadingState.COMPLETE);
Map<String, Object> map = request.toMap();
Pigeon.AndroidSetRequest readRequest = Pigeon.AndroidSetRequest.fromMap(map);
ArrayList<Object> list = request.toList();
Pigeon.AndroidSetRequest readRequest = Pigeon.AndroidSetRequest.fromList(list);
assertEquals(request.getValue(), readRequest.getValue());
assertEquals(request.getState(), readRequest.getState());
}
@Test
public void toMapAndBackNested() {
public void toListAndBackNested() {
Pigeon.AndroidNestedRequest nested = new Pigeon.AndroidNestedRequest();
Pigeon.AndroidSetRequest request = new Pigeon.AndroidSetRequest();
request.setValue(1234l);
request.setState(Pigeon.AndroidLoadingState.COMPLETE);
nested.setRequest(request);
Map<String, Object> map = nested.toMap();
Pigeon.AndroidNestedRequest readNested = Pigeon.AndroidNestedRequest.fromMap(map);
ArrayList<Object> list = nested.toList();
Pigeon.AndroidNestedRequest readNested = Pigeon.AndroidNestedRequest.fromList(list);
assertEquals(nested.getRequest().getValue(), readNested.getRequest().getValue());
assertEquals(nested.getRequest().getState(), readNested.getRequest().getState());
}
@ -70,11 +69,10 @@ public class PigeonTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("error"));
Map<Object, Object> error = (Map<Object, Object>) wrapped.get("error");
assertTrue(error.containsKey("details"));
String details = (String) error.get("details");
ArrayList error = (ArrayList) codec.decodeMessage(bytes);
assertNotNull(error.get(0));
assertNotNull(error.get(1));
String details = (String) error.get(2);
assertTrue(details.contains("Cause:"));
assertTrue(details.contains("Stacktrace:"));
});
@ -101,9 +99,9 @@ public class PigeonTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("result"));
assertNull(wrapped.get("result"));
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() == 1);
assertNull(wrapped.get(0));
});
ArgumentCaptor<Pigeon.AndroidSetRequest> receivedRequest =
ArgumentCaptor.forClass(Pigeon.AndroidSetRequest.class);

View File

@ -28,8 +28,7 @@ public class PrimitiveTest {
ByteBuffer message = invocation.getArgument(1);
BinaryMessenger.BinaryReply reply = invocation.getArgument(2);
message.position(0);
ArrayList<Object> args =
(ArrayList<Object>) PrimitiveFlutterApi.getCodec().decodeMessage(message);
ArrayList args = (ArrayList) PrimitiveFlutterApi.getCodec().decodeMessage(message);
Object arg = args.get(0);
if (arg instanceof Long) {
Long longArg = (Long) arg;
@ -88,7 +87,8 @@ public class PrimitiveTest {
verify(binaryMessenger)
.setMessageHandler(eq("dev.flutter.pigeon.PrimitiveHostApi.anInt"), handler.capture());
MessageCodec<Object> codec = PrimitiveHostApi.getCodec();
ByteBuffer message = codec.encodeMessage(new ArrayList<Object>(Arrays.asList((Integer) 1)));
@SuppressWarnings("unchecked")
ByteBuffer message = codec.encodeMessage(new ArrayList(Arrays.asList((Integer) 1)));
message.rewind();
handler
.getValue()
@ -97,9 +97,9 @@ public class PrimitiveTest {
(bytes) -> {
bytes.rewind();
@SuppressWarnings("unchecked")
Map<String, Object> wrapped = (Map<String, Object>) codec.decodeMessage(bytes);
assertTrue(wrapped.containsKey("result"));
assertEquals(1L, ((Long) wrapped.get("result")).longValue());
ArrayList wrapped = (ArrayList) codec.decodeMessage(bytes);
assertTrue(wrapped.size() > 0);
assertEquals(1L, ((Long) wrapped.get(0)).longValue());
});
}

View File

@ -15,8 +15,8 @@
///////////////////////////////////////////////////////////////////////////////////////////
@interface Value ()
+ (Value *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
+ (Value *)fromList:(NSArray *)list;
- (NSArray *)toList;
@end
///////////////////////////////////////////////////////////////////////////////////////////
@ -79,9 +79,8 @@
XCTestExpectation *expectation = [self expectationWithDescription:@"voidvoid callback"];
binaryMessenger.handlers[channelName](nil, ^(NSData *data) {
NSDictionary *outputMap = [binaryMessenger.codec decode:data];
XCTAssertEqualObjects(outputMap[@"result"], [NSNull null]);
XCTAssertEqualObjects(outputMap[@"error"], [NSNull null]);
NSArray *outputList = [binaryMessenger.codec decode:data];
XCTAssertEqualObjects(outputList[0], [NSNull null]);
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:1.0 handler:nil];
@ -98,9 +97,9 @@
XCTestExpectation *expectation = [self expectationWithDescription:@"voidvoid callback"];
binaryMessenger.handlers[channelName](nil, ^(NSData *data) {
NSDictionary *outputMap = [binaryMessenger.codec decode:data];
XCTAssertNotNil(outputMap[@"error"]);
XCTAssertEqualObjects(outputMap[@"error"][@"code"], mockApi2Host.voidVoidError.code);
NSArray *outputList = [binaryMessenger.codec decode:data];
XCTAssertNotNil(outputList);
XCTAssertEqualObjects(outputList[0], mockApi2Host.voidVoidError.code);
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:1.0 handler:nil];
@ -120,8 +119,8 @@
NSData *inputEncoded = [binaryMessenger.codec encode:@[ input ]];
XCTestExpectation *expectation = [self expectationWithDescription:@"calculate callback"];
binaryMessenger.handlers[channelName](inputEncoded, ^(NSData *data) {
NSDictionary *outputMap = [binaryMessenger.codec decode:data];
Value *output = outputMap[@"result"];
NSArray *outputList = [binaryMessenger.codec decode:data];
Value *output = outputList[0];
XCTAssertEqual(output.number.intValue, 2);
[expectation fulfill];
});
@ -138,11 +137,13 @@
Value *input = [[Value alloc] init];
input.number = @(1);
NSData *inputEncoded = [binaryMessenger.codec encode:@[ [input toMap] ]];
NSData *inputEncoded = [binaryMessenger.codec encode:@[ [input toList] ]];
XCTestExpectation *expectation = [self expectationWithDescription:@"calculate callback"];
binaryMessenger.handlers[channelName](inputEncoded, ^(NSData *data) {
NSDictionary *outputMap = [binaryMessenger.codec decode:data];
XCTAssertNotNil(outputMap[@"error"]);
NSArray *outputList = [binaryMessenger.codec decode:data];
XCTAssertNotNil(outputList);
XCTAssertEqualObjects(outputList[0], @"hey");
XCTAssertEqualObjects(outputList[1], @"ho");
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:1.0 handler:nil];

View File

@ -15,14 +15,14 @@
///////////////////////////////////////////////////////////////////////////////////////////
@interface NullFieldsSearchRequest ()
+ (NullFieldsSearchRequest *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
+ (NullFieldsSearchRequest *)fromList:(NSArray *)list;
- (NSArray *)toList;
@end
///////////////////////////////////////////////////////////////////////////////////////////
@interface NullFieldsSearchReply ()
+ (NullFieldsSearchReply *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
+ (NullFieldsSearchReply *)fromList:(NSArray *)list;
- (NSArray *)toList;
@end
///////////////////////////////////////////////////////////////////////////////////////////
@ -69,38 +69,38 @@
XCTAssertEqual(NullFieldsSearchReplyTypeSuccess, reply.type);
}
- (void)testRequestFromMapWithValues {
NSDictionary *map = @{
@"query" : @"hello",
@"identifier" : @1,
};
NullFieldsSearchRequest *request = [NullFieldsSearchRequest fromMap:map];
- (void)testRequestFromListWithValues {
NSArray *list = @[
@"hello",
@1,
];
NullFieldsSearchRequest *request = [NullFieldsSearchRequest fromList:list];
XCTAssertEqualObjects(@"hello", request.query);
}
- (void)testRequestFromMapWithNulls {
NSDictionary *map = @{
@"query" : [NSNull null],
@"identifier" : @1,
};
NullFieldsSearchRequest *request = [NullFieldsSearchRequest fromMap:map];
- (void)testRequestFromListWithNulls {
NSArray *list = @[
[NSNull null],
@1,
];
NullFieldsSearchRequest *request = [NullFieldsSearchRequest fromList:list];
XCTAssertNil(request.query);
}
- (void)testReplyFromMapWithValues {
NSDictionary *map = @{
@"result" : @"result",
@"error" : @"error",
@"indices" : @[ @1, @2, @3 ],
@"request" : @{
@"query" : @"hello",
@"identifier" : @1,
},
@"type" : @0,
};
- (void)testReplyFromListWithValues {
NSArray *list = @[
@"result",
@"error",
@[ @1, @2, @3 ],
@[
@"hello",
@1,
],
@0,
];
NSArray *indices = @[ @1, @2, @3 ];
NullFieldsSearchReply *reply = [NullFieldsSearchReply fromMap:map];
NullFieldsSearchReply *reply = [NullFieldsSearchReply fromList:list];
XCTAssertEqualObjects(@"result", reply.result);
XCTAssertEqualObjects(@"error", reply.error);
XCTAssertEqualObjects(indices, reply.indices);
@ -108,15 +108,15 @@
XCTAssertEqual(NullFieldsSearchReplyTypeSuccess, reply.type);
}
- (void)testReplyFromMapWithNulls {
NSDictionary *map = @{
@"result" : [NSNull null],
@"error" : [NSNull null],
@"indices" : [NSNull null],
@"request" : [NSNull null],
@"type" : [NSNull null],
};
NullFieldsSearchReply *reply = [NullFieldsSearchReply fromMap:map];
- (void)testReplyFromListWithNulls {
NSArray *list = @[
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
];
NullFieldsSearchReply *reply = [NullFieldsSearchReply fromList:list];
XCTAssertNil(reply.result);
XCTAssertNil(reply.error);
XCTAssertNil(reply.indices);
@ -124,46 +124,46 @@
XCTAssertEqual(NullFieldsSearchReplyTypeSuccess, reply.type);
}
- (void)testRequestToMapWithValuess {
- (void)testRequestToListWithValuess {
NullFieldsSearchRequest *request = [NullFieldsSearchRequest makeWithQuery:@"hello" identifier:@1];
NSDictionary *dict = [request toMap];
XCTAssertEqual(@"hello", dict[@"query"]);
NSArray *list = [request toList];
XCTAssertEqual(@"hello", list[0]);
}
- (void)testRequestToMapWithNulls {
- (void)testRequestToListWithNulls {
NullFieldsSearchRequest *request = [NullFieldsSearchRequest makeWithQuery:nil identifier:@1];
NSDictionary *dict = [request toMap];
XCTAssertEqual([NSNull null], dict[@"query"]);
NSArray *list = [request toList];
XCTAssertEqual([NSNull null], list[0]);
}
- (void)testReplyToMapWithValuess {
- (void)testReplyToListWithValuess {
NullFieldsSearchReply *reply = [NullFieldsSearchReply
makeWithResult:@"result"
error:@"error"
indices:@[ @1, @2, @3 ]
request:[NullFieldsSearchRequest makeWithQuery:@"hello" identifier:@1]
type:NullFieldsSearchReplyTypeSuccess];
NSDictionary *dict = [reply toMap];
NSArray *list = [reply toList];
NSArray *indices = @[ @1, @2, @3 ];
XCTAssertEqualObjects(@"result", dict[@"result"]);
XCTAssertEqualObjects(@"error", dict[@"error"]);
XCTAssertEqualObjects(indices, dict[@"indices"]);
XCTAssertEqualObjects(@"hello", dict[@"request"][@"query"]);
XCTAssertEqualObjects(@0, dict[@"type"]);
XCTAssertEqualObjects(@"result", list[0]);
XCTAssertEqualObjects(@"error", list[1]);
XCTAssertEqualObjects(indices, list[2]);
XCTAssertEqualObjects(@"hello", list[3][0]);
XCTAssertEqualObjects(@0, list[4]);
}
- (void)testReplyToMapWithNulls {
- (void)testReplyToListWithNulls {
NullFieldsSearchReply *reply =
[NullFieldsSearchReply makeWithResult:nil
error:nil
indices:nil
request:nil
type:NullFieldsSearchReplyTypeSuccess];
NSDictionary *dict = [reply toMap];
XCTAssertEqual([NSNull null], dict[@"result"]);
XCTAssertEqual([NSNull null], dict[@"error"]);
XCTAssertEqual([NSNull null], dict[@"indices"]);
XCTAssertEqual([NSNull null], dict[@"request"]);
NSArray *list = [reply toList];
XCTAssertEqual([NSNull null], list[0]);
XCTAssertEqual([NSNull null], list[1]);
XCTAssertEqual([NSNull null], list[2]);
XCTAssertEqual([NSNull null], list[3]);
}
@end

View File

@ -11,8 +11,8 @@
#endif
@interface ACMessageSearchReply ()
+ (ACMessageSearchReply *)fromMap:(NSDictionary *)dict;
- (NSDictionary *)toMap;
+ (ACMessageSearchReply *)fromList:(NSArray *)list;
- (NSArray *)toList;
@end
@interface RunnerTests : XCTestCase
@ -24,24 +24,24 @@
- (void)testToMapAndBack {
ACMessageSearchReply *reply = [[ACMessageSearchReply alloc] init];
reply.result = @"foobar";
NSDictionary *dict = [reply toMap];
ACMessageSearchReply *copy = [ACMessageSearchReply fromMap:dict];
NSArray *list = [reply toList];
ACMessageSearchReply *copy = [ACMessageSearchReply fromList:list];
XCTAssertEqual(reply.result, copy.result);
}
- (void)testHandlesNull {
ACMessageSearchReply *reply = [[ACMessageSearchReply alloc] init];
reply.result = nil;
NSDictionary *dict = [reply toMap];
ACMessageSearchReply *copy = [ACMessageSearchReply fromMap:dict];
NSArray *list = [reply toList];
ACMessageSearchReply *copy = [ACMessageSearchReply fromList:list];
XCTAssertNil(copy.result);
}
- (void)testHandlesNullFirst {
ACMessageSearchReply *reply = [[ACMessageSearchReply alloc] init];
reply.error = @"foobar";
NSDictionary *dict = [reply toMap];
ACMessageSearchReply *copy = [ACMessageSearchReply fromMap:dict];
NSArray *list = [reply toList];
ACMessageSearchReply *copy = [ACMessageSearchReply fromList:list];
XCTAssertEqual(reply.error, copy.error);
}

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Autogenerated from Pigeon (v4.0.2), do not edit directly.
// Autogenerated from Pigeon (v4.2.9), 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';
@ -29,57 +29,67 @@ class Everything {
});
bool? aBool;
int? anInt;
double? aDouble;
String? aString;
Uint8List? aByteArray;
Int32List? a4ByteArray;
Int64List? a8ByteArray;
Float64List? aFloatArray;
List<Object?>? aList;
Map<Object?, Object?>? aMap;
List<List<bool?>?>? nestedList;
Map<String?, String?>? mapWithAnnotations;
Map<String?, Object?>? mapWithObject;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['aBool'] = aBool;
pigeonMap['anInt'] = anInt;
pigeonMap['aDouble'] = aDouble;
pigeonMap['aString'] = aString;
pigeonMap['aByteArray'] = aByteArray;
pigeonMap['a4ByteArray'] = a4ByteArray;
pigeonMap['a8ByteArray'] = a8ByteArray;
pigeonMap['aFloatArray'] = aFloatArray;
pigeonMap['aList'] = aList;
pigeonMap['aMap'] = aMap;
pigeonMap['nestedList'] = nestedList;
pigeonMap['mapWithAnnotations'] = mapWithAnnotations;
pigeonMap['mapWithObject'] = mapWithObject;
return pigeonMap;
final List<Object?> pigeonList = <Object?>[];
pigeonList.add(aBool);
pigeonList.add(anInt);
pigeonList.add(aDouble);
pigeonList.add(aString);
pigeonList.add(aByteArray);
pigeonList.add(a4ByteArray);
pigeonList.add(a8ByteArray);
pigeonList.add(aFloatArray);
pigeonList.add(aList);
pigeonList.add(aMap);
pigeonList.add(nestedList);
pigeonList.add(mapWithAnnotations);
pigeonList.add(mapWithObject);
return pigeonList;
}
static Everything decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static Everything decode(Object result) {
result as List<Object?>;
return Everything(
aBool: pigeonMap['aBool'] as bool?,
anInt: pigeonMap['anInt'] as int?,
aDouble: pigeonMap['aDouble'] as double?,
aString: pigeonMap['aString'] as String?,
aByteArray: pigeonMap['aByteArray'] as Uint8List?,
a4ByteArray: pigeonMap['a4ByteArray'] as Int32List?,
a8ByteArray: pigeonMap['a8ByteArray'] as Int64List?,
aFloatArray: pigeonMap['aFloatArray'] as Float64List?,
aList: pigeonMap['aList'] as List<Object?>?,
aMap: pigeonMap['aMap'] as Map<Object?, Object?>?,
nestedList:
(pigeonMap['nestedList'] as List<Object?>?)?.cast<List<bool?>?>(),
aBool: result[0] as bool?,
anInt: result[1] as int?,
aDouble: result[2] as double?,
aString: result[3] as String?,
aByteArray: result[4] as Uint8List?,
a4ByteArray: result[5] as Int32List?,
a8ByteArray: result[6] as Int64List?,
aFloatArray: result[7] as Float64List?,
aList: result[8] as List<Object?>?,
aMap: result[9] as Map<Object?, Object?>?,
nestedList: (result[10] as List<Object?>?)?.cast<List<bool?>?>(),
mapWithAnnotations:
(pigeonMap['mapWithAnnotations'] as Map<Object?, Object?>?)
?.cast<String?, String?>(),
mapWithObject: (pigeonMap['mapWithObject'] as Map<Object?, Object?>?)
?.cast<String?, Object?>(),
(result[11] as Map<Object?, Object?>?)?.cast<String?, String?>(),
mapWithObject:
(result[12] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
);
}
}
@ -100,7 +110,7 @@ class _HostEverythingCodec extends StandardMessageCodec {
Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) {
case 128:
return Everything.decode(readValue(buffer)!);
return Everything.decode(readValue(buffer)! as List<Object?>);
default:
return super.readValueOfType(type, buffer);
@ -114,7 +124,6 @@ class HostEverything {
/// BinaryMessenger will be used which routes to the host platform.
HostEverything({BinaryMessenger? binaryMessenger})
: _binaryMessenger = binaryMessenger;
final BinaryMessenger? _binaryMessenger;
static const MessageCodec<Object?> codec = _HostEverythingCodec();
@ -123,28 +132,25 @@ class HostEverything {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostEverything.giveMeEverything', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Everything?)!;
return (replyList[0] as Everything?)!;
}
}
@ -152,28 +158,26 @@ class HostEverything {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostEverything.echo', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_everything]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_everything]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Everything?)!;
return (replyList[0] as Everything?)!;
}
}
}
@ -194,7 +198,7 @@ class _FlutterEverythingCodec extends StandardMessageCodec {
Object? readValueOfType(int type, ReadBuffer buffer) {
switch (type) {
case 128:
return Everything.decode(readValue(buffer)!);
return Everything.decode(readValue(buffer)! as List<Object?>);
default:
return super.readValueOfType(type, buffer);
@ -206,7 +210,9 @@ abstract class FlutterEverything {
static const MessageCodec<Object?> codec = _FlutterEverythingCodec();
Everything giveMeEverything();
Everything echo(Everything everything);
static void setup(FlutterEverything? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// 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.11), do not edit directly.
// Autogenerated from Pigeon (v4.2.12), 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';
@ -33,47 +33,57 @@ class AllTypes {
});
bool aBool;
int anInt;
double aDouble;
String aString;
Uint8List aByteArray;
Int32List a4ByteArray;
Int64List a8ByteArray;
Float64List aFloatArray;
List<Object?> aList;
Map<Object?, Object?> aMap;
AnEnum anEnum;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['aBool'] = aBool;
pigeonMap['anInt'] = anInt;
pigeonMap['aDouble'] = aDouble;
pigeonMap['aString'] = aString;
pigeonMap['aByteArray'] = aByteArray;
pigeonMap['a4ByteArray'] = a4ByteArray;
pigeonMap['a8ByteArray'] = a8ByteArray;
pigeonMap['aFloatArray'] = aFloatArray;
pigeonMap['aList'] = aList;
pigeonMap['aMap'] = aMap;
pigeonMap['anEnum'] = anEnum.index;
return pigeonMap;
return <Object?>[
aBool,
anInt,
aDouble,
aString,
aByteArray,
a4ByteArray,
a8ByteArray,
aFloatArray,
aList,
aMap,
anEnum.index,
];
}
static AllTypes decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllTypes decode(Object result) {
result as List<Object?>;
return AllTypes(
aBool: pigeonMap['aBool']! as bool,
anInt: pigeonMap['anInt']! as int,
aDouble: pigeonMap['aDouble']! as double,
aString: pigeonMap['aString']! as String,
aByteArray: pigeonMap['aByteArray']! as Uint8List,
a4ByteArray: pigeonMap['a4ByteArray']! as Int32List,
a8ByteArray: pigeonMap['a8ByteArray']! as Int64List,
aFloatArray: pigeonMap['aFloatArray']! as Float64List,
aList: pigeonMap['aList']! as List<Object?>,
aMap: pigeonMap['aMap']! as Map<Object?, Object?>,
anEnum: AnEnum.values[pigeonMap['anEnum']! as int],
aBool: result[0]! as bool,
anInt: result[1]! as int,
aDouble: result[2]! as double,
aString: result[3]! as String,
aByteArray: result[4]! as Uint8List,
a4ByteArray: result[5]! as Int32List,
a8ByteArray: result[6]! as Int64List,
aFloatArray: result[7]! as Float64List,
aList: result[8]! as List<Object?>,
aMap: result[9]! as Map<Object?, Object?>,
anEnum: AnEnum.values[result[10]! as int],
);
}
}
@ -97,63 +107,72 @@ class AllNullableTypes {
});
bool? aNullableBool;
int? aNullableInt;
double? aNullableDouble;
String? aNullableString;
Uint8List? aNullableByteArray;
Int32List? aNullable4ByteArray;
Int64List? aNullable8ByteArray;
Float64List? aNullableFloatArray;
List<Object?>? aNullableList;
Map<Object?, Object?>? aNullableMap;
List<List<bool?>?>? nullableNestedList;
Map<String?, String?>? nullableMapWithAnnotations;
Map<String?, Object?>? nullableMapWithObject;
AnEnum? aNullableEnum;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['aNullableBool'] = aNullableBool;
pigeonMap['aNullableInt'] = aNullableInt;
pigeonMap['aNullableDouble'] = aNullableDouble;
pigeonMap['aNullableString'] = aNullableString;
pigeonMap['aNullableByteArray'] = aNullableByteArray;
pigeonMap['aNullable4ByteArray'] = aNullable4ByteArray;
pigeonMap['aNullable8ByteArray'] = aNullable8ByteArray;
pigeonMap['aNullableFloatArray'] = aNullableFloatArray;
pigeonMap['aNullableList'] = aNullableList;
pigeonMap['aNullableMap'] = aNullableMap;
pigeonMap['nullableNestedList'] = nullableNestedList;
pigeonMap['nullableMapWithAnnotations'] = nullableMapWithAnnotations;
pigeonMap['nullableMapWithObject'] = nullableMapWithObject;
pigeonMap['aNullableEnum'] = aNullableEnum?.index;
return pigeonMap;
return <Object?>[
aNullableBool,
aNullableInt,
aNullableDouble,
aNullableString,
aNullableByteArray,
aNullable4ByteArray,
aNullable8ByteArray,
aNullableFloatArray,
aNullableList,
aNullableMap,
nullableNestedList,
nullableMapWithAnnotations,
nullableMapWithObject,
aNullableEnum?.index,
];
}
static AllNullableTypes decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllNullableTypes decode(Object result) {
result as List<Object?>;
return AllNullableTypes(
aNullableBool: pigeonMap['aNullableBool'] as bool?,
aNullableInt: pigeonMap['aNullableInt'] as int?,
aNullableDouble: pigeonMap['aNullableDouble'] as double?,
aNullableString: pigeonMap['aNullableString'] as String?,
aNullableByteArray: pigeonMap['aNullableByteArray'] as Uint8List?,
aNullable4ByteArray: pigeonMap['aNullable4ByteArray'] as Int32List?,
aNullable8ByteArray: pigeonMap['aNullable8ByteArray'] as Int64List?,
aNullableFloatArray: pigeonMap['aNullableFloatArray'] as Float64List?,
aNullableList: pigeonMap['aNullableList'] as List<Object?>?,
aNullableMap: pigeonMap['aNullableMap'] as Map<Object?, Object?>?,
nullableNestedList: (pigeonMap['nullableNestedList'] as List<Object?>?)
?.cast<List<bool?>?>(),
aNullableBool: result[0] as bool?,
aNullableInt: result[1] as int?,
aNullableDouble: result[2] as double?,
aNullableString: result[3] as String?,
aNullableByteArray: result[4] as Uint8List?,
aNullable4ByteArray: result[5] as Int32List?,
aNullable8ByteArray: result[6] as Int64List?,
aNullableFloatArray: result[7] as Float64List?,
aNullableList: result[8] as List<Object?>?,
aNullableMap: result[9] as Map<Object?, Object?>?,
nullableNestedList: (result[10] as List<Object?>?)?.cast<List<bool?>?>(),
nullableMapWithAnnotations:
(pigeonMap['nullableMapWithAnnotations'] as Map<Object?, Object?>?)
?.cast<String?, String?>(),
(result[11] as Map<Object?, Object?>?)?.cast<String?, String?>(),
nullableMapWithObject:
(pigeonMap['nullableMapWithObject'] as Map<Object?, Object?>?)
?.cast<String?, Object?>(),
aNullableEnum: pigeonMap['aNullableEnum'] != null
? AnEnum.values[pigeonMap['aNullableEnum']! as int]
: null,
(result[12] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
aNullableEnum:
result[13] != null ? AnEnum.values[result[13]! as int] : null,
);
}
}
@ -166,15 +185,15 @@ class AllNullableTypesWrapper {
AllNullableTypes values;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['values'] = values.encode();
return pigeonMap;
return <Object?>[
values.encode(),
];
}
static AllNullableTypesWrapper decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllNullableTypesWrapper decode(Object result) {
result as List<Object?>;
return AllNullableTypesWrapper(
values: AllNullableTypes.decode(pigeonMap['values']!),
values: AllNullableTypes.decode(result[0]! as List<Object?>),
);
}
}
@ -239,20 +258,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.noop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -264,28 +280,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_everything]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_everything]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllTypes?)!;
return (replyList[0] as AllTypes?)!;
}
}
@ -295,23 +309,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_everything]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_everything]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as AllNullableTypes?);
return (replyList[0] as AllNullableTypes?);
}
}
@ -320,20 +332,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.throwError', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -345,28 +354,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_anInt]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_anInt]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
@ -375,28 +382,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aDouble]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aDouble]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 double?)!;
return (replyList[0] as double?)!;
}
}
@ -405,28 +410,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoBool', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aBool]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aBool]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 bool?)!;
return (replyList[0] as bool?)!;
}
}
@ -435,28 +438,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
@ -465,28 +466,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aUint8List]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aUint8List]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Uint8List?)!;
return (replyList[0] as Uint8List?)!;
}
}
@ -498,23 +497,21 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_wrapper]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_wrapper]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as String?);
return (replyList[0] as String?);
}
}
@ -526,28 +523,26 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_nullableString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_nullableString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllNullableTypesWrapper?)!;
return (replyList[0] as AllNullableTypesWrapper?)!;
}
}
@ -558,29 +553,27 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel.send(
final List<Object?>? replyList = await channel.send(
<Object?>[arg_aNullableBool, arg_aNullableInt, arg_aNullableString])
as Map<Object?, Object?>?;
if (replyMap == null) {
as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllNullableTypes?)!;
return (replyList[0] as AllNullableTypes?)!;
}
}
@ -589,23 +582,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableInt]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableInt]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as int?);
return (replyList[0] as int?);
}
}
@ -614,23 +605,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableDouble]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableDouble]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as double?);
return (replyList[0] as double?);
}
}
@ -639,23 +628,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableBool]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableBool]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as bool?);
return (replyList[0] as bool?);
}
}
@ -664,23 +651,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as String?);
return (replyList[0] as String?);
}
}
@ -691,23 +676,21 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableUint8List]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableUint8List]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as Uint8List?);
return (replyList[0] as Uint8List?);
}
}
@ -717,20 +700,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -742,28 +722,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
@ -771,20 +749,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -796,28 +771,26 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
}
@ -869,6 +842,7 @@ abstract class FlutterIntegrationCoreApi {
/// Returns the passed string, to test serialization and deserialization.
String echoString(String aString);
static void setup(FlutterIntegrationCoreApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@ -963,20 +937,17 @@ class HostTrivialApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostTrivialApi.noop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -25,28 +25,26 @@ class MultipleArityHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.MultipleArityHostApi.subtract', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_x, arg_y]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_x, arg_y]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
}
@ -55,6 +53,7 @@ abstract class MultipleArityFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
int subtract(int x, int y);
static void setup(MultipleArityFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -24,15 +24,15 @@ class NonNullFieldSearchRequest {
String query;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['query'] = query;
return pigeonMap;
return <Object?>[
query,
];
}
static NonNullFieldSearchRequest decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static NonNullFieldSearchRequest decode(Object result) {
result as List<Object?>;
return NonNullFieldSearchRequest(
query: pigeonMap['query']! as String,
query: result[0]! as String,
);
}
}
@ -44,20 +44,21 @@ class ExtraData {
});
String detailA;
String detailB;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['detailA'] = detailA;
pigeonMap['detailB'] = detailB;
return pigeonMap;
return <Object?>[
detailA,
detailB,
];
}
static ExtraData decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static ExtraData decode(Object result) {
result as List<Object?>;
return ExtraData(
detailA: pigeonMap['detailA']! as String,
detailB: pigeonMap['detailB']! as String,
detailA: result[0]! as String,
detailB: result[1]! as String,
);
}
}
@ -72,29 +73,33 @@ class NonNullFieldSearchReply {
});
String result;
String error;
List<int?> indices;
ExtraData extraData;
ReplyType type;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['result'] = result;
pigeonMap['error'] = error;
pigeonMap['indices'] = indices;
pigeonMap['extraData'] = extraData.encode();
pigeonMap['type'] = type.index;
return pigeonMap;
return <Object?>[
result,
error,
indices,
extraData.encode(),
type.index,
];
}
static NonNullFieldSearchReply decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static NonNullFieldSearchReply decode(Object result) {
result as List<Object?>;
return NonNullFieldSearchReply(
result: pigeonMap['result']! as String,
error: pigeonMap['error']! as String,
indices: (pigeonMap['indices'] as List<Object?>?)!.cast<int?>(),
extraData: ExtraData.decode(pigeonMap['extraData']!),
type: ReplyType.values[pigeonMap['type']! as int],
result: result[0]! as String,
error: result[1]! as String,
indices: (result[2] as List<Object?>?)!.cast<int?>(),
extraData: ExtraData.decode(result[3]! as List<Object?>),
type: ReplyType.values[result[4]! as int],
);
}
}
@ -150,28 +155,26 @@ class NonNullFieldHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NonNullFieldHostApi.search', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_nested]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_nested]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 NonNullFieldSearchReply?)!;
return (replyList[0] as NonNullFieldSearchReply?)!;
}
}
}
@ -216,6 +219,7 @@ abstract class NonNullFieldFlutterApi {
static const MessageCodec<Object?> codec = _NonNullFieldFlutterApiCodec();
NonNullFieldSearchReply search(NonNullFieldSearchRequest request);
static void setup(NonNullFieldFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -23,20 +23,21 @@ class NullFieldsSearchRequest {
});
String? query;
int identifier;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['query'] = query;
pigeonMap['identifier'] = identifier;
return pigeonMap;
return <Object?>[
query,
identifier,
];
}
static NullFieldsSearchRequest decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static NullFieldsSearchRequest decode(Object result) {
result as List<Object?>;
return NullFieldsSearchRequest(
query: pigeonMap['query'] as String?,
identifier: pigeonMap['identifier']! as int,
query: result[0] as String?,
identifier: result[1]! as int,
);
}
}
@ -51,32 +52,36 @@ class NullFieldsSearchReply {
});
String? result;
String? error;
List<int?>? indices;
NullFieldsSearchRequest? request;
NullFieldsSearchReplyType? type;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['result'] = result;
pigeonMap['error'] = error;
pigeonMap['indices'] = indices;
pigeonMap['request'] = request?.encode();
pigeonMap['type'] = type?.index;
return pigeonMap;
return <Object?>[
result,
error,
indices,
request?.encode(),
type?.index,
];
}
static NullFieldsSearchReply decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static NullFieldsSearchReply decode(Object result) {
result as List<Object?>;
return NullFieldsSearchReply(
result: pigeonMap['result'] as String?,
error: pigeonMap['error'] as String?,
indices: (pigeonMap['indices'] as List<Object?>?)?.cast<int?>(),
request: pigeonMap['request'] != null
? NullFieldsSearchRequest.decode(pigeonMap['request']!)
result: result[0] as String?,
error: result[1] as String?,
indices: (result[2] as List<Object?>?)?.cast<int?>(),
request: result[3] != null
? NullFieldsSearchRequest.decode(result[3]! as List<Object?>)
: null,
type: pigeonMap['type'] != null
? NullFieldsSearchReplyType.values[pigeonMap['type']! as int]
type: result[4] != null
? NullFieldsSearchReplyType.values[result[4]! as int]
: null,
);
}
@ -127,28 +132,26 @@ class NullFieldsHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NullFieldsHostApi.search', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_nested]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_nested]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 NullFieldsSearchReply?)!;
return (replyList[0] as NullFieldsSearchReply?)!;
}
}
}
@ -187,6 +190,7 @@ abstract class NullFieldsFlutterApi {
static const MessageCodec<Object?> codec = _NullFieldsFlutterApiCodec();
NullFieldsSearchReply search(NullFieldsSearchRequest request);
static void setup(NullFieldsFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -19,15 +19,15 @@ class FlutterSearchRequest {
String? query;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['query'] = query;
return pigeonMap;
return <Object?>[
query,
];
}
static FlutterSearchRequest decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static FlutterSearchRequest decode(Object result) {
result as List<Object?>;
return FlutterSearchRequest(
query: pigeonMap['query'] as String?,
query: result[0] as String?,
);
}
}
@ -39,20 +39,21 @@ class FlutterSearchReply {
});
String? result;
String? error;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['result'] = result;
pigeonMap['error'] = error;
return pigeonMap;
return <Object?>[
result,
error,
];
}
static FlutterSearchReply decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static FlutterSearchReply decode(Object result) {
result as List<Object?>;
return FlutterSearchReply(
result: pigeonMap['result'] as String?,
error: pigeonMap['error'] as String?,
result: result[0] as String?,
error: result[1] as String?,
);
}
}
@ -65,15 +66,15 @@ class FlutterSearchRequests {
List<Object?>? requests;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['requests'] = requests;
return pigeonMap;
return <Object?>[
requests,
];
}
static FlutterSearchRequests decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static FlutterSearchRequests decode(Object result) {
result as List<Object?>;
return FlutterSearchRequests(
requests: pigeonMap['requests'] as List<Object?>?,
requests: result[0] as List<Object?>?,
);
}
}
@ -86,15 +87,15 @@ class FlutterSearchReplies {
List<Object?>? replies;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['replies'] = replies;
return pigeonMap;
return <Object?>[
replies,
];
}
static FlutterSearchReplies decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static FlutterSearchReplies decode(Object result) {
result as List<Object?>;
return FlutterSearchReplies(
replies: pigeonMap['replies'] as List<Object?>?,
replies: result[0] as List<Object?>?,
);
}
}
@ -154,28 +155,26 @@ class Api {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.Api.search', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_request]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_request]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 FlutterSearchReply?)!;
return (replyList[0] as FlutterSearchReply?)!;
}
}
@ -184,28 +183,26 @@ class Api {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.Api.doSearches', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_request]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_request]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 FlutterSearchReplies?)!;
return (replyList[0] as FlutterSearchReplies?)!;
}
}
@ -213,28 +210,26 @@ class Api {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.Api.echo', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_requests]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_requests]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 FlutterSearchRequests?)!;
return (replyList[0] as FlutterSearchRequests?)!;
}
}
@ -242,28 +237,26 @@ class Api {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.Api.anInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
}

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -25,23 +25,20 @@ class NullableReturnHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NullableReturnHostApi.doit', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as int?);
return (replyList[0] as int?);
}
}
}
@ -50,6 +47,7 @@ abstract class NullableReturnFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
int? doit();
static void setup(NullableReturnFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@ -83,28 +81,26 @@ class NullableArgHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NullableArgHostApi.doit', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_x]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_x]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
}
@ -113,6 +109,7 @@ abstract class NullableArgFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
int doit(int? x);
static void setup(NullableArgFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@ -149,23 +146,20 @@ class NullableCollectionReturnHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NullableCollectionReturnHostApi.doit', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as List<Object?>?)?.cast<String?>();
return (replyList[0] as List<Object?>?)?.cast<String?>();
}
}
}
@ -174,6 +168,7 @@ abstract class NullableCollectionReturnFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
List<String?>? doit();
static void setup(NullableCollectionReturnFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@ -207,28 +202,26 @@ class NullableCollectionArgHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.NullableCollectionArgHostApi.doit', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_x]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_x]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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<Object?>?)!.cast<String?>();
return (replyList[0] as List<Object?>?)!.cast<String?>();
}
}
}
@ -237,6 +230,7 @@ abstract class NullableCollectionArgFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
List<String?> doit(List<String?>? x);
static void setup(NullableCollectionArgFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -2,7 +2,7 @@
// 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.7), do not edit directly.
// Autogenerated from Pigeon (v4.2.11), 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';
@ -25,28 +25,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.anInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
@ -54,28 +52,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aBool', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 bool?)!;
return (replyList[0] as bool?)!;
}
}
@ -83,28 +79,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
@ -112,28 +106,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aDouble', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 double?)!;
return (replyList[0] as double?)!;
}
}
@ -141,28 +133,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aMap', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Map<Object?, Object?>?)!;
return (replyList[0] as Map<Object?, Object?>?)!;
}
}
@ -170,28 +160,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aList', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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<Object?>?)!;
return (replyList[0] as List<Object?>?)!;
}
}
@ -199,28 +187,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.anInt32List', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Int32List?)!;
return (replyList[0] as Int32List?)!;
}
}
@ -228,28 +214,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aBoolList', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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<Object?>?)!.cast<bool?>();
return (replyList[0] as List<Object?>?)!.cast<bool?>();
}
}
@ -257,29 +241,26 @@ class PrimitiveHostApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.PrimitiveHostApi.aStringIntMap', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_value]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_value]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Map<Object?, Object?>?)!
.cast<String?, int?>();
return (replyList[0] as Map<Object?, Object?>?)!.cast<String?, int?>();
}
}
}
@ -288,14 +269,23 @@ abstract class PrimitiveFlutterApi {
static const MessageCodec<Object?> codec = StandardMessageCodec();
int anInt(int value);
bool aBool(bool value);
String aString(String value);
double aDouble(double value);
Map<Object?, Object?> aMap(Map<Object?, Object?> value);
List<Object?> aList(List<Object?> value);
Int32List anInt32List(Int32List value);
List<bool?> aBoolList(List<bool?> value);
Map<String?, int?> aStringIntMap(Map<String?, int?> value);
static void setup(PrimitiveFlutterApi? api,
{BinaryMessenger? binaryMessenger}) {
{

View File

@ -21,8 +21,7 @@ void main() {
final List<Object?> args = input as List<Object?>;
final int x = (args[0] as int?)!;
final int y = (args[1] as int?)!;
return MultipleArityHostApi.codec
.encodeMessage(<String, Object>{'result': x - y});
return MultipleArityHostApi.codec.encodeMessage(<Object>[x - y]);
});
final MultipleArityHostApi api =

View File

@ -44,36 +44,35 @@ void main() {
test('test request decode with values', () {
final NullFieldsSearchRequest request =
NullFieldsSearchRequest.decode(<String, dynamic>{
'query': 'query',
'identifier': 1,
});
NullFieldsSearchRequest.decode(<dynamic>[
'query',
1,
]);
expect(request.query, 'query');
});
test('test request decode with null', () {
final NullFieldsSearchRequest request =
NullFieldsSearchRequest.decode(<String, dynamic>{
'query': null,
'identifier': 1,
});
NullFieldsSearchRequest.decode(<dynamic>[
null,
1,
]);
expect(request.query, isNull);
});
test('test reply decode with values', () {
final NullFieldsSearchReply reply =
NullFieldsSearchReply.decode(<String, dynamic>{
'result': 'result',
'error': 'error',
'indices': <int>[1, 2, 3],
'request': <String, dynamic>{
'query': 'query',
'identifier': 1,
},
'type': NullFieldsSearchReplyType.success.index,
});
final NullFieldsSearchReply reply = NullFieldsSearchReply.decode(<dynamic>[
'result',
'error',
<int>[1, 2, 3],
<dynamic>[
'query',
1,
],
NullFieldsSearchReplyType.success.index,
]);
expect(reply.result, 'result');
expect(reply.error, 'error');
@ -83,14 +82,13 @@ void main() {
});
test('test reply decode with nulls', () {
final NullFieldsSearchReply reply =
NullFieldsSearchReply.decode(<String, dynamic>{
'result': null,
'error': null,
'indices': null,
'request': null,
'type': null,
});
final NullFieldsSearchReply reply = NullFieldsSearchReply.decode(<dynamic>[
null,
null,
null,
null,
null,
]);
expect(reply.result, isNull);
expect(reply.error, isNull);
@ -103,20 +101,20 @@ void main() {
final NullFieldsSearchRequest request =
NullFieldsSearchRequest(query: 'query', identifier: 1);
expect(request.encode(), <String, dynamic>{
'query': 'query',
'identifier': 1,
});
expect(request.encode(), <Object?>[
'query',
1,
]);
});
test('test request encode with null', () {
final NullFieldsSearchRequest request =
NullFieldsSearchRequest(identifier: 1);
expect(request.encode(), <String, dynamic>{
'query': null,
'identifier': 1,
});
expect(request.encode(), <Object?>[
null,
1,
]);
});
test('test reply encode with values', () {
@ -128,27 +126,27 @@ void main() {
type: NullFieldsSearchReplyType.success,
);
expect(reply.encode(), <String, dynamic>{
'result': 'result',
'error': 'error',
'indices': <int>[1, 2, 3],
'request': <String, dynamic>{
'query': 'query',
'identifier': 1,
},
'type': NullFieldsSearchReplyType.success.index,
});
expect(reply.encode(), <Object?>[
'result',
'error',
<int>[1, 2, 3],
<Object?>[
'query',
1,
],
NullFieldsSearchReplyType.success.index,
]);
});
test('test reply encode with nulls', () {
final NullFieldsSearchReply reply = NullFieldsSearchReply();
expect(reply.encode(), <String, dynamic>{
'result': null,
'error': null,
'indices': null,
'request': null,
'type': null,
});
expect(reply.encode(), <Object?>[
null,
null,
null,
null,
null,
]);
});
}

View File

@ -28,7 +28,7 @@ void main() {
final FlutterSearchReply reply = FlutterSearchReply()
..result = 'foo'
..error = 'bar';
final Object encoded = reply.encode();
final List<Object?> encoded = reply.encode() as List<Object?>;
final FlutterSearchReply decoded = FlutterSearchReply.decode(encoded);
expect(reply.result, decoded.result);
expect(reply.error, decoded.error);
@ -38,7 +38,7 @@ void main() {
final FlutterSearchReply reply = FlutterSearchReply()
..result = 'foo'
..error = null;
final Object encoded = reply.encode();
final List<Object?> encoded = reply.encode() as List<Object?>;
final FlutterSearchReply decoded = FlutterSearchReply.decode(encoded);
expect(reply.result, decoded.result);
expect(reply.error, decoded.error);
@ -49,8 +49,7 @@ void main() {
final FlutterSearchReply reply = FlutterSearchReply()..result = 'ho';
final BinaryMessenger mockMessenger = MockBinaryMessenger();
final Completer<ByteData?> completer = Completer<ByteData?>();
completer
.complete(Api.codec.encodeMessage(<String, Object>{'result': reply}));
completer.complete(Api.codec.encodeMessage(<Object>[reply]));
final Future<ByteData?> sendResult = completer.future;
when(mockMessenger.send('dev.flutter.pigeon.Api.search', any))
.thenAnswer((Invocation realInvocation) => sendResult);
@ -93,7 +92,7 @@ void main() {
const String channel = 'dev.flutter.pigeon.Api.anInt';
when(mockMessenger.send(channel, any))
.thenAnswer((Invocation realInvocation) async {
return Api.codec.encodeMessage(<String?, Object?>{'result': null});
return Api.codec.encodeMessage(<Object?>[null]);
});
final Api api = Api(binaryMessenger: mockMessenger);
expect(() async => api.anInt(1),
@ -105,7 +104,7 @@ void main() {
const String channel = 'dev.flutter.pigeon.NullableArgHostApi.doit';
when(mockMessenger.send(channel, any))
.thenAnswer((Invocation realInvocation) async {
return Api.codec.encodeMessage(<String?, Object?>{'result': 123});
return Api.codec.encodeMessage(<Object?>[123]);
});
final NullableArgHostApi api =
NullableArgHostApi(binaryMessenger: mockMessenger);
@ -118,9 +117,9 @@ void main() {
'dev.flutter.pigeon.NullableCollectionArgHostApi.doit';
when(mockMessenger.send(channel, any))
.thenAnswer((Invocation realInvocation) async {
return Api.codec.encodeMessage(<String?, Object?>{
'result': <String?>['123']
});
return Api.codec.encodeMessage(<Object?>[
<String?>['123']
]);
});
final NullableCollectionArgHostApi api =
NullableCollectionArgHostApi(binaryMessenger: mockMessenger);
@ -182,8 +181,7 @@ void main() {
const String channel = 'dev.flutter.pigeon.NullableReturnHostApi.doit';
when(mockMessenger.send(channel, any))
.thenAnswer((Invocation realInvocation) async {
return NullableReturnHostApi.codec
.encodeMessage(<String?, Object?>{'result': null});
return NullableReturnHostApi.codec.encodeMessage(<Object?>[null]);
});
final NullableReturnHostApi api =
NullableReturnHostApi(binaryMessenger: mockMessenger);
@ -197,7 +195,7 @@ void main() {
when(mockMessenger.send(channel, any))
.thenAnswer((Invocation realInvocation) async {
return NullableCollectionReturnHostApi.codec
.encodeMessage(<String?, Object?>{'result': null});
.encodeMessage(<Object?>[null]);
});
final NullableCollectionReturnHostApi api =
NullableCollectionReturnHostApi(binaryMessenger: mockMessenger);

View File

@ -15,6 +15,6 @@ void echoOneArgument(
final Object input =
codec.decodeMessage(realInvocation.positionalArguments[1])!;
final List<Object?> args = input as List<Object?>;
return codec.encodeMessage(<String, Object>{'result': args[0]!});
return codec.encodeMessage(<Object>[args[0]!]);
});
}

View File

@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
<string>11.0</string>
</dict>
</plist>

View File

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@ -366,6 +366,7 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@ -380,6 +381,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@ -591,7 +593,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
@ -670,7 +672,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -719,7 +721,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;

View File

@ -43,5 +43,7 @@
<false/>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
</dict>
</plist>

View File

@ -2,7 +2,7 @@
// 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.11), do not edit directly.
// Autogenerated from Pigeon (v4.2.12), 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';
@ -33,47 +33,57 @@ class AllTypes {
});
bool aBool;
int anInt;
double aDouble;
String aString;
Uint8List aByteArray;
Int32List a4ByteArray;
Int64List a8ByteArray;
Float64List aFloatArray;
List<Object?> aList;
Map<Object?, Object?> aMap;
AnEnum anEnum;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['aBool'] = aBool;
pigeonMap['anInt'] = anInt;
pigeonMap['aDouble'] = aDouble;
pigeonMap['aString'] = aString;
pigeonMap['aByteArray'] = aByteArray;
pigeonMap['a4ByteArray'] = a4ByteArray;
pigeonMap['a8ByteArray'] = a8ByteArray;
pigeonMap['aFloatArray'] = aFloatArray;
pigeonMap['aList'] = aList;
pigeonMap['aMap'] = aMap;
pigeonMap['anEnum'] = anEnum.index;
return pigeonMap;
return <Object?>[
aBool,
anInt,
aDouble,
aString,
aByteArray,
a4ByteArray,
a8ByteArray,
aFloatArray,
aList,
aMap,
anEnum.index,
];
}
static AllTypes decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllTypes decode(Object result) {
result as List<Object?>;
return AllTypes(
aBool: pigeonMap['aBool']! as bool,
anInt: pigeonMap['anInt']! as int,
aDouble: pigeonMap['aDouble']! as double,
aString: pigeonMap['aString']! as String,
aByteArray: pigeonMap['aByteArray']! as Uint8List,
a4ByteArray: pigeonMap['a4ByteArray']! as Int32List,
a8ByteArray: pigeonMap['a8ByteArray']! as Int64List,
aFloatArray: pigeonMap['aFloatArray']! as Float64List,
aList: pigeonMap['aList']! as List<Object?>,
aMap: pigeonMap['aMap']! as Map<Object?, Object?>,
anEnum: AnEnum.values[pigeonMap['anEnum']! as int],
aBool: result[0]! as bool,
anInt: result[1]! as int,
aDouble: result[2]! as double,
aString: result[3]! as String,
aByteArray: result[4]! as Uint8List,
a4ByteArray: result[5]! as Int32List,
a8ByteArray: result[6]! as Int64List,
aFloatArray: result[7]! as Float64List,
aList: result[8]! as List<Object?>,
aMap: result[9]! as Map<Object?, Object?>,
anEnum: AnEnum.values[result[10]! as int],
);
}
}
@ -97,63 +107,72 @@ class AllNullableTypes {
});
bool? aNullableBool;
int? aNullableInt;
double? aNullableDouble;
String? aNullableString;
Uint8List? aNullableByteArray;
Int32List? aNullable4ByteArray;
Int64List? aNullable8ByteArray;
Float64List? aNullableFloatArray;
List<Object?>? aNullableList;
Map<Object?, Object?>? aNullableMap;
List<List<bool?>?>? nullableNestedList;
Map<String?, String?>? nullableMapWithAnnotations;
Map<String?, Object?>? nullableMapWithObject;
AnEnum? aNullableEnum;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['aNullableBool'] = aNullableBool;
pigeonMap['aNullableInt'] = aNullableInt;
pigeonMap['aNullableDouble'] = aNullableDouble;
pigeonMap['aNullableString'] = aNullableString;
pigeonMap['aNullableByteArray'] = aNullableByteArray;
pigeonMap['aNullable4ByteArray'] = aNullable4ByteArray;
pigeonMap['aNullable8ByteArray'] = aNullable8ByteArray;
pigeonMap['aNullableFloatArray'] = aNullableFloatArray;
pigeonMap['aNullableList'] = aNullableList;
pigeonMap['aNullableMap'] = aNullableMap;
pigeonMap['nullableNestedList'] = nullableNestedList;
pigeonMap['nullableMapWithAnnotations'] = nullableMapWithAnnotations;
pigeonMap['nullableMapWithObject'] = nullableMapWithObject;
pigeonMap['aNullableEnum'] = aNullableEnum?.index;
return pigeonMap;
return <Object?>[
aNullableBool,
aNullableInt,
aNullableDouble,
aNullableString,
aNullableByteArray,
aNullable4ByteArray,
aNullable8ByteArray,
aNullableFloatArray,
aNullableList,
aNullableMap,
nullableNestedList,
nullableMapWithAnnotations,
nullableMapWithObject,
aNullableEnum?.index,
];
}
static AllNullableTypes decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllNullableTypes decode(Object result) {
result as List<Object?>;
return AllNullableTypes(
aNullableBool: pigeonMap['aNullableBool'] as bool?,
aNullableInt: pigeonMap['aNullableInt'] as int?,
aNullableDouble: pigeonMap['aNullableDouble'] as double?,
aNullableString: pigeonMap['aNullableString'] as String?,
aNullableByteArray: pigeonMap['aNullableByteArray'] as Uint8List?,
aNullable4ByteArray: pigeonMap['aNullable4ByteArray'] as Int32List?,
aNullable8ByteArray: pigeonMap['aNullable8ByteArray'] as Int64List?,
aNullableFloatArray: pigeonMap['aNullableFloatArray'] as Float64List?,
aNullableList: pigeonMap['aNullableList'] as List<Object?>?,
aNullableMap: pigeonMap['aNullableMap'] as Map<Object?, Object?>?,
nullableNestedList: (pigeonMap['nullableNestedList'] as List<Object?>?)
?.cast<List<bool?>?>(),
aNullableBool: result[0] as bool?,
aNullableInt: result[1] as int?,
aNullableDouble: result[2] as double?,
aNullableString: result[3] as String?,
aNullableByteArray: result[4] as Uint8List?,
aNullable4ByteArray: result[5] as Int32List?,
aNullable8ByteArray: result[6] as Int64List?,
aNullableFloatArray: result[7] as Float64List?,
aNullableList: result[8] as List<Object?>?,
aNullableMap: result[9] as Map<Object?, Object?>?,
nullableNestedList: (result[10] as List<Object?>?)?.cast<List<bool?>?>(),
nullableMapWithAnnotations:
(pigeonMap['nullableMapWithAnnotations'] as Map<Object?, Object?>?)
?.cast<String?, String?>(),
(result[11] as Map<Object?, Object?>?)?.cast<String?, String?>(),
nullableMapWithObject:
(pigeonMap['nullableMapWithObject'] as Map<Object?, Object?>?)
?.cast<String?, Object?>(),
aNullableEnum: pigeonMap['aNullableEnum'] != null
? AnEnum.values[pigeonMap['aNullableEnum']! as int]
: null,
(result[12] as Map<Object?, Object?>?)?.cast<String?, Object?>(),
aNullableEnum:
result[13] != null ? AnEnum.values[result[13]! as int] : null,
);
}
}
@ -166,15 +185,15 @@ class AllNullableTypesWrapper {
AllNullableTypes values;
Object encode() {
final Map<Object?, Object?> pigeonMap = <Object?, Object?>{};
pigeonMap['values'] = values.encode();
return pigeonMap;
return <Object?>[
values.encode(),
];
}
static AllNullableTypesWrapper decode(Object message) {
final Map<Object?, Object?> pigeonMap = message as Map<Object?, Object?>;
static AllNullableTypesWrapper decode(Object result) {
result as List<Object?>;
return AllNullableTypesWrapper(
values: AllNullableTypes.decode(pigeonMap['values']!),
values: AllNullableTypes.decode(result[0]! as List<Object?>),
);
}
}
@ -239,20 +258,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.noop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -264,28 +280,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAllTypes', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_everything]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_everything]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllTypes?)!;
return (replyList[0] as AllTypes?)!;
}
}
@ -295,23 +309,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAllNullableTypes', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_everything]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_everything]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as AllNullableTypes?);
return (replyList[0] as AllNullableTypes?);
}
}
@ -320,20 +332,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.throwError', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -345,28 +354,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_anInt]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_anInt]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 int?)!;
return (replyList[0] as int?)!;
}
}
@ -375,28 +382,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoDouble', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aDouble]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aDouble]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 double?)!;
return (replyList[0] as double?)!;
}
}
@ -405,28 +410,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoBool', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aBool]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aBool]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 bool?)!;
return (replyList[0] as bool?)!;
}
}
@ -435,28 +438,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
@ -465,28 +466,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoUint8List', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aUint8List]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aUint8List]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 Uint8List?)!;
return (replyList[0] as Uint8List?)!;
}
}
@ -498,23 +497,21 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.extractNestedNullableString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_wrapper]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_wrapper]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as String?);
return (replyList[0] as String?);
}
}
@ -526,28 +523,26 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.createNestedNullableString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_nullableString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_nullableString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllNullableTypesWrapper?)!;
return (replyList[0] as AllNullableTypesWrapper?)!;
}
}
@ -558,29 +553,27 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.sendMultipleNullableTypes',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel.send(
final List<Object?>? replyList = await channel.send(
<Object?>[arg_aNullableBool, arg_aNullableInt, arg_aNullableString])
as Map<Object?, Object?>?;
if (replyMap == null) {
as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 AllNullableTypes?)!;
return (replyList[0] as AllNullableTypes?)!;
}
}
@ -589,23 +582,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableInt', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableInt]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableInt]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as int?);
return (replyList[0] as int?);
}
}
@ -614,23 +605,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableDouble', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableDouble]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableDouble]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as double?);
return (replyList[0] as double?);
}
}
@ -639,23 +628,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableBool', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableBool]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableBool]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as bool?);
return (replyList[0] as bool?);
}
}
@ -664,23 +651,21 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as String?);
return (replyList[0] as String?);
}
}
@ -691,23 +676,21 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.echoNullableUint8List',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap = await channel
.send(<Object?>[arg_aNullableUint8List]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aNullableUint8List]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return (replyMap['result'] as Uint8List?);
return (replyList[0] as Uint8List?);
}
}
@ -717,20 +700,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.noopAsync', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -742,28 +722,26 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.echoAsyncString', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
@ -771,20 +749,17 @@ class HostIntegrationCoreApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterNoop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;
@ -796,28 +771,26 @@ class HostIntegrationCoreApi {
'dev.flutter.pigeon.HostIntegrationCoreApi.callFlutterEchoString',
codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(<Object?>[arg_aString]) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList =
await channel.send(<Object?>[arg_aString]) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 String?)!;
return (replyList[0] as String?)!;
}
}
}
@ -869,6 +842,7 @@ abstract class FlutterIntegrationCoreApi {
/// Returns the passed string, to test serialization and deserialization.
String echoString(String aString);
static void setup(FlutterIntegrationCoreApi? api,
{BinaryMessenger? binaryMessenger}) {
{
@ -963,20 +937,17 @@ class HostTrivialApi {
final BasicMessageChannel<Object?> channel = BasicMessageChannel<Object?>(
'dev.flutter.pigeon.HostTrivialApi.noop', codec,
binaryMessenger: _binaryMessenger);
final Map<Object?, Object?>? replyMap =
await channel.send(null) as Map<Object?, Object?>?;
if (replyMap == null) {
final List<Object?>? replyList = await channel.send(null) as List<Object?>?;
if (replyList == null) {
throw PlatformException(
code: 'channel-error',
message: 'Unable to establish connection on channel.',
);
} else if (replyMap['error'] != null) {
final Map<Object?, Object?> error =
(replyMap['error'] as Map<Object?, Object?>?)!;
} 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 {
return;

View File

@ -101,11 +101,14 @@ internal class AllDatatypesTest: TestCase() {
@Test
fun testIntegerToLong() {
val everything = AllNullableTypes(aNullableInt = 123L)
val map = everything.toMap()
assertTrue(map.containsKey("aNullableInt"))
val list = everything.toList()
assertNotNull(list)
assertNull(list.first())
assertNotNull(list[1])
assertTrue(list[1] == 123L)
val map2 = hashMapOf("aNullableInt" to 123)
val everything2 = AllNullableTypes.fromMap(map2)
val list2 = listOf(null, 123, null, null, null, null, null, null, null, null, null, null, null, null)
val everything2 = AllNullableTypes.fromList(list2)
assertEquals(everything.aNullableInt, everything2.aNullableInt)
}

View File

@ -70,10 +70,10 @@ internal class AsyncHandlersTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as MutableList<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(output, wrapped["result"])
assertEquals(output, wrapped.first())
}
}
@ -104,7 +104,7 @@ internal class AsyncHandlersTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as MutableList<Any>?
assertNull(wrapped)
}

View File

@ -36,11 +36,11 @@ internal class EnumTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertTrue(wrapped.containsKey("result"))
assertEquals(input, wrapped["result"])
assertNotNull(wrapped[0])
assertEquals(input, wrapped[0])
}
}

View File

@ -36,10 +36,10 @@ class MultipleArityTests: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(inputX - inputY, wrapped["result"])
assertEquals(inputX - inputY, wrapped[0])
}
}
}

View File

@ -34,10 +34,10 @@ class NullableReturnsTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(output, wrapped["result"])
assertEquals(output, wrapped[0])
}
}

View File

@ -36,10 +36,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input.toLong(), wrapped["result"])
assertEquals(input.toLong(), wrapped[0])
}
}
@ -84,10 +84,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -132,10 +132,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -164,10 +164,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -212,10 +212,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -260,10 +260,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -308,10 +308,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertTrue(input.contentEquals(wrapped["result"] as IntArray))
assertTrue(input.contentEquals(wrapped[0] as IntArray))
}
}
@ -356,10 +356,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}
@ -404,10 +404,10 @@ class PrimitiveTest: TestCase() {
handlerSlot.captured.onMessage(message) {
it?.rewind()
@Suppress("UNCHECKED_CAST")
val wrapped = codec.decodeMessage(it) as HashMap<String, Any>?
val wrapped = codec.decodeMessage(it) as List<Any>?
assertNotNull(wrapped)
wrapped?.let {
assertEquals(input, wrapped["result"])
assertEquals(input, wrapped[0])
}
}

View File

@ -1,7 +1,6 @@
// 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.
import XCTest
@testable import test_plugin
@ -43,9 +42,8 @@ class AsyncHandlersTest: XCTestCase {
let expectation = XCTestExpectation(description: "voidvoid callback")
binaryMessenger.handlers[channelName]?(nil) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertEqual(outputMap?["result"] as! NSNull, NSNull())
XCTAssertNil(outputMap?["error"])
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertEqual(outputList?.first as! NSNull, NSNull())
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -64,8 +62,8 @@ class AsyncHandlersTest: XCTestCase {
let expectation = XCTestExpectation(description: "calculate callback")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
let output = outputMap?["result"] as? Value
let outputList = binaryMessenger.codec.decode(data) as? [Any]
let output = outputList?.first as? Value
XCTAssertEqual(output?.number, 2)
expectation.fulfill()
}

View File

@ -30,12 +30,12 @@ class EnumTests: XCTestCase {
let expectation = XCTestExpectation(description: "echo")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
let outputMap = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputMap)
let output = outputMap?["result"] as? DataWithEnum
let output = outputMap?.first as? DataWithEnum
XCTAssertEqual(output, input)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputMap?.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)

View File

@ -26,12 +26,12 @@ class MultipleArityTests: XCTestCase {
let expectation = XCTestExpectation(description: "subtraction")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? Int32
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList![0] as? Int32
XCTAssertEqual(3, output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList?.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)

View File

@ -32,12 +32,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "anInt")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? Int32
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList!.first as? Int32
XCTAssertEqual(1, output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList!.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -66,12 +66,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "aBool")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? Bool
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList!.first as? Bool
XCTAssertEqual(true, output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList!.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -100,12 +100,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "aDouble")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? Double
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList!.first as? Double
XCTAssertEqual(1.0, output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList!.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -135,12 +135,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "aString")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? String
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList!.first as? String
XCTAssertEqual("hello", output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList!.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -170,12 +170,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "aList")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = outputMap!["result"] as? [Int]
let outputList = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertNotNil(outputList)
let output = outputList!.first as? [Int]
XCTAssertEqual([1, 2, 3], output)
XCTAssertNil(outputMap?["error"])
XCTAssertTrue(outputList!.count == 1)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)
@ -205,12 +205,12 @@ class PrimitiveTests: XCTestCase {
let expectation = XCTestExpectation(description: "aMap")
binaryMessenger.handlers[channelName]?(inputEncoded) { data in
let outputMap = binaryMessenger.codec.decode(data) as? [String: Any]
XCTAssertNotNil(outputMap)
let output = binaryMessenger.codec.decode(data) as? [Any]
XCTAssertTrue(output?.count == 1)
let output = outputMap!["result"] as? [String: Int]
XCTAssertEqual(["hello": 1, "world": 2], output)
XCTAssertNil(outputMap?["error"])
let outputMap = output?.first as? [String: Int]
XCTAssertNotNil(outputMap)
XCTAssertEqual(["hello": 1, "world": 2], outputMap)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1.0)

View File

@ -6,25 +6,25 @@ import XCTest
@testable import test_plugin
class RunnerTests: XCTestCase {
func testToMapAndBack() throws {
func testToListAndBack() throws {
let reply = MessageSearchReply(result: "foobar")
let dict = reply.toMap()
let copy = MessageSearchReply.fromMap(dict)
let dict = reply.toList()
let copy = MessageSearchReply.fromList(dict)
XCTAssertEqual(reply.result, copy?.result)
}
func testHandlesNull() throws {
let reply = MessageSearchReply()
let dict = reply.toMap()
let copy = MessageSearchReply.fromMap(dict)
let dict = reply.toList()
let copy = MessageSearchReply.fromList(dict)
XCTAssertNil(copy?.result)
}
func testHandlesNullFirst() throws {
let reply = MessageSearchReply(error: "foobar")
let dict = reply.toMap()
let copy = MessageSearchReply.fromMap(dict)
let dict = reply.toList()
let copy = MessageSearchReply.fromList(dict)
XCTAssertEqual(reply.error, copy?.error)
}
}

View File

@ -25,7 +25,7 @@ class TestHostApi : public MultipleArityHostApi {
};
const EncodableValue& GetResult(const EncodableValue& pigeon_response) {
return std::get<EncodableMap>(pigeon_response).at(EncodableValue("result"));
return std::get<EncodableList>(pigeon_response)[0];
}
} // namespace

View File

@ -15,20 +15,21 @@ using flutter::EncodableList;
using flutter::EncodableMap;
using flutter::EncodableValue;
// EXPECTs that 'map' contains 'key', and then returns a pointer to its value.
//
// This gives useful test failure messages instead of silent crashes when the
// value isn't present, or has the wrong type.
/// EXPECTs that 'list' contains 'index', and then returns a pointer to its
/// value.
///
/// This gives useful test failure messages instead of silent crashes when the
/// value isn't present, or has the wrong type.
template <class T>
const T* ExpectAndGet(const EncodableMap& map, const std::string& key) {
auto it = map.find(EncodableValue(key));
EXPECT_TRUE(it != map.end()) << "Could not find value for '" << key << '"';
if (it == map.end()) {
const T* ExpectAndGetIndex(const EncodableList& list, const int i) {
EXPECT_LT(i, list.size())
<< "Index " << i << " is out of bounds; size is " << list.size();
if (i >= list.size()) {
return nullptr;
}
const T* value_ptr = std::get_if<T>(&(it->second));
const T* value_ptr = std::get_if<T>(&(list[i]));
EXPECT_NE(value_ptr, nullptr)
<< "Value for '" << key << "' has incorrect type";
<< "Value for index " << i << " has incorrect type";
return value_ptr;
}
@ -36,22 +37,22 @@ const T* ExpectAndGet(const EncodableMap& map, const std::string& key) {
class NullFieldsTest : public ::testing::Test {
protected:
// Wrapper for access to private NullFieldsSearchRequest map constructor.
NullFieldsSearchRequest RequestFromMap(const EncodableMap& map) {
return NullFieldsSearchRequest(map);
// Wrapper for access to private NullFieldsSearchRequest list constructor.
NullFieldsSearchRequest RequestFromList(const EncodableList& list) {
return NullFieldsSearchRequest(list);
}
// Wrapper for access to private NullFieldsSearchRequest map constructor.
NullFieldsSearchReply ReplyFromMap(const EncodableMap& map) {
return NullFieldsSearchReply(map);
// Wrapper for access to private NullFieldsSearchRequest list constructor.
NullFieldsSearchReply ReplyFromList(const EncodableList& list) {
return NullFieldsSearchReply(list);
}
// Wrapper for access to private NullFieldsSearchRequest::ToEncodableMap.
EncodableMap MapFromRequest(const NullFieldsSearchRequest& request) {
return request.ToEncodableMap();
// Wrapper for access to private NullFieldsSearchRequest::ToEncodableList.
EncodableList ListFromRequest(const NullFieldsSearchRequest& request) {
return request.ToEncodableList();
}
// Wrapper for access to private NullFieldsSearchRequest map constructor.
EncodableMap MapFromReply(const NullFieldsSearchReply& reply) {
return reply.ToEncodableMap();
// Wrapper for access to private NullFieldsSearchRequest list constructor.
EncodableList ListFromReply(const NullFieldsSearchReply& reply) {
return reply.ToEncodableList();
}
};
@ -89,45 +90,44 @@ TEST(NullFields, BuildReplyWithNulls) {
EXPECT_EQ(reply.type(), nullptr);
}
TEST_F(NullFieldsTest, RequestFromMapWithValues) {
EncodableMap map{
{EncodableValue("query"), EncodableValue("hello")},
{EncodableValue("identifier"), EncodableValue(1)},
TEST_F(NullFieldsTest, RequestFromListWithValues) {
EncodableList list{
EncodableValue("hello"),
EncodableValue(1),
};
NullFieldsSearchRequest request = RequestFromMap(map);
NullFieldsSearchRequest request = RequestFromList(list);
EXPECT_EQ(*request.query(), "hello");
EXPECT_EQ(request.identifier(), 1);
}
TEST_F(NullFieldsTest, RequestFromMapWithNulls) {
EncodableMap map{
{EncodableValue("query"), EncodableValue()},
{EncodableValue("identifier"), EncodableValue(1)},
TEST_F(NullFieldsTest, RequestFromListWithNulls) {
EncodableList list{
EncodableValue(),
EncodableValue(1),
};
NullFieldsSearchRequest request = RequestFromMap(map);
NullFieldsSearchRequest request = RequestFromList(list);
EXPECT_EQ(request.query(), nullptr);
EXPECT_EQ(request.identifier(), 1);
}
TEST_F(NullFieldsTest, ReplyFromMapWithValues) {
EncodableMap map{
{EncodableValue("result"), EncodableValue("result")},
{EncodableValue("error"), EncodableValue("error")},
{EncodableValue("indices"), EncodableValue(EncodableList{
EncodableValue(1),
EncodableValue(2),
EncodableValue(3),
})},
{EncodableValue("request"),
EncodableValue(EncodableMap{
{EncodableValue("query"), EncodableValue("hello")},
{EncodableValue("identifier"), EncodableValue(1)},
})},
{EncodableValue("type"), EncodableValue(0)},
TEST_F(NullFieldsTest, ReplyFromListWithValues) {
EncodableList list{
EncodableValue("result"),
EncodableValue("error"),
EncodableValue(EncodableList{
EncodableValue(1),
EncodableValue(2),
EncodableValue(3),
}),
EncodableValue(EncodableList{
EncodableValue("hello"),
EncodableValue(1),
}),
EncodableValue(0),
};
NullFieldsSearchReply reply = ReplyFromMap(map);
NullFieldsSearchReply reply = ReplyFromList(list);
EXPECT_EQ(*reply.result(), "result");
EXPECT_EQ(*reply.error(), "error");
@ -137,15 +137,12 @@ TEST_F(NullFieldsTest, ReplyFromMapWithValues) {
EXPECT_EQ(*reply.type(), NullFieldsSearchReplyType::success);
}
TEST_F(NullFieldsTest, ReplyFromMapWithNulls) {
EncodableMap map{
{EncodableValue("result"), EncodableValue()},
{EncodableValue("error"), EncodableValue()},
{EncodableValue("indices"), EncodableValue()},
{EncodableValue("request"), EncodableValue()},
{EncodableValue("type"), EncodableValue()},
TEST_F(NullFieldsTest, ReplyFromListWithNulls) {
EncodableList list{
EncodableValue(), EncodableValue(), EncodableValue(),
EncodableValue(), EncodableValue(),
};
NullFieldsSearchReply reply = ReplyFromMap(map);
NullFieldsSearchReply reply = ReplyFromList(list);
EXPECT_EQ(reply.result(), nullptr);
EXPECT_EQ(reply.error(), nullptr);
@ -154,16 +151,17 @@ TEST_F(NullFieldsTest, ReplyFromMapWithNulls) {
EXPECT_EQ(reply.type(), nullptr);
}
TEST_F(NullFieldsTest, RequestToMapWithValues) {
TEST_F(NullFieldsTest, RequestToListWithValues) {
NullFieldsSearchRequest request;
request.set_query("hello");
request.set_identifier(1);
EncodableMap map = MapFromRequest(request);
EncodableList list = ListFromRequest(request);
EXPECT_EQ(map.size(), 2);
EXPECT_EQ(*ExpectAndGet<std::string>(map, "query"), "hello");
EXPECT_EQ(*ExpectAndGet<int64_t>(map, "identifier"), 1);
EXPECT_EQ(list.size(), 2);
EXPECT_EQ(*ExpectAndGetIndex<std::string>(list, 0), "hello");
EXPECT_EQ(*ExpectAndGetIndex<int64_t>(list, 1), 1);
}
TEST_F(NullFieldsTest, RequestToMapWithNulls) {
@ -171,16 +169,17 @@ TEST_F(NullFieldsTest, RequestToMapWithNulls) {
// TODO(gaaclarke): This needs a way to be enforced.
request.set_identifier(1);
EncodableMap map = MapFromRequest(request);
EncodableList list = ListFromRequest(request);
EXPECT_EQ(map.size(), 2);
EXPECT_TRUE(map[EncodableValue("hello")].IsNull());
EXPECT_EQ(*ExpectAndGet<int64_t>(map, "identifier"), 1);
EXPECT_EQ(list.size(), 2);
EXPECT_TRUE(list[0].IsNull());
EXPECT_EQ(*ExpectAndGetIndex<int64_t>(list, 1), 1);
}
TEST_F(NullFieldsTest, ReplyToMapWithValues) {
NullFieldsSearchRequest request;
request.set_query("hello");
request.set_identifier(1);
NullFieldsSearchReply reply;
reply.set_result("result");
@ -189,32 +188,32 @@ TEST_F(NullFieldsTest, ReplyToMapWithValues) {
reply.set_request(request);
reply.set_type(NullFieldsSearchReplyType::success);
EncodableMap map = MapFromReply(reply);
const EncodableList list = ListFromReply(reply);
EXPECT_EQ(map.size(), 5);
EXPECT_EQ(*ExpectAndGet<std::string>(map, "result"), "result");
EXPECT_EQ(*ExpectAndGet<std::string>(map, "error"), "error");
const EncodableList& indices = *ExpectAndGet<EncodableList>(map, "indices");
EXPECT_EQ(list.size(), 5);
EXPECT_EQ(*ExpectAndGetIndex<std::string>(list, 0), "result");
EXPECT_EQ(*ExpectAndGetIndex<std::string>(list, 1), "error");
const EncodableList& indices = *ExpectAndGetIndex<EncodableList>(list, 2);
EXPECT_EQ(indices.size(), 3);
EXPECT_EQ(indices[0].LongValue(), 1L);
EXPECT_EQ(indices[1].LongValue(), 2L);
EXPECT_EQ(indices[2].LongValue(), 3L);
const EncodableMap& request_map = *ExpectAndGet<EncodableMap>(map, "request");
EXPECT_EQ(*ExpectAndGet<std::string>(request_map, "query"), "hello");
EXPECT_EQ(*ExpectAndGet<int>(map, "type"), 0);
const EncodableList& request_list =
*ExpectAndGetIndex<EncodableList>(list, 3);
EXPECT_EQ(*ExpectAndGetIndex<std::string>(request_list, 0), "hello");
EXPECT_EQ(*ExpectAndGetIndex<int64_t>(request_list, 1), 1);
}
TEST_F(NullFieldsTest, ReplyToMapWithNulls) {
TEST_F(NullFieldsTest, ReplyToListWithNulls) {
NullFieldsSearchReply reply;
EncodableMap map = MapFromReply(reply);
const EncodableList list = ListFromReply(reply);
EXPECT_EQ(map.size(), 5);
EXPECT_TRUE(map[EncodableValue("result")].IsNull());
EXPECT_TRUE(map[EncodableValue("error")].IsNull());
EXPECT_TRUE(map[EncodableValue("indices")].IsNull());
EXPECT_TRUE(map[EncodableValue("request")].IsNull());
EXPECT_TRUE(map[EncodableValue("type")].IsNull());
const int field_count = 5;
EXPECT_EQ(list.size(), field_count);
for (int i = 0; i < field_count; ++i) {
EXPECT_TRUE(list[i].IsNull());
}
}
} // namespace null_fields_pigeontest

View File

@ -42,7 +42,7 @@ class TestNullableReturnHostApi : public NullableReturnHostApi {
};
const EncodableValue& GetResult(const EncodableValue& pigeon_response) {
return std::get<EncodableMap>(pigeon_response).at(EncodableValue("result"));
return std::get<EncodableList>(pigeon_response)[0];
}
} // namespace

View File

@ -50,7 +50,7 @@ class TestHostApi : public PrimitiveHostApi {
};
const EncodableValue& GetResult(const EncodableValue& pigeon_response) {
return std::get<EncodableMap>(pigeon_response).at(EncodableValue("result"));
return std::get<EncodableList>(pigeon_response)[0];
}
} // namespace

View File

@ -2,7 +2,7 @@ name: pigeon
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
repository: https://github.com/flutter/packages/tree/main/packages/pigeon
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3Apigeon
version: 4.2.11 # This must match the version in lib/generator_tools.dart
version: 4.2.12 # This must match the version in lib/generator_tools.dart
environment:
sdk: ">=2.12.0 <3.0.0"

View File

@ -457,14 +457,13 @@ void main() {
// Serialization handles optionals.
expect(
code,
contains('{flutter::EncodableValue("nullableBool"), '
'nullable_bool_ ? flutter::EncodableValue(*nullable_bool_) '
': flutter::EncodableValue()}'));
contains('nullable_bool_ ? flutter::EncodableValue(*nullable_bool_) '
': flutter::EncodableValue()'));
expect(
code,
contains('{flutter::EncodableValue("nullableNested"), '
'nullable_nested_ ? nullable_nested_->ToEncodableMap() '
': flutter::EncodableValue()}'));
contains(
'nullable_nested_ ? flutter::EncodableValue(nullable_nested_->ToEncodableList()) '
': flutter::EncodableValue()'));
}
});
@ -560,14 +559,8 @@ void main() {
expect(code, contains('non_nullable_string_ = value_arg;'));
expect(code, contains('non_nullable_nested_ = value_arg;'));
// Serialization uses the value directly.
expect(
code,
contains('{flutter::EncodableValue("nonNullableBool"), '
'flutter::EncodableValue(non_nullable_bool_)}'));
expect(
code,
contains('{flutter::EncodableValue("nonNullableNested"), '
'non_nullable_nested_.ToEncodableMap()}'));
expect(code, contains('flutter::EncodableValue(non_nullable_bool_)'));
expect(code, contains('non_nullable_nested_.ToEncodableList()'));
}
});

View File

@ -187,13 +187,13 @@ void main() {
expect(
code,
contains(
"pigeonMap['nested'] = nested?.encode()",
'nested?.encode(),',
),
);
expect(
code.replaceAll('\n', ' ').replaceAll(' ', ''),
contains(
"nested: pigeonMap['nested'] != null ? Input.decode(pigeonMap['nested']!) : null",
'nested: result[0] != null ? Input.decode(result[0]! as List<Object?>) : null',
),
);
});
@ -229,13 +229,13 @@ void main() {
expect(
code,
contains(
"pigeonMap['nested'] = nested.encode()",
'nested.encode(),',
),
);
expect(
code.replaceAll('\n', ' ').replaceAll(' ', ''),
contains(
"nested: Input.decode(pigeonMap['nested']!)",
'nested: Input.decode(result[0]! as List<Object?>)',
),
);
});
@ -417,8 +417,8 @@ void main() {
final StringBuffer sink = StringBuffer();
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains("pigeonMap['enum1'] = enum1?.index;"));
expect(code, contains("? Enum.values[pigeonMap['enum1']! as int]"));
expect(code, contains('enum1?.index,'));
expect(code, contains('? Enum.values[result[0]! as int]'));
expect(code, contains('EnumClass doSomething(EnumClass arg0);'));
});
@ -484,8 +484,8 @@ void main() {
final StringBuffer sink = StringBuffer();
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains("pigeonMap['enum1'] = enum1.index;"));
expect(code, contains("enum1: Enum.values[pigeonMap['enum1']! as int]"));
expect(code, contains('enum1.index,'));
expect(code, contains('enum1: Enum.values[result[0]! as int]'));
});
test('host void argument', () {
@ -574,7 +574,7 @@ void main() {
expect(mainCode, isNot(contains('abstract class ApiMock')));
expect(mainCode, isNot(contains('.ApiMock.doSomething')));
expect(mainCode, isNot(contains("'${Keys.result}': output")));
expect(mainCode, isNot(contains('return <Object, Object>{};')));
expect(mainCode, isNot(contains('return <Object>[];')));
generateTestDart(
const DartOptions(),
root,
@ -587,8 +587,8 @@ void main() {
expect(testCode, isNot(contains('class Api {')));
expect(testCode, contains('abstract class ApiMock'));
expect(testCode, isNot(contains('.ApiMock.doSomething')));
expect(testCode, contains("'${Keys.result}': output"));
expect(testCode, contains('return <Object?, Object?>{};'));
expect(testCode, contains('output'));
expect(testCode, contains('return <Object?>[];'));
});
test('gen one async Flutter Api', () {
@ -896,10 +896,8 @@ void main() {
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains('Future<List<int?>> doit('));
expect(
code,
contains(
"return (replyMap['result'] as List<Object?>?)!.cast<int?>();"));
expect(code,
contains('return (replyList[0] as List<Object?>?)!.cast<int?>();'));
});
test('flutter generics argument non void return', () {
@ -960,7 +958,7 @@ void main() {
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains('Future<int?> doit()'));
expect(code, contains("return (replyMap['result'] as int?);"));
expect(code, contains('return (replyList[0] as int?);'));
});
test('return nullable collection host', () {
@ -985,10 +983,8 @@ void main() {
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains('Future<List<int?>?> doit()'));
expect(
code,
contains(
"return (replyMap['result'] as List<Object?>?)?.cast<int?>();"));
expect(code,
contains('return (replyList[0] as List<Object?>?)?.cast<int?>();'));
});
test('return nullable async host', () {
@ -1012,7 +1008,7 @@ void main() {
generateDart(const DartOptions(), root, sink);
final String code = sink.toString();
expect(code, contains('Future<int?> doit()'));
expect(code, contains("return (replyMap['result'] as int?);"));
expect(code, contains('return (replyList[0] as int?);'));
});
test('return nullable flutter', () {

View File

@ -36,7 +36,7 @@ void main() {
expect(
code,
contains(
'@NonNull private static Map<String, Object> wrapError(@NonNull Throwable exception)'));
'@NonNull private static ArrayList<Object> wrapError(@NonNull Throwable exception)'));
});
test('gen one enum', () {
@ -89,7 +89,7 @@ void main() {
generateJava(javaOptions, root, sink);
final String code = sink.toString();
expect(code, contains('package com.google.foobar;'));
expect(code, contains('Map<String, Object> toMap()'));
expect(code, contains('ArrayList<Object> toList()'));
});
test('gen one host api', () {
@ -453,10 +453,11 @@ void main() {
expect(code, contains('public static class Outer'));
expect(code, contains('public static class Nested'));
expect(code, contains('private @Nullable Nested nested;'));
expect(code,
contains('(nested == null) ? null : Nested.fromMap((Map)nested)'));
expect(code,
contains('put("nested", (nested == null) ? null : nested.toMap());'));
expect(
code,
contains(
'(nested == null) ? null : Nested.fromList((ArrayList<Object>)nested)'));
expect(code, contains('add((nested == null) ? null : nested.toList());'));
});
test('gen one async Host Api', () {
@ -591,10 +592,8 @@ void main() {
expect(code, contains('private Enum1(final int index) {'));
expect(code, contains(' this.index = index;'));
expect(
code,
contains(
'toMapResult.put("enum1", enum1 == null ? null : enum1.index);'));
expect(code,
contains('toListResult.add(enum1 == null ? null : enum1.index);'));
expect(
code,
contains(

View File

@ -31,8 +31,8 @@ void main() {
final String code = sink.toString();
expect(code, contains('data class Foobar ('));
expect(code, contains('val field1: Long? = null'));
expect(code, contains('fun fromMap(map: Map<String, Any?>): Foobar'));
expect(code, contains('fun toMap(): Map<String, Any?>'));
expect(code, contains('fun fromList(list: List<Any?>): Foobar'));
expect(code, contains('fun toList(): List<Any?>'));
});
test('gen one enum', () {
@ -129,13 +129,13 @@ void main() {
expect(code, contains('''
if (api != null) {
channel.setMessageHandler { message, reply ->
val wrapped = hashMapOf<String, Any?>()
var wrapped = listOf<Any?>()
try {
val args = message as List<Any?>
val inputArg = args[0] as Input
wrapped["result"] = api.doSomething(inputArg)
wrapped = listOf<Any?>(api.doSomething(inputArg))
} catch (exception: Error) {
wrapped["error"] = wrapError(exception)
wrapped = wrapError(exception)
}
reply.reply(wrapped)
}
@ -367,8 +367,8 @@ void main() {
generateKotlin(kotlinOptions, root, sink);
final String code = sink.toString();
expect(code, contains('fun doSomething(): Output'));
expect(code, contains('wrapped["result"] = api.doSomething()'));
expect(code, contains('wrapped["error"] = wrapError(exception)'));
expect(code, contains('wrapped = listOf<Any?>(api.doSomething())'));
expect(code, contains('wrapped = wrapError(exception)'));
expect(code, contains('reply(wrapped)'));
});
@ -478,13 +478,11 @@ void main() {
expect(code, contains('data class Outer'));
expect(code, contains('data class Nested'));
expect(code, contains('val nested: Nested? = null'));
expect(code, contains('fun fromMap(map: Map<String, Any?>): Outer'));
expect(code, contains('fun fromList(list: List<Any?>): Outer'));
expect(
code,
contains(
'val nested: Nested? = (map["nested"] as? Map<String, Any?>)?.let'));
expect(code, contains('Nested.fromMap(it)'));
expect(code, contains('fun toMap(): Map<String, Any?>'));
code, contains('val nested: Nested? = (list[0] as? List<Any?>)?.let'));
expect(code, contains('Nested.fromList(it)'));
expect(code, contains('fun toList(): List<Any?>'));
});
test('gen one async Host Api', () {
@ -771,7 +769,7 @@ void main() {
generateKotlin(kotlinOptions, root, sink);
final String code = sink.toString();
expect(code, contains('fun doit(): List<Long?>'));
expect(code, contains('wrapped["result"] = api.doit()'));
expect(code, contains('wrapped = listOf<Any?>(api.doit())'));
expect(code, contains('reply.reply(wrapped)'));
});
@ -835,7 +833,7 @@ void main() {
code,
contains(
'val yArg = args[1].let { if (it is Int) it.toLong() else it as Long }'));
expect(code, contains('wrapped["result"] = api.add(xArg, yArg)'));
expect(code, contains('wrapped = listOf<Any?>(api.add(xArg, yArg))'));
expect(code, contains('reply.reply(wrapped)'));
});

View File

@ -110,7 +110,7 @@ void main() {
expect(
code,
contains(
'pigeonResult.enum1 = [GetNullableObject(dict, @"enum1") integerValue];'));
'pigeonResult.enum1 = [GetNullableObjectAtIndex(list, 1) integerValue];'));
});
test('primitive enum host', () {
@ -348,7 +348,7 @@ void main() {
final String code = sink.toString();
expect(code, contains('@implementation Foobar'));
expect(code,
contains('pigeonResult.aBool = GetNullableObject(dict, @"aBool");'));
contains('pigeonResult.aBool = GetNullableObjectAtIndex(list, 0);'));
});
test('nested class header', () {
@ -390,8 +390,9 @@ void main() {
expect(
code,
contains(
'pigeonResult.nested = [Input nullableFromMap:GetNullableObject(dict, @"nested")];'));
expect(code, matches('[self.nested toMap].*@"nested"'));
'pigeonResult.nested = [Input nullableFromList:(GetNullableObjectAtIndex(list, 0))];'));
expect(
code, contains('self.nested ? [self.nested toList] : [NSNull null]'));
});
test('prefix class header', () {
@ -489,7 +490,7 @@ void main() {
final StringBuffer sink = StringBuffer();
generateObjcSource(const ObjcOptions(prefix: 'ABC'), root, sink);
final String code = sink.toString();
expect(code, contains('ABCInput fromMap'));
expect(code, contains('ABCInput fromList'));
expect(code, matches(r'ABCInput.*=.*args.*0.*\;'));
expect(code, contains('void ABCApiSetup('));
});

View File

@ -30,9 +30,8 @@ void main() {
final String code = sink.toString();
expect(code, contains('struct Foobar'));
expect(code, contains('var field1: Int32? = nil'));
expect(code,
contains('static func fromMap(_ map: [String: Any?]) -> Foobar?'));
expect(code, contains('func toMap() -> [String: Any?]'));
expect(code, contains('static func fromList(_ list: [Any?]) -> Foobar?'));
expect(code, contains('func toList() -> [Any?]'));
});
test('gen one enum', () {
@ -436,10 +435,9 @@ void main() {
expect(code, contains('struct Outer'));
expect(code, contains('struct Nested'));
expect(code, contains('var nested: Nested? = nil'));
expect(
code, contains('static func fromMap(_ map: [String: Any?]) -> Outer?'));
expect(code, contains('nested = Nested.fromMap(nestedMap)'));
expect(code, contains('func toMap() -> [String: Any?]'));
expect(code, contains('static func fromList(_ list: [Any?]) -> Outer?'));
expect(code, contains('nested = Nested.fromList(nestedList)'));
expect(code, contains('func toList() -> [Any?]'));
});
test('gen one async Host Api', () {