Skip to content

Commit

Permalink
Merge pull request #5 from solutelabs/feature/lint_pub_integration
Browse files Browse the repository at this point in the history
Upgraded all dependencies & added link package for linters.
  • Loading branch information
Milind Mevada authored Mar 30, 2020
2 parents 3076ac3 + 632e77c commit b1e2da9
Show file tree
Hide file tree
Showing 12 changed files with 71 additions and 94 deletions.
29 changes: 2 additions & 27 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1,30 +1,5 @@
include: package:pedantic/analysis_options.yaml
include: package:lint/analysis_options.yaml

analyzer:
exclude:
- lib/**.g.dart

linter:
rules:
- camel_case_types
- empty_constructor_bodies
- cancel_subscriptions
- close_sinks
- unnecessary_await_in_return
- unnecessary_new
- unnecessary_null_aware_assignments
- no_duplicate_case_values
- throw_in_finally
- avoid_print
- control_flow_in_finally
- unnecessary_statements
- always_declare_return_types
- always_put_control_body_on_new_line
- list_remove_unrelated_type
- avoid_renaming_method_parameters
- avoid_void_async
- empty_catches
- prefer_final_in_for_each
- prefer_is_not_empty
- prefer_is_empty
- unawaited_futures
- lib/**.g.dart
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

apply plugin: 'io.fabric'
Expand Down
Empty file.
Empty file.
12 changes: 6 additions & 6 deletions lib/config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ class Production implements Flavor {
}

enum AppMode {
DEBUG,
RELEASE,
PROFILE,
debug,
release,
profile,
}

class Config {
Expand All @@ -36,11 +36,11 @@ class Config {
assert(isDebug = true);

if (isDebug) {
_mode = AppMode.DEBUG;
_mode = AppMode.debug;
} else if (const bool.fromEnvironment("dart.vm.product")) {
_mode = AppMode.RELEASE;
_mode = AppMode.release;
} else {
_mode = AppMode.PROFILE;
_mode = AppMode.profile;
}

return _mode;
Expand Down
6 changes: 3 additions & 3 deletions lib/src/analytics/firebase_analytics_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ class FirebaseAnalyticsLogger implements AnalyticsLogger {
@override
void loginUser({Map<String, dynamic> userData}) {
_client.logLogin();
_client.setUserId(userData['id']);
_client.setUserProperty(name: 'email', value: userData['email']);
_client.setUserId(userData['id'] as String);
_client.setUserProperty(name: 'email', value: userData['email'] as String);
_client.setUserProperty(
name: 'name',
value: userData['name'],
value: userData['name'] as String,
);
}

Expand Down
40 changes: 22 additions & 18 deletions lib/src/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:firebase_performance/firebase_performance.dart';
import 'package:flutter/material.dart';
import 'package:flutter_base_project/src/analytics/analytics.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';
import 'package:flutter_base_project/src/error_logger/error_logger.dart';
import 'package:flutter_base_project/src/remote_config/remote_config_repository.dart';
Expand All @@ -22,23 +22,32 @@ Future<void> initApp() async {
FlutterError.onError = Crashlytics.instance.recordFlutterError;

final shouldEnablePerformanceMonitoring =
Config.appFlavor is Production && Config.appMode == AppMode.RELEASE;
Config.appFlavor is Production && Config.appMode == AppMode.release;
await FirebasePerformance.instance
.setPerformanceCollectionEnabled(shouldEnablePerformanceMonitoring);

try {
await RemoteConfigRepository().initConfig();
await RemoteConfigRepository().syncConfig();
} catch (e) {
debugPrint(e);
debugPrint(e.toString());
}

await runZoned<Future<Null>>(
await runZoned<Future<void>>(
() async {
runApp(EasyLocalization(child: App()));
runApp(
EasyLocalization(
path: 'lib/assets/strings',
supportedLocales: const <Locale>[
Locale('en', 'US'),
],
useOnlyLangCode: false,
child: App(),
),
);
},
onError: (error, stackTrace) async {
if (Config.appMode == AppMode.RELEASE) {
onError: (error, StackTrace stackTrace) async {
if (Config.appMode == AppMode.release) {
await Crashlytics.instance.recordError(error, stackTrace);
await getErrorLogger().logEvent(
exception: error,
Expand All @@ -57,22 +66,17 @@ class App extends StatefulWidget {
class _AppState extends State<App> {
@override
Widget build(BuildContext context) {
final data = EasyLocalizationProvider.of(context).data;
return MaterialApp(
debugShowCheckedModeBanner: false,
//TODO Change App Title
title: 'Flutter Demo',
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
EasylocaLizationDelegate(
locale: data.locale ?? Locale('en', 'US'),
path: 'lib/assets/strings',
),
],
supportedLocales: [
Locale('en', 'US'),
EasyLocalization.of(context).delegate,
],
locale: EasyLocalization.of(context).locale,
supportedLocales: EasyLocalization.of(context).supportedLocales,
navigatorObservers: [
navigationObserverAnalytics(),
],
Expand All @@ -86,15 +90,14 @@ class _AppState extends State<App> {
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
AppLocalizations.of(context).tr('welcome_message'),
'welcome_message'.tr() as String,
),
Text(
RemoteConfigRepository().getString('welcome_msg'),
),
RaisedButton(
child: Text('Action'),
onPressed: () async {
final url = 'https://jsonplaceholder.typicode.com/photos';
const url = 'https://jsonplaceholder.typicode.com/photos';
final client = HttpClientWithInterceptor.build(
interceptors: [
HttpPerformanceInterceptor(),
Expand All @@ -108,6 +111,7 @@ class _AppState extends State<App> {
await dio.get(url);
debugPrint("DIO RESPONSE");
},
child: const Text('Action'),
),
AppUpdateWidget(),
],
Expand Down
32 changes: 15 additions & 17 deletions lib/src/app_update/app_update.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import 'package:flutter_base_project/src/remote_config/remote_config_repository.
import 'package:package_info/package_info.dart';
import 'package:url_launcher/url_launcher.dart';

enum UpdateMode { NoUpdate, FlexibleUpdate, ImmediateUpdate }
enum UpdateMode { noUpdate, flexibleUpdate, immediateUpdate }

class AppUpdateWidget extends StatefulWidget {
@override
Expand All @@ -35,36 +35,34 @@ Future<void> promptAppUpdate(BuildContext context) async {
remoteConfigRepository: RemoteConfigRepository(),
);

if (update == UpdateMode.NoUpdate) {
return null;
if (update == UpdateMode.noUpdate) {
return;
}

if (update == UpdateMode.FlexibleUpdate) {
if (update == UpdateMode.flexibleUpdate) {
Scaffold.of(context).showSnackBar(
SnackBar(
content: Text(AppLocalizations.of(context).tr('flexible_update_msg')),
content: Text('flexible_update_msg'.tr() as String),
action: SnackBarAction(
label: AppLocalizations.of(context).tr('btn_update'),
label: 'btn_update'.tr() as String,
onPressed: () => openStore(),
),
),
);
}

if (update == UpdateMode.ImmediateUpdate) {
if (update == UpdateMode.immediateUpdate) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
title:
Text(AppLocalizations.of(context).tr('title_immediate_update')),
content:
Text(AppLocalizations.of(context).tr('content_immediate_update')),
title: Text('title_immediate_update'.tr() as String),
content: Text('content_immediate_update'.tr() as String),
actions: <Widget>[
FlatButton(
child: Text(AppLocalizations.of(context).tr('btn_update')),
onPressed: () => openStore(),
child: Text('btn_update'.tr() as String),
)
],
);
Expand All @@ -80,25 +78,25 @@ Future<UpdateMode> checkAppUpdate({

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

if (currentVersion >= latestVersion) {
return UpdateMode.NoUpdate;
return UpdateMode.noUpdate;
}

if (currentVersion < latestStableVersion) {
return UpdateMode.ImmediateUpdate;
return UpdateMode.immediateUpdate;
}

return UpdateMode.FlexibleUpdate;
return UpdateMode.flexibleUpdate;
}

Future<String> getCurrentAppVersion() async {
Expand Down
4 changes: 2 additions & 2 deletions lib/src/error_logger/error_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ abstract class ErrorLogger {
});
}

Future<Map<String, dynamic>> tags() async {
Future<Map<String, String>> tags() async {
final info = await PackageInfo.fromPlatform();
return {
"platform": defaultTargetPlatform.toString(),
Expand All @@ -22,7 +22,7 @@ Future<Map<String, dynamic>> tags() async {

Future<Map<String, dynamic>> extras() async {
final deviceInfo = DeviceInfoPlugin();
final extras = {};
final Map<String, dynamic> extras = {};
if (defaultTargetPlatform == TargetPlatform.android) {
final info = await deviceInfo.androidInfo;
extras['device_info'] = {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/error_logger/sentry_error_logger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class SentryErrorLogger implements ErrorLogger {
}

@override
Future<void> logEvent({exception, StackTrace stackTrace}) async {
Future<void> logEvent({dynamic exception, StackTrace stackTrace}) async {
final extraData = await extras();
final tagsData = await tags();
return _client.capture(
Expand Down
2 changes: 1 addition & 1 deletion lib/src/remote_config/remote_config_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class RemoteConfigRepository {

Future<void> syncConfig() async {
try {
await _config.fetch(expiration: Duration(hours: 3));
await _config.fetch(expiration: const Duration(hours: 3));
await _config.activateFetched();
} catch (err) {
if (_config.lastFetchStatus == LastFetchStatus.noFetchYet) {
Expand Down
34 changes: 17 additions & 17 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,39 @@ dependencies:
flutter_localizations:
sdk: flutter

cupertino_icons: ^0.1.2
cupertino_icons: ^0.1.3

easy_localization: ^1.3.1
easy_localization: ^2.0.2

device_info: ^0.4.1+4
device_info: ^0.4.2+1

package_info: ^0.4.0+13
package_info: ^0.4.0+16

sentry: ^3.0.0+1
sentry: ^3.0.1

url_launcher: ^5.4.1
url_launcher: ^5.4.2

#Firebase
firebase_crashlytics: ^0.1.2+4
firebase_analytics: ^5.0.9
firebase_performance: ^0.3.1+5
firebase_remote_config: ^0.3.0+1
firebase_crashlytics: ^0.1.3+3
firebase_analytics: ^5.0.11
firebase_performance: ^0.3.1+8
firebase_remote_config: ^0.3.0+3

performance_interceptor:
git:
url: git@github.com:solutelabs/firebase_performance_interceptor.git
url: https://github.com/solutelabs/firebase_performance_interceptor.git

connectivity: ^0.4.6+1
shared_preferences: ^0.5.6
permission_handler: ^4.0.0
connectivity: ^0.4.8+2
shared_preferences: ^0.5.6+3
permission_handler: ^5.0.0+hotfix.1
cached_network_image: ^2.0.0
path_provider: ^1.5.1
provider: ^4.0.1
path_provider: ^1.6.5
provider: ^4.0.4

dev_dependencies:
flutter_test:
sdk: flutter
pedantic: ^1.4.0
lint: ^1.1.1


flutter:
Expand Down

0 comments on commit b1e2da9

Please sign in to comment.