Skip to content

Commit

Permalink
Merge pull request #13 from solutelabs/feature/upgrade_fv2.2
Browse files Browse the repository at this point in the history
Feature/upgrade fv2.2.0
  • Loading branch information
kalyanig-solutelabs authored Jun 25, 2021
2 parents 7a69b10 + d884436 commit 00519c5
Show file tree
Hide file tree
Showing 11 changed files with 164 additions and 183 deletions.
1 change: 1 addition & 0 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ android {
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}

buildTypes {
Expand Down
3 changes: 2 additions & 1 deletion lib/config.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
abstract class Flavor {

String get name;
}

Expand Down Expand Up @@ -26,7 +27,7 @@ enum AppMode {
class Config {
Config._();

static Flavor appFlavor;
static Flavor? appFlavor;
static AppMode appMode = _getCurrentMode();

static AppMode _getCurrentMode() {
Expand Down
6 changes: 3 additions & 3 deletions lib/src/analytics/analytics.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_base_project/src/analytics/firebase_analytics_logger.dart';

abstract class AnalyticsLogger {
void loginUser({Map<String, dynamic> userData});
void loginUser({Map<String, dynamic>? userData});

void logoutUser();

void logEvent(String eventName, Map<String, dynamic> params);
void logEvent(String? eventName, Map<String, dynamic>? params);

void setCurrentScreen(String screenName);
void setCurrentScreen(String? screenName);
}

AnalyticsLogger getAnalysisLogger() {
Expand Down
32 changes: 16 additions & 16 deletions lib/src/analytics/firebase_analytics_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter_base_project/src/analytics/analytics.dart';

class FirebaseAnalyticsLogger implements AnalyticsLogger {
FirebaseAnalytics _client;
FirebaseAnalytics? _client;

static final _instance = FirebaseAnalyticsLogger._();

Expand All @@ -15,34 +15,34 @@ class FirebaseAnalyticsLogger implements AnalyticsLogger {
}

@override
void logEvent(String eventName, Map<String, dynamic> params) {
_client.logEvent(
name: eventName,
parameters: params,
void logEvent(String? eventName, Map<String, dynamic>? params) {
_client!.logEvent(
name: eventName!,
parameters: params!,
);
}

@override
void loginUser({Map<String, dynamic> userData}) {
_client.logLogin();
_client.setUserId(userData['id'] as String);
_client.setUserProperty(name: 'email', value: userData['email'] as String);
_client.setUserProperty(
void loginUser({Map<String, dynamic>? userData}) {
_client!.logLogin();
_client!.setUserId(userData!['id'] as String);
_client!.setUserProperty(name: 'email', value: userData['email'] as String);
_client!.setUserProperty(
name: 'name',
value: userData['name'] as String,
);
}

@override
void logoutUser() {
_client.logEvent(name: "SignOut");
_client.setUserId(null);
_client.setUserProperty(name: 'email', value: null);
_client.setUserProperty(name: 'name', value: null);
_client!.logEvent(name: "SignOut");
_client!.setUserId(null);
_client!.setUserProperty(name: 'email', value: null);
_client!.setUserProperty(name: 'name', value: null);
}

@override
void setCurrentScreen(String screenName) {
_client.setCurrentScreen(screenName: screenName);
void setCurrentScreen(String? screenName) {
_client!.setCurrentScreen(screenName: screenName);
}
}
13 changes: 8 additions & 5 deletions lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:firebase_performance/firebase_performance.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_base_project/config.dart';
import 'package:flutter_base_project/src/analytics/analytics.dart';
import 'package:flutter_base_project/src/app_update/app_update.dart';
Expand All @@ -19,6 +20,8 @@ import 'package:performance_interceptor/performance_interceptor.dart';

Future<void> initApp() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized();
await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);

await Firebase.initializeApp();

Expand Down Expand Up @@ -81,10 +84,10 @@ class _AppState extends State<App> {
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
EasyLocalization.of(context).delegate,
EasyLocalization.of(context)!.delegate,
],
locale: EasyLocalization.of(context).locale,
supportedLocales: EasyLocalization.of(context).supportedLocales,
locale: EasyLocalization.of(context)!.locale,
supportedLocales: EasyLocalization.of(context)!.supportedLocales,
navigatorObservers: [
navigationObserverAnalytics(),
],
Expand All @@ -106,12 +109,12 @@ class _AppState extends State<App> {
ElevatedButton(
onPressed: () async {
const url = 'https://jsonplaceholder.typicode.com/photos';
final client = HttpClientWithInterceptor.build(
final client = InterceptedClient.build(
interceptors: [
HttpPerformanceInterceptor(),
],
);
await client.get(url);
await client.get(Uri.parse(url));
debugPrint("HTTP RESPONSE");

final dio = Dio();
Expand Down
27 changes: 14 additions & 13 deletions lib/src/app_update/app_update.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class _AppUpdateWidgetState extends State<AppUpdateWidget> {
}
}

Future<void> promptAppUpdate(BuildContext context) async {
Future<void> promptAppUpdate(BuildContext? context) async {
final update = await checkAppUpdate(
remoteConfigRepository: RemoteConfigRepository(),
);
Expand All @@ -40,7 +40,7 @@ Future<void> promptAppUpdate(BuildContext context) async {
}

if (update == UpdateMode.flexibleUpdate) {
ScaffoldMessenger.of(context).showSnackBar(
ScaffoldMessenger.of(context!).showSnackBar(
SnackBar(
content: Text('flexible_update_msg'.tr()),
action: SnackBarAction(
Expand All @@ -53,7 +53,7 @@ Future<void> promptAppUpdate(BuildContext context) async {

if (update == UpdateMode.immediateUpdate) {
return showDialog(
context: context,
context: context!,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
Expand All @@ -72,19 +72,20 @@ Future<void> promptAppUpdate(BuildContext context) async {
}

Future<UpdateMode> checkAppUpdate({
@required RemoteConfigRepository remoteConfigRepository,
@required RemoteConfigRepository? remoteConfigRepository,
}) async {
final keyProvider = platformKeyProvider();

final currentVersion = int.parse(await getCurrentAppVersion());
final latestStableVersion = int.parse(
remoteConfigRepository.getString(
keyProvider.keyLatestStableVersion,
String? currentAppVersion = await getCurrentAppVersion();
final currentVersion = int?.parse(currentAppVersion!);
final latestStableVersion = int?.parse(
remoteConfigRepository!.getString(
(keyProvider!.keyLatestStableVersion)!,
),
);
final latestVersion = int.parse(
final latestVersion = int?.parse(
remoteConfigRepository.getString(
keyProvider.keyLatestVersion,
(keyProvider.keyLatestVersion)!,
),
);

Expand All @@ -99,19 +100,19 @@ Future<UpdateMode> checkAppUpdate({
return UpdateMode.flexibleUpdate;
}

Future<String> getCurrentAppVersion() async {
Future<String?> getCurrentAppVersion() async {
final packageInfo = await PackageInfo.fromPlatform();
return packageInfo.buildNumber;
}

Future<void> openStore() async {
String url;
String? url;
if (Platform.isAndroid) {
url = androidPlayStoreUrl;
} else if (Platform.isIOS) {
url = iosAppStoreUrl;
}
if (await canLaunch(url)) {
if (await canLaunch(url!)) {
await launch(url);
}
}
14 changes: 7 additions & 7 deletions lib/src/app_update/app_update_key_provider.dart
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import 'dart:io' show Platform;

abstract class AppUpdateKeyProvider {
String keyLatestStableVersion;
String keyLatestVersion;
String? keyLatestStableVersion;
String? keyLatestVersion;
}

class AndroidAppUpdateKey implements AppUpdateKeyProvider {
@override
String keyLatestStableVersion = 'android_latest_stable_version';
String? keyLatestStableVersion = 'android_latest_stable_version';

@override
String keyLatestVersion = 'android_latest_version';
String? keyLatestVersion = 'android_latest_version';
}

class IOSAppUpdateKey implements AppUpdateKeyProvider {
@override
String keyLatestStableVersion = 'iOS_latest_stable_version';
String? keyLatestStableVersion = 'iOS_latest_stable_version';

@override
String keyLatestVersion = 'iOS_latest_version';
String? keyLatestVersion = 'iOS_latest_version';
}

AppUpdateKeyProvider platformKeyProvider() {
AppUpdateKeyProvider? platformKeyProvider() {
if (Platform.isAndroid) {
return AndroidAppUpdateKey();
} else if (Platform.isIOS) {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/error_logger/crashlytics_error_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter_base_project/src/error_logger/error_logger.dart';

class CrashlyticsErrorLogger implements ErrorLogger {
@override
Future<void> logEvent({dynamic exception, StackTrace stackTrace}) async {
Future<void> logEvent({dynamic exception, StackTrace? stackTrace}) async {
FirebaseCrashlytics.instance.recordError(exception, stackTrace);
}
}
23 changes: 13 additions & 10 deletions lib/src/remote_config/remote_config_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,28 @@ import 'package:flutter/services.dart';

class RemoteConfigRepository {
static final _instance = RemoteConfigRepository._();
RemoteConfig _config;
RemoteConfig? _config;

factory RemoteConfigRepository() => _instance;

RemoteConfigRepository._();

Future<void> initConfig() async {
if (_config == null) {
return RemoteConfig.instance
.then((remoteConfig) => _config = remoteConfig);
_config = await RemoteConfig.instance;
}
}

Future<void> syncConfig() async {
try {
await _config.fetch(expiration: const Duration(hours: 3));
await _config.activateFetched();
await _config!.setConfigSettings(RemoteConfigSettings(
fetchTimeout: const Duration(seconds: 3),
minimumFetchInterval: Duration.zero,
));

await _config!.fetchAndActivate();
} catch (err) {
if (_config.lastFetchStatus == LastFetchStatus.noFetchYet) {
if (_config!.lastFetchStatus == RemoteConfigFetchStatus.noFetchYet) {
throw PlatformException(
code: 'REMOTE_CONFIG_ERROR',
details: 'RemoteConfig could not be synced!',
Expand All @@ -31,18 +34,18 @@ class RemoteConfigRepository {
}

String getString(String key) {
return _config.getString(key);
return _config!.getString(key);
}

int getInt(String key) {
return _config.getInt(key);
return _config!.getInt(key);
}

bool getBool(String key) {
return _config.getBool(key);
return _config!.getBool(key);
}

double getDouble(String key) {
return _config.getDouble(key);
return _config!.getDouble(key);
}
}
Loading

0 comments on commit 00519c5

Please sign in to comment.