/
FLTFirebasePluginRegistry.m
75 lines (61 loc) 路 2.22 KB
/
FLTFirebasePluginRegistry.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "FLTFirebasePluginRegistry.h"
#if __has_include(<FirebaseCore/FIRAppInternal.h>)
#import <FirebaseCore/FIRAppInternal.h>
#define REGISTER_LIB
#elif __has_include(<FirebaseCoreExtension/FIRAppInternal.h>)
#import <FirebaseCoreExtension/FIRAppInternal.h>
#define REGISTER_LIB
#endif
@implementation FLTFirebasePluginRegistry {
NSMutableDictionary<NSString *, id<FLTFirebasePlugin>> *registeredPlugins;
}
- (instancetype)init {
self = [super init];
if (self) {
registeredPlugins = [NSMutableDictionary dictionary];
}
return self;
}
+ (instancetype)sharedInstance {
static dispatch_once_t onceToken;
static FLTFirebasePluginRegistry *instance;
dispatch_once(&onceToken, ^{
instance = [[FLTFirebasePluginRegistry alloc] init];
});
return instance;
}
- (void)registerFirebasePlugin:(id<FLTFirebasePlugin>)firebasePlugin {
// Register the library with the Firebase backend.
#ifdef REGISTER_LIB
[FIRApp registerLibrary:[firebasePlugin firebaseLibraryName]
withVersion:[firebasePlugin firebaseLibraryVersion]];
#endif
// Store the plugin delegate for later usage.
registeredPlugins[[firebasePlugin flutterChannelName]] = firebasePlugin;
}
- (NSDictionary *)pluginConstantsForFIRApp:(FIRApp *)firebaseApp {
NSString *pluginFlutterChannelName;
NSMutableDictionary *pluginConstants = [NSMutableDictionary dictionary];
for (pluginFlutterChannelName in registeredPlugins) {
pluginConstants[pluginFlutterChannelName] =
[registeredPlugins[pluginFlutterChannelName] pluginConstantsForFIRApp:firebaseApp];
}
return pluginConstants;
}
- (void)didReinitializeFirebaseCore:(void (^_Nonnull)(void))completion {
__block int pluginsCompleted = 0;
NSUInteger pluginsCount = [self->registeredPlugins allKeys].count;
void (^allPluginsCompletion)(void) = ^void() {
pluginsCompleted++;
if (pluginsCompleted == pluginsCount) {
completion();
}
};
for (NSString *pluginFlutterChannelName in registeredPlugins) {
[registeredPlugins[pluginFlutterChannelName] didReinitializeFirebaseCore:allPluginsCompletion];
}
}
@end