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}');
  }

post author

https://github.com/yingshaoxo