mirror of
https://github.com/flutter/packages.git
synced 2025-07-03 09:08:54 +08:00
[Pigeon] Added support for lists and maps in java and objc targets. (#186)
This commit is contained in:
@ -1,3 +1,7 @@
|
|||||||
|
## 0.1.3
|
||||||
|
|
||||||
|
* Added support for List and Map datatypes in Java and Objective-C targets.
|
||||||
|
|
||||||
## 0.1.2+1
|
## 0.1.2+1
|
||||||
|
|
||||||
* Updated the Readme.md.
|
* Updated the Readme.md.
|
||||||
|
@ -14,6 +14,8 @@ const Map<String, String> _javaTypeForDartTypeMap = <String, String>{
|
|||||||
'Int32List': 'int[]',
|
'Int32List': 'int[]',
|
||||||
'Int64List': 'long[]',
|
'Int64List': 'long[]',
|
||||||
'Float64List': 'double[]',
|
'Float64List': 'double[]',
|
||||||
|
'List': 'ArrayList',
|
||||||
|
'Map': 'HashMap',
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Options that control how Java code will be generated.
|
/// Options that control how Java code will be generated.
|
||||||
@ -195,6 +197,7 @@ void generateJava(JavaOptions options, Root root, StringSink sink) {
|
|||||||
indent.writeln('import io.flutter.plugin.common.BasicMessageChannel;');
|
indent.writeln('import io.flutter.plugin.common.BasicMessageChannel;');
|
||||||
indent.writeln('import io.flutter.plugin.common.BinaryMessenger;');
|
indent.writeln('import io.flutter.plugin.common.BinaryMessenger;');
|
||||||
indent.writeln('import io.flutter.plugin.common.StandardMessageCodec;');
|
indent.writeln('import io.flutter.plugin.common.StandardMessageCodec;');
|
||||||
|
indent.writeln('import java.util.ArrayList;');
|
||||||
indent.writeln('import java.util.HashMap;');
|
indent.writeln('import java.util.HashMap;');
|
||||||
|
|
||||||
indent.addln('');
|
indent.addln('');
|
||||||
|
@ -41,6 +41,8 @@ const Map<String, String> _objcTypeForDartTypeMap = <String, String>{
|
|||||||
'Int32List': 'FlutterStandardTypedData *',
|
'Int32List': 'FlutterStandardTypedData *',
|
||||||
'Int64List': 'FlutterStandardTypedData *',
|
'Int64List': 'FlutterStandardTypedData *',
|
||||||
'Float64List': 'FlutterStandardTypedData *',
|
'Float64List': 'FlutterStandardTypedData *',
|
||||||
|
'List': 'NSArray *',
|
||||||
|
'Map': 'NSDictionary *',
|
||||||
};
|
};
|
||||||
|
|
||||||
const Map<String, String> _propertyTypeForDartTypeMap = <String, String>{
|
const Map<String, String> _propertyTypeForDartTypeMap = <String, String>{
|
||||||
@ -52,6 +54,8 @@ const Map<String, String> _propertyTypeForDartTypeMap = <String, String>{
|
|||||||
'Int32List': 'strong',
|
'Int32List': 'strong',
|
||||||
'Int64List': 'strong',
|
'Int64List': 'strong',
|
||||||
'Float64List': 'strong',
|
'Float64List': 'strong',
|
||||||
|
'List': 'strong',
|
||||||
|
'Map': 'strong',
|
||||||
};
|
};
|
||||||
|
|
||||||
String _objcTypeForDartType(String type) {
|
String _objcTypeForDartType(String type) {
|
||||||
|
15
packages/pigeon/pigeons/list.dart
Normal file
15
packages/pigeon/pigeons/list.dart
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// Copyright 2020 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 'package:pigeon/pigeon.dart';
|
||||||
|
|
||||||
|
class TestMessage {
|
||||||
|
// ignore: always_specify_types
|
||||||
|
List testList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostApi()
|
||||||
|
abstract class TestApi {
|
||||||
|
void test(TestMessage msg);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
name: pigeon
|
name: pigeon
|
||||||
version: 0.1.2+1
|
version: 0.1.3
|
||||||
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
|
description: Code generator tool to make communication between Flutter and the host platform type-safe and easier.
|
||||||
homepage: https://github.com/flutter/packages/tree/master/packages/pigeon
|
homepage: https://github.com/flutter/packages/tree/master/packages/pigeon
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -55,12 +55,14 @@ test_pigeon_android ./pigeons/host2flutter.dart
|
|||||||
test_pigeon_android ./pigeons/message.dart
|
test_pigeon_android ./pigeons/message.dart
|
||||||
test_pigeon_android ./pigeons/void_arg_host.dart
|
test_pigeon_android ./pigeons/void_arg_host.dart
|
||||||
test_pigeon_android ./pigeons/void_arg_flutter.dart
|
test_pigeon_android ./pigeons/void_arg_flutter.dart
|
||||||
|
test_pigeon_android ./pigeons/list.dart
|
||||||
test_pigeon_ios ./pigeons/message.dart
|
test_pigeon_ios ./pigeons/message.dart
|
||||||
test_pigeon_ios ./pigeons/host2flutter.dart
|
test_pigeon_ios ./pigeons/host2flutter.dart
|
||||||
test_pigeon_ios ./pigeons/voidhost.dart
|
test_pigeon_ios ./pigeons/voidhost.dart
|
||||||
test_pigeon_ios ./pigeons/voidflutter.dart
|
test_pigeon_ios ./pigeons/voidflutter.dart
|
||||||
test_pigeon_ios ./pigeons/void_arg_host.dart
|
test_pigeon_ios ./pigeons/void_arg_host.dart
|
||||||
test_pigeon_ios ./pigeons/void_arg_flutter.dart
|
test_pigeon_ios ./pigeons/void_arg_flutter.dart
|
||||||
|
test_pigeon_ios ./pigeons/list.dart
|
||||||
|
|
||||||
pushd $PWD
|
pushd $PWD
|
||||||
pub run pigeon \
|
pub run pigeon \
|
||||||
|
@ -199,4 +199,34 @@ void main() {
|
|||||||
expect(code, contains('doSomething(Reply<Output>'));
|
expect(code, contains('doSomething(Reply<Output>'));
|
||||||
expect(code, contains('channel.send(null'));
|
expect(code, contains('channel.send(null'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('gen list', () {
|
||||||
|
final Root root = Root(apis: <Api>[], classes: <Class>[
|
||||||
|
Class(
|
||||||
|
name: 'Foobar',
|
||||||
|
fields: <Field>[Field(name: 'field1', dataType: 'List')]),
|
||||||
|
]);
|
||||||
|
final StringBuffer sink = StringBuffer();
|
||||||
|
final JavaOptions javaOptions = JavaOptions();
|
||||||
|
javaOptions.className = 'Messages';
|
||||||
|
generateJava(javaOptions, root, sink);
|
||||||
|
final String code = sink.toString();
|
||||||
|
expect(code, contains('public static class Foobar'));
|
||||||
|
expect(code, contains('private ArrayList field1;'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('gen map', () {
|
||||||
|
final Root root = Root(apis: <Api>[], classes: <Class>[
|
||||||
|
Class(
|
||||||
|
name: 'Foobar',
|
||||||
|
fields: <Field>[Field(name: 'field1', dataType: 'Map')]),
|
||||||
|
]);
|
||||||
|
final StringBuffer sink = StringBuffer();
|
||||||
|
final JavaOptions javaOptions = JavaOptions();
|
||||||
|
javaOptions.className = 'Messages';
|
||||||
|
generateJava(javaOptions, root, sink);
|
||||||
|
final String code = sink.toString();
|
||||||
|
expect(code, contains('public static class Foobar'));
|
||||||
|
expect(code, contains('private HashMap field1;'));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
@ -405,4 +405,30 @@ void main() {
|
|||||||
'(void)doSomething:(void(^)(ABCOutput*, NSError*))completion'));
|
'(void)doSomething:(void(^)(ABCOutput*, NSError*))completion'));
|
||||||
expect(code, contains('channel sendMessage:nil'));
|
expect(code, contains('channel sendMessage:nil'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('gen list', () {
|
||||||
|
final Root root = Root(apis: <Api>[], classes: <Class>[
|
||||||
|
Class(
|
||||||
|
name: 'Foobar',
|
||||||
|
fields: <Field>[Field(name: 'field1', dataType: 'List')]),
|
||||||
|
]);
|
||||||
|
final StringBuffer sink = StringBuffer();
|
||||||
|
generateObjcHeader(ObjcOptions(), root, sink);
|
||||||
|
final String code = sink.toString();
|
||||||
|
expect(code, contains('@interface Foobar'));
|
||||||
|
expect(code, matches('@property.*NSArray.*field1'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('gen map', () {
|
||||||
|
final Root root = Root(apis: <Api>[], classes: <Class>[
|
||||||
|
Class(
|
||||||
|
name: 'Foobar',
|
||||||
|
fields: <Field>[Field(name: 'field1', dataType: 'Map')]),
|
||||||
|
]);
|
||||||
|
final StringBuffer sink = StringBuffer();
|
||||||
|
generateObjcHeader(ObjcOptions(), root, sink);
|
||||||
|
final String code = sink.toString();
|
||||||
|
expect(code, contains('@interface Foobar'));
|
||||||
|
expect(code, matches('@property.*NSDictionary.*field1'));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user