| #include "{{projectName}}_plugin.h" |
| |
| // This must be included before many other Windows headers. |
| #include <windows.h> |
| |
| // For getPlatformVersion; remove unless needed for your plugin implementation. |
| #include <VersionHelpers.h> |
| |
| #include <flutter/method_channel.h> |
| #include <flutter/plugin_registrar_windows.h> |
| #include <flutter/standard_method_codec.h> |
| |
| #include <map> |
| #include <memory> |
| #include <sstream> |
| |
| namespace { |
| |
| class {{pluginClass}} : public flutter::Plugin { |
| public: |
| static void RegisterWithRegistrar(flutter::PluginRegistrarWindows *registrar); |
| |
| {{pluginClass}}(); |
| |
| virtual ~{{pluginClass}}(); |
| |
| private: |
| // Called when a method is called on this plugin's channel from Dart. |
| void HandleMethodCall( |
| const flutter::MethodCall<flutter::EncodableValue> &method_call, |
| std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result); |
| }; |
| |
| // static |
| void {{pluginClass}}::RegisterWithRegistrar( |
| flutter::PluginRegistrarWindows *registrar) { |
| auto channel = |
| std::make_unique<flutter::MethodChannel<flutter::EncodableValue>>( |
| registrar->messenger(), "{{projectName}}", |
| &flutter::StandardMethodCodec::GetInstance()); |
| |
| auto plugin = std::make_unique<{{pluginClass}}>(); |
| |
| channel->SetMethodCallHandler( |
| [plugin_pointer = plugin.get()](const auto &call, auto result) { |
| plugin_pointer->HandleMethodCall(call, std::move(result)); |
| }); |
| |
| registrar->AddPlugin(std::move(plugin)); |
| } |
| |
| {{pluginClass}}::{{pluginClass}}() {} |
| |
| {{pluginClass}}::~{{pluginClass}}() {} |
| |
| void {{pluginClass}}::HandleMethodCall( |
| const flutter::MethodCall<flutter::EncodableValue> &method_call, |
| std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result) { |
| // Replace "getPlatformVersion" check with your plugin's method. |
| // See: |
| // https://github.com/flutter/engine/tree/master/shell/platform/common/cpp/client_wrapper/include/flutter |
| // and |
| // https://github.com/flutter/engine/tree/master/shell/platform/glfw/client_wrapper/include/flutter |
| // for the relevant Flutter APIs. |
| if (method_call.method_name().compare("getPlatformVersion") == 0) { |
| std::ostringstream version_stream; |
| version_stream << "Windows "; |
| if (IsWindows10OrGreater()) { |
| version_stream << "10+"; |
| } else if (IsWindows8OrGreater()) { |
| version_stream << "8"; |
| } else if (IsWindows7OrGreater()) { |
| version_stream << "7"; |
| } |
| flutter::EncodableValue response(version_stream.str()); |
| result->Success(&response); |
| } else { |
| result->NotImplemented(); |
| } |
| } |
| |
| } // namespace |
| |
| void {{pluginClass}}RegisterWithRegistrar( |
| FlutterDesktopPluginRegistrarRef registrar) { |
| {{pluginClass}}::RegisterWithRegistrar( |
| flutter::PluginRegistrarManager::GetInstance() |
| ->GetRegistrar<flutter::PluginRegistrarWindows>(registrar)); |
| } |