Compare commits

..

3 commits

Author SHA1 Message Date
github-actions[bot]
ddc7ec8c8b Version bump 2023-11-07 11:15:17 +00:00
Vadim
434327a7d0 Disable list tile onTap if IAP is pending 2023-11-07 12:03:38 +01:00
Vadim
068834bfe5
ML-134 Firebase Remote Config issues (#135)
* Unable to connect to the server

* internal remote config fetch error

* fixed tests
2023-11-07 11:57:36 +01:00
5 changed files with 22 additions and 9 deletions

View file

@ -24,7 +24,6 @@ class RemoteConfigService {
await remoteConfig.setDefaults(featuresDefaultValues.map((key, value) => MapEntry(key.name, value))); await remoteConfig.setDefaults(featuresDefaultValues.map((key, value) => MapEntry(key.name, value)));
await remoteConfig.activate(); await remoteConfig.activate();
await remoteConfig.ensureInitialized(); await remoteConfig.ensureInitialized();
unawaited(remoteConfig.fetch());
log('Firebase remote config initialized successfully'); log('Firebase remote config initialized successfully');
} on FirebaseException catch (e) { } on FirebaseException catch (e) {
@ -34,6 +33,12 @@ class RemoteConfigService {
} }
} }
Future<void> fetchConfig() async {
// https://github.com/firebase/flutterfire/issues/6196#issuecomment-927751667
await Future.delayed(const Duration(seconds: 1));
await FirebaseRemoteConfig.instance.fetch();
}
dynamic getValue(Feature feature) => FirebaseRemoteConfig.instance.getValue(feature.name).toValue(feature); dynamic getValue(Feature feature) => FirebaseRemoteConfig.instance.getValue(feature.name).toValue(feature);
Map<Feature, dynamic> getAll() { Map<Feature, dynamic> getAll() {

View file

@ -1,4 +1,5 @@
import 'dart:async'; import 'dart:async';
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lightmeter/data/models/feature.dart'; import 'package:lightmeter/data/models/feature.dart';
@ -25,7 +26,11 @@ class RemoteConfigProviderState extends State<RemoteConfigProvider> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_updatesSubscription = widget.remoteConfigService.onConfigUpdated().listen(_updateFeatures); widget.remoteConfigService.fetchConfig();
_updatesSubscription = widget.remoteConfigService.onConfigUpdated().listen(
_updateFeatures,
onError: (e) => log(e.toString()),
);
} }
@override @override

View file

@ -18,12 +18,14 @@ class BuyProListTile extends StatelessWidget {
return ListTile( return ListTile(
leading: const Icon(Icons.star), leading: const Icon(Icons.star),
title: Text(unlockFeaturesEnabled ? S.of(context).unlockProFeatures : S.of(context).buyLightmeterPro), title: Text(unlockFeaturesEnabled ? S.of(context).unlockProFeatures : S.of(context).buyLightmeterPro),
onTap: () { onTap: !isPending
showBuyProDialog(context); ? () {
ServicesProvider.of(context) showBuyProDialog(context);
.analytics ServicesProvider.of(context)
.logUnlockProFeatures(unlockFeaturesEnabled ? 'Unlock Pro features' : 'Buy Lightmeter Pro'); .analytics
}, .logUnlockProFeatures(unlockFeaturesEnabled ? 'Unlock Pro features' : 'Buy Lightmeter Pro');
}
: null,
trailing: isPending trailing: isPending
? const SizedBox( ? const SizedBox(
height: Dimens.grid24, height: Dimens.grid24,

View file

@ -1,7 +1,7 @@
name: lightmeter name: lightmeter
description: Lightmeter app inspired by Material 3 design system. description: Lightmeter app inspired by Material 3 design system.
publish_to: "none" publish_to: "none"
version: 0.15.2+43 version: 0.15.3+44
environment: environment:
sdk: ">=3.0.0 <4.0.0" sdk: ">=3.0.0 <4.0.0"

View file

@ -18,6 +18,7 @@ void main() {
}); });
setUp(() { setUp(() {
when(() => mockRemoteConfigService.fetchConfig()).thenAnswer((_) async {});
when(() => mockRemoteConfigService.getValue(Feature.unlockProFeaturesText)).thenReturn(false); when(() => mockRemoteConfigService.getValue(Feature.unlockProFeaturesText)).thenReturn(false);
when(() => mockRemoteConfigService.getAll()).thenReturn({Feature.unlockProFeaturesText: false}); when(() => mockRemoteConfigService.getAll()).thenReturn({Feature.unlockProFeaturesText: false});
}); });