diff --git a/packages/firebase_auth/firebase_auth/windows/firebase_auth_plugin.cpp b/packages/firebase_auth/firebase_auth/windows/firebase_auth_plugin.cpp index 02c2bca158ea..223b3854920e 100644 --- a/packages/firebase_auth/firebase_auth/windows/firebase_auth_plugin.cpp +++ b/packages/firebase_auth/firebase_auth/windows/firebase_auth_plugin.cpp @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. #include "firebase_auth_plugin.h" +#include // This must be included before many other Windows headers. #include diff --git a/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_firebase_auth.dart b/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_firebase_auth.dart index 5e368b648323..29c2e6317da0 100644 --- a/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_firebase_auth.dart +++ b/packages/firebase_auth/firebase_auth_platform_interface/lib/src/platform_interface/platform_interface_firebase_auth.dart @@ -53,6 +53,8 @@ abstract class FirebaseAuthPlatform extends PlatformInterface { required Map pluginConstants, }) { var currentUser = pluginConstants['APP_CURRENT_USER']; + print('pluginConstants: $pluginConstants'); + print('currentUser: $currentUser'); if (currentUser != null) { currentUser as List; diff --git a/packages/firebase_core/firebase_core/windows/CMakeLists.txt b/packages/firebase_core/firebase_core/windows/CMakeLists.txt index dd965f1aab90..0c05b5dbe274 100644 --- a/packages/firebase_core/firebase_core/windows/CMakeLists.txt +++ b/packages/firebase_core/firebase_core/windows/CMakeLists.txt @@ -61,6 +61,9 @@ list(APPEND PLUGIN_SOURCES "firebase_core_plugin.h" "messages.g.cpp" "messages.g.h" + "flutter_firebase_plugin.h" + "flutter_firebase_plugin_registry.h" + "flutter_firebase_plugin_registry.cpp" ) # Read version from pubspec.yaml diff --git a/packages/firebase_core/firebase_core/windows/firebase_core_plugin_c_api.cpp b/packages/firebase_core/firebase_core/windows/firebase_core_plugin_c_api.cpp index d8215be27a40..b605ef906591 100644 --- a/packages/firebase_core/firebase_core/windows/firebase_core_plugin_c_api.cpp +++ b/packages/firebase_core/firebase_core/windows/firebase_core_plugin_c_api.cpp @@ -10,10 +10,21 @@ #include #include "firebase_core_plugin.h" +#include "flutter_firebase_plugin_registry.h" void FirebaseCorePluginCApiRegisterWithRegistrar( FlutterDesktopPluginRegistrarRef registrar) { firebase_core_windows::FirebaseCorePlugin::RegisterWithRegistrar( flutter::PluginRegistrarManager::GetInstance() - ->GetRegistrar(registrar)); + ->GetRegistrar(registrar)); } + +void RegisterPlugin( + std::string channelName, + void* flutterFirebasePlugin) { + FlutterFirebasePlugin* fireplugin = static_cast(flutterFirebasePlugin); + + firebase_core_windows::FlutterFirebasePluginRegistry::registerPlugin( + channelName, fireplugin); +} + diff --git a/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin.h b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin.h new file mode 100644 index 000000000000..c307dcb20948 --- /dev/null +++ b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin.h @@ -0,0 +1,20 @@ +#pragma once +#ifndef FLUTTER_FIREBASE_PLUGIN_H +#define FLUTTER_FIREBASE_PLUGIN_H + +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/future.h" +#include + +class FlutterFirebasePlugin { + public: + virtual ~FlutterFirebasePlugin() {} + virtual firebase::Future getPluginConstantsForFirebaseApp(firebase::App firebaseApp) = 0; + virtual firebase::Future didReinitializeFirebaseCore() = 0; +}; + +#endif \ No newline at end of file diff --git a/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.cpp b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.cpp new file mode 100644 index 000000000000..7c967fd64cf8 --- /dev/null +++ b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.cpp @@ -0,0 +1,35 @@ +#include "flutter_firebase_plugin_registry.h" + +#include +#include + +#include "firebase/app.h" +#include "firebase/util.h" + +#include "flutter/encodable_value.h" + +namespace firebase_core_windows { + + std::unordered_map + FlutterFirebasePluginRegistry::registeredPlugins; + + void FlutterFirebasePluginRegistry::registerPlugin( + std::string channelName, FlutterFirebasePlugin* flutterFirebasePlugin) { + registeredPlugins[channelName] = flutterFirebasePlugin; + } + + flutter::EncodableMap FlutterFirebasePluginRegistry::getPluginConstantsForFirebaseApp( + firebase::App firebaseApp) { + flutter::EncodableMap pluginConstants; + + for (const auto& entry : registeredPlugins) { + std::string channelName = entry.first; + FlutterFirebasePlugin* plugin = entry.second; + + firebase::Future future = + plugin->getPluginConstantsForFirebaseApp(firebaseApp); + } + + return pluginConstants; + } +} \ No newline at end of file diff --git a/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.h b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.h new file mode 100644 index 000000000000..d4d6925df529 --- /dev/null +++ b/packages/firebase_core/firebase_core/windows/flutter_firebase_plugin_registry.h @@ -0,0 +1,30 @@ +#ifndef FLUTTER_FIREBASE_PLUGIN_REGISTRY_H +#define FLUTTER_FIREBASE_PLUGIN_REGISTRY_H + +#include +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/future.h" +#include "flutter_firebase_plugin.h" + +namespace firebase_core_windows { + + class FlutterFirebasePluginRegistry { + private: + static std::unordered_map + registeredPlugins; + + public: + static void registerPlugin(std::string channelName, + FlutterFirebasePlugin* flutterFirebasePlugin); + static flutter::EncodableMap getPluginConstantsForFirebaseApp( + firebase::App firebaseApp); + static firebase::Future didReinitializeFirebaseCore(); + }; + +} + +#endif // FLUTTER_FIREBASE_PLUGIN_REGISTRY_H diff --git a/packages/firebase_core/firebase_core/windows/include/firebase_core/firebase_core_plugin_c_api.h b/packages/firebase_core/firebase_core/windows/include/firebase_core/firebase_core_plugin_c_api.h index 68f3d1d314d6..62faa5771301 100644 --- a/packages/firebase_core/firebase_core/windows/include/firebase_core/firebase_core_plugin_c_api.h +++ b/packages/firebase_core/firebase_core/windows/include/firebase_core/firebase_core_plugin_c_api.h @@ -21,4 +21,8 @@ FLUTTER_PLUGIN_EXPORT void FirebaseCorePluginCApiRegisterWithRegistrar( FlutterDesktopPluginRegistrarRef registrar); +FLUTTER_PLUGIN_EXPORT void RegisterPlugin( + std::string channelName, + void* flutterFirebasePlugin); + #endif // FLUTTER_PLUGIN_FIREBASE_CORE_PLUGIN_C_API_H_