Flutter and Pigeon tutorial
install
https://pub.dev/packages/pigeon#flutter-calling-into-android-steps
write
import 'package:pigeon/pigeon_lib.dart';
class SearchRequest {
String keyword;
}
class SearchReply {
String result;
}
//@HostApi(dartHostTestHandler: 'TestHostVideoPlayerApi')
@HostApi()
abstract class FileManagerApi {
SearchReply search(SearchRequest request);
}
void configurePigeon(PigeonOptions opts) {
opts.dartOut = 'lib/messages.dart';
opts.objcHeaderOut = 'ios/Runner/messages.h';
opts.objcSourceOut = 'ios/Runner/messages.m';
opts.objcOptions.prefix = 'FLT';
opts.javaOut =
'android/app/src/main/java/io/flutter/plugins/filemanager/Messages.java';
opts.javaOptions.package = 'io.flutter.plugins.filemanager';
}
compile
flutter pub run pigeon --input pigeons/messages.dart
java side
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.filemanager.Messages;
import io.flutter.embedding.engine.FlutterEngine;
public class MainActivity extends FlutterActivity {
private class MyApi implements Messages.FileManagerApi {
@Override
public Messages.SearchReply search(Messages.SearchRequest request) {
Messages.SearchReply reply = new Messages.SearchReply();
reply.setResult(String.format("Hi %s!", request.getKeyword()));
return reply;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
Messages.FileManagerApi.setup(flutterEngine.getDartExecutor().getBinaryMessenger(), new MyApi());
}
}
dart side
void _incrementCounter() async {
setState(() {
_counter++;
});
SearchRequest request = SearchRequest()..keyword = 'yingshaoxo';
FileManagerApi api = FileManagerApi();
SearchReply reply = await api.search(request);
print('reply: ${reply.result}');
}