diff --git a/packages/pigeon/example/README.md b/packages/pigeon/example/README.md index bd5e4bd116a..7e7fbb6d5af 100644 --- a/packages/pigeon/example/README.md +++ b/packages/pigeon/example/README.md @@ -185,7 +185,7 @@ class PigeonApiImplementation : public ExampleHostApi { } void SendMessage(const MessageData& message, std::function reply)> result) { - if (message.code == Code.kOne) { + if (message.code() == Code::kOne) { result(FlutterError("code", "message", "details")); return; } @@ -281,10 +281,10 @@ private class PigeonFlutterApi { } func callFlutterMethod( - aString aStringArg: String?, completion: @escaping (Result) -> Void + aString aStringArg: String?, completion: @escaping (Result) -> Void ) { flutterAPI.flutterMethod(aString: aStringArg) { - completion(.success($0)) + completion($0) } } } @@ -294,16 +294,15 @@ private class PigeonFlutterApi { ```kotlin -private class PigeonFlutterApi { - +private class PigeonFlutterApi(binding: FlutterPlugin.FlutterPluginBinding) { var flutterApi: MessageFlutterApi? = null - constructor(binding: FlutterPlugin.FlutterPluginBinding) { - flutterApi = MessageFlutterApi(binding.getBinaryMessenger()) + init { + flutterApi = MessageFlutterApi(binding.binaryMessenger) } fun callFlutterMethod(aString: String, callback: (Result) -> Unit) { - flutterApi!!.flutterMethod(aString) { echo -> callback(Result.success(echo)) } + flutterApi!!.flutterMethod(aString) { echo -> callback(echo) } } } ``` @@ -312,12 +311,22 @@ private class PigeonFlutterApi { ```c++ -void TestPlugin::CallFlutterMethod( - String aString, std::function reply)> result) { - MessageFlutterApi->FlutterMethod( - aString, [result](String echo) { result(echo); }, - [result](const FlutterError& error) { result(error); }); -} +class PigeonFlutterApi { + public: + PigeonFlutterApi(flutter::BinaryMessenger* messenger) + : flutterApi_(std::make_unique(messenger)) {} + + void CallFlutterMethod( + const std::string& a_string, + std::function reply)> result) { + flutterApi_->FlutterMethod( + &a_string, [result](const std::string& echo) { result(echo); }, + [result](const FlutterError& error) { result(error); }); + } + + private: + std::unique_ptr flutterApi_; +}; ``` ### GObject diff --git a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt index 6882861350b..af0d181a24a 100644 --- a/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt +++ b/packages/pigeon/example/app/android/app/src/main/kotlin/dev/flutter/pigeon_example_app/MainActivity.kt @@ -8,7 +8,6 @@ import ExampleHostApi import FlutterError import MessageData import MessageFlutterApi -import androidx.annotation.NonNull import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.plugins.FlutterPlugin @@ -37,22 +36,21 @@ private class PigeonApiImplementation : ExampleHostApi { // #enddocregion kotlin-class // #docregion kotlin-class-flutter -private class PigeonFlutterApi { - +private class PigeonFlutterApi(binding: FlutterPlugin.FlutterPluginBinding) { var flutterApi: MessageFlutterApi? = null - constructor(binding: FlutterPlugin.FlutterPluginBinding) { - flutterApi = MessageFlutterApi(binding.getBinaryMessenger()) + init { + flutterApi = MessageFlutterApi(binding.binaryMessenger) } fun callFlutterMethod(aString: String, callback: (Result) -> Unit) { - flutterApi!!.flutterMethod(aString) { echo -> callback(Result.success(echo)) } + flutterApi!!.flutterMethod(aString) { echo -> callback(echo) } } } // #enddocregion kotlin-class-flutter class MainActivity : FlutterActivity() { - override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { + override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) val api = PigeonApiImplementation() diff --git a/packages/pigeon/example/app/ios/Runner/AppDelegate.swift b/packages/pigeon/example/app/ios/Runner/AppDelegate.swift index 51119e23fa3..64a73d05ca2 100644 --- a/packages/pigeon/example/app/ios/Runner/AppDelegate.swift +++ b/packages/pigeon/example/app/ios/Runner/AppDelegate.swift @@ -37,16 +37,16 @@ private class PigeonFlutterApi { } func callFlutterMethod( - aString aStringArg: String?, completion: @escaping (Result) -> Void + aString aStringArg: String?, completion: @escaping (Result) -> Void ) { flutterAPI.flutterMethod(aString: aStringArg) { - completion(.success($0)) + completion($0) } } } // #enddocregion swift-class-flutter -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, diff --git a/packages/pigeon/example/app/macos/Runner/MainFlutterWindow.swift b/packages/pigeon/example/app/macos/Runner/MainFlutterWindow.swift index 5e5096a2d2a..1aa7a4305a3 100644 --- a/packages/pigeon/example/app/macos/Runner/MainFlutterWindow.swift +++ b/packages/pigeon/example/app/macos/Runner/MainFlutterWindow.swift @@ -9,6 +9,21 @@ private class PigeonApiImplementation: ExampleHostApi { func getHostLanguage() throws -> String { return "Swift" } + + func add(_ a: Int64, to b: Int64) throws -> Int64 { + if a < 0 || b < 0 { + throw PigeonError(code: "code", message: "message", details: "details") + } + return a + b + } + + func sendMessage(message: MessageData, completion: @escaping (Result) -> Void) { + if message.code == Code.one { + completion(.failure(PigeonError(code: "code", message: "message", details: "details"))) + return + } + completion(.success(true)) + } } class MainFlutterWindow: NSWindow { diff --git a/packages/pigeon/example/app/windows/runner/flutter_window.cpp b/packages/pigeon/example/app/windows/runner/flutter_window.cpp index b7f7ab03595..5918d55d0ec 100644 --- a/packages/pigeon/example/app/windows/runner/flutter_window.cpp +++ b/packages/pigeon/example/app/windows/runner/flutter_window.cpp @@ -4,6 +4,8 @@ #include "flutter_window.h" +#include + #include #include @@ -11,8 +13,12 @@ #include "messages.g.h" namespace { +using pigeon_example::Code; using pigeon_example::ErrorOr; using pigeon_example::ExampleHostApi; +using pigeon_example::FlutterError; +using pigeon_example::MessageData; +using pigeon_example::MessageFlutterApi; // #docregion cpp-class class PigeonApiImplementation : public ExampleHostApi { @@ -29,7 +35,7 @@ class PigeonApiImplementation : public ExampleHostApi { } void SendMessage(const MessageData& message, std::function reply)> result) { - if (message.code == Code.kOne) { + if (message.code() == Code::kOne) { result(FlutterError("code", "message", "details")); return; } @@ -37,6 +43,26 @@ class PigeonApiImplementation : public ExampleHostApi { } }; // #enddocregion cpp-class + +// #docregion cpp-method-flutter +class PigeonFlutterApi { + public: + PigeonFlutterApi(flutter::BinaryMessenger* messenger) + : flutterApi_(std::make_unique(messenger)) {} + + void CallFlutterMethod( + const std::string& a_string, + std::function reply)> result) { + flutterApi_->FlutterMethod( + &a_string, [result](const std::string& echo) { result(echo); }, + [result](const FlutterError& error) { result(error); }); + } + + private: + std::unique_ptr flutterApi_; +}; +// #enddocregion cpp-method-flutter + } // namespace FlutterWindow::FlutterWindow(const flutter::DartProject& project) @@ -49,15 +75,6 @@ bool FlutterWindow::OnCreate() { return false; } - // #docregion cpp-method-flutter - void TestPlugin::CallFlutterMethod( - String aString, std::function reply)> result) { - MessageFlutterApi->FlutterMethod( - aString, [result](String echo) { result(echo); }, - [result](const FlutterError& error) { result(error); }); - } - // #enddocregion cpp-method-flutter - RECT frame = GetClientArea(); // The size here must match the window dimensions to avoid unnecessary surface diff --git a/packages/pigeon/example/pubspec.yaml b/packages/pigeon/example/pubspec.yaml deleted file mode 100644 index 4356a3636b1..00000000000 --- a/packages/pigeon/example/pubspec.yaml +++ /dev/null @@ -1,11 +0,0 @@ -name: pigeon_example -description: example app to show basic usage of pigeon. -publish_to: none - -environment: - sdk: ^3.3.0 - -dependencies: - -dev_dependencies: - build_runner: ^2.1.10