Files
client-sdk-flutter/linux/flutter/plugin_registrar.cc

61 lines
1.6 KiB
C++

// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "include/flutter/plugin_registrar.h"
#include <iostream>
#include <map>
#include "binary_messenger_impl.h"
#include "include/flutter/engine_method_result.h"
#include "include/flutter/method_channel.h"
#include "texture_registrar_impl.h"
namespace flutter {
// ===== PluginRegistrar =====
PluginRegistrar::PluginRegistrar(FlPluginRegistrar* registrar)
: registrar_(registrar) {
auto core_messenger = fl_plugin_registrar_get_messenger(registrar);
messenger_ = std::make_unique<BinaryMessengerImpl>(core_messenger);
auto texture_registrar = fl_plugin_registrar_get_texture_registrar(registrar);
texture_registrar_ =
std::make_unique<TextureRegistrarImpl>(texture_registrar);
}
PluginRegistrar::~PluginRegistrar() {
// This must always be the first call.
ClearPlugins();
// Explicitly cleared to facilitate testing of destruction order.
messenger_.reset();
}
void PluginRegistrar::AddPlugin(std::unique_ptr<Plugin> plugin) {
plugins_.insert(std::move(plugin));
}
void PluginRegistrar::ClearPlugins() {
plugins_.clear();
}
// ===== PluginRegistrarManager =====
// static
PluginRegistrarManager* PluginRegistrarManager::GetInstance() {
static PluginRegistrarManager* instance = new PluginRegistrarManager();
return instance;
}
PluginRegistrarManager::PluginRegistrarManager() = default;
// static
void PluginRegistrarManager::OnRegistrarDestroyed(
FlPluginRegistrar* registrar) {
GetInstance()->registrars()->erase(registrar);
}
} // namespace flutter