mirror of
https://github.com/vodemn/m3_lightmeter.git
synced 2024-11-22 07:20:39 +00:00
Fixed remote config initalization
This commit is contained in:
parent
a7e75025dd
commit
e5961118b0
3 changed files with 51 additions and 5 deletions
|
@ -30,7 +30,7 @@ class ApplicationWrapper extends StatelessWidget {
|
|||
future: Future.wait<dynamic>([
|
||||
SharedPreferences.getInstance(),
|
||||
const LightSensorService(LocalPlatform()).hasSensor(),
|
||||
const RemoteConfigService().activeAndFetchFeatures(),
|
||||
if (env.buildType != BuildType.dev) const RemoteConfigService().activeAndFetchFeatures(),
|
||||
]),
|
||||
builder: (_, snapshot) {
|
||||
if (snapshot.data != null) {
|
||||
|
@ -47,7 +47,8 @@ class ApplicationWrapper extends StatelessWidget {
|
|||
userPreferencesService: userPreferencesService,
|
||||
volumeEventsService: const VolumeEventsService(LocalPlatform()),
|
||||
child: RemoteConfigProvider(
|
||||
remoteConfigService: const RemoteConfigService(),
|
||||
remoteConfigService:
|
||||
env.buildType != BuildType.dev ? const RemoteConfigService() : const MockRemoteConfigService(),
|
||||
child: EquipmentProfileProvider(
|
||||
storageService: iapService,
|
||||
child: FilmsProvider(
|
||||
|
|
|
@ -7,9 +7,26 @@ import 'package:firebase_remote_config/firebase_remote_config.dart';
|
|||
import 'package:flutter/foundation.dart';
|
||||
import 'package:lightmeter/data/models/feature.dart';
|
||||
|
||||
class RemoteConfigService {
|
||||
abstract class IRemoteConfigService {
|
||||
const IRemoteConfigService();
|
||||
|
||||
Future<void> activeAndFetchFeatures();
|
||||
|
||||
Future<void> fetchConfig();
|
||||
|
||||
dynamic getValue(Feature feature);
|
||||
|
||||
Map<Feature, dynamic> getAll();
|
||||
|
||||
Stream<Set<Feature>> onConfigUpdated();
|
||||
|
||||
bool isEnabled(Feature feature);
|
||||
}
|
||||
|
||||
class RemoteConfigService implements IRemoteConfigService {
|
||||
const RemoteConfigService();
|
||||
|
||||
@override
|
||||
Future<void> activeAndFetchFeatures() async {
|
||||
final FirebaseRemoteConfig remoteConfig = FirebaseRemoteConfig.instance;
|
||||
const cacheStaleDuration = kDebugMode ? Duration(minutes: 1) : Duration(hours: 12);
|
||||
|
@ -28,19 +45,22 @@ class RemoteConfigService {
|
|||
log('Firebase remote config initialized successfully');
|
||||
} on FirebaseException catch (e) {
|
||||
_logError('Firebase exception during Firebase Remote Config initialization: $e');
|
||||
} on Exception catch (e) {
|
||||
} catch (e) {
|
||||
_logError('Error during Firebase Remote Config initialization: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> fetchConfig() async {
|
||||
// https://github.com/firebase/flutterfire/issues/6196#issuecomment-927751667
|
||||
await Future.delayed(const Duration(seconds: 1));
|
||||
await FirebaseRemoteConfig.instance.fetch();
|
||||
}
|
||||
|
||||
@override
|
||||
dynamic getValue(Feature feature) => FirebaseRemoteConfig.instance.getValue(feature.name).toValue(feature);
|
||||
|
||||
@override
|
||||
Map<Feature, dynamic> getAll() {
|
||||
final Map<Feature, dynamic> result = {};
|
||||
for (final value in FirebaseRemoteConfig.instance.getAll().entries) {
|
||||
|
@ -54,6 +74,7 @@ class RemoteConfigService {
|
|||
return result;
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<Set<Feature>> onConfigUpdated() => FirebaseRemoteConfig.instance.onConfigUpdated.asyncMap(
|
||||
(event) async {
|
||||
await FirebaseRemoteConfig.instance.activate();
|
||||
|
@ -69,6 +90,7 @@ class RemoteConfigService {
|
|||
},
|
||||
);
|
||||
|
||||
@override
|
||||
bool isEnabled(Feature feature) => FirebaseRemoteConfig.instance.getBool(feature.name);
|
||||
|
||||
void _logError(dynamic throwable, {StackTrace? stackTrace}) {
|
||||
|
@ -76,6 +98,29 @@ class RemoteConfigService {
|
|||
}
|
||||
}
|
||||
|
||||
class MockRemoteConfigService implements IRemoteConfigService {
|
||||
const MockRemoteConfigService();
|
||||
|
||||
@override
|
||||
Future<void> activeAndFetchFeatures() async {}
|
||||
|
||||
@override
|
||||
Future<void> fetchConfig() async {}
|
||||
|
||||
@override
|
||||
Map<Feature, dynamic> getAll() => featuresDefaultValues;
|
||||
|
||||
@override
|
||||
dynamic getValue(Feature feature) => featuresDefaultValues[feature];
|
||||
|
||||
@override
|
||||
// ignore: cast_nullable_to_non_nullable
|
||||
bool isEnabled(Feature feature) => featuresDefaultValues[feature] as bool;
|
||||
|
||||
@override
|
||||
Stream<Set<Feature>> onConfigUpdated() => const Stream.empty();
|
||||
}
|
||||
|
||||
extension on RemoteConfigValue {
|
||||
dynamic toValue(Feature feature) {
|
||||
switch (feature) {
|
||||
|
|
|
@ -6,7 +6,7 @@ import 'package:lightmeter/data/models/feature.dart';
|
|||
import 'package:lightmeter/data/remote_config_service.dart';
|
||||
|
||||
class RemoteConfigProvider extends StatefulWidget {
|
||||
final RemoteConfigService remoteConfigService;
|
||||
final IRemoteConfigService remoteConfigService;
|
||||
final Widget child;
|
||||
|
||||
const RemoteConfigProvider({
|
||||
|
|
Loading…
Reference in a new issue