mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Updates the Linux templates to use CMake+ninja, rather than Make, and updates the tooling to generate CMake support files rather than Make support files, and to drive the build using cmake and ninja. Also updates doctor to check for cmake and ninja in place of make. Note: While we could use CMake+Make rather than CMake+ninja, in testing ninja handled the tool_backend.sh call much better, calling it only once rather than once per dependent target. While it does add another dependency that people are less likely to already have, it's widely available in package managers, as well as being available as a direct download. Longer term, we could potentially switch from ninja to Make if it's an issue. Fixes #52751
79 lines
2.5 KiB
Cheetah
79 lines
2.5 KiB
Cheetah
#include "include/{{projectName}}_plugin.h"
|
|
|
|
#include <flutter/method_channel.h>
|
|
#include <flutter/plugin_registrar_glfw.h>
|
|
#include <flutter/standard_method_codec.h>
|
|
#include <sys/utsname.h>
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <sstream>
|
|
|
|
namespace {
|
|
|
|
class {{pluginClass}} : public flutter::Plugin {
|
|
public:
|
|
static void RegisterWithRegistrar(flutter::PluginRegistrarGlfw *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::PluginRegistrarGlfw *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) {
|
|
struct utsname uname_data = {};
|
|
uname(&uname_data);
|
|
std::ostringstream version_stream;
|
|
version_stream << "Linux " << uname_data.version;
|
|
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::PluginRegistrarGlfw>(registrar));
|
|
}
|