Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,35 @@ PODS:
- fluttertoast (0.0.2):
- Flutter
- Toast
- package_info_plus (0.4.5):
- Flutter
- path_provider_ios (0.0.1):
- Flutter
- SDWebImage (5.14.2):
- SDWebImage/Core (= 5.14.2)
- SDWebImage/Core (5.14.2)
- Sentry/HybridSDK (7.31.5)
- sentry_flutter (0.0.1):
- Flutter
- FlutterMacOS
- Sentry/HybridSDK (= 7.31.5)
- SwiftyGif (5.4.3)
- Toast (4.0.0)

DEPENDENCIES:
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- sentry_flutter (from `.symlinks/plugins/sentry_flutter/ios`)

SPEC REPOS:
trunk:
- DKImagePickerController
- DKPhotoGallery
- SDWebImage
- Sentry
- SwiftyGif
- Toast

Expand All @@ -66,8 +76,12 @@ EXTERNAL SOURCES:
:path: Flutter
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
sentry_flutter:
:path: ".symlinks/plugins/sentry_flutter/ios"

SPEC CHECKSUMS:
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
Expand All @@ -77,6 +91,8 @@ SPEC CHECKSUMS:
fluttertoast: eb263d302cc92e04176c053d2385237e9f43fad0
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84
Sentry: 4c9babff9034785067c896fd580b1f7de44da020
sentry_flutter: b10ae7a5ddcbc7f04648eeb2672b5747230172f1
SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196

Expand Down
4 changes: 4 additions & 0 deletions lib/app_config.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

import './routes/middleware.dart';
import './vaahextendflutter/app_theme.dart';
Expand All @@ -19,6 +20,9 @@ class AppConfig extends StatelessWidget {
theme: ThemeData(
primarySwatch: AppTheme.colors['primary'],
),
navigatorObservers: [
SentryNavigatorObserver(),
],
onGenerateRoute: routeMiddleware,
builder: (BuildContext context, Widget? child) {
return DebugWidget(
Expand Down
5 changes: 2 additions & 3 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ import 'package:get/get.dart';
import './app_config.dart';
import './vaahextendflutter/base/base_controller.dart';

void main() async {
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
BaseController baseController = Get.put(BaseController());
await baseController.init();
runApp(const AppConfig());
await baseController.init(const AppConfig()); // Pass main app as argument in init method
}
37 changes: 36 additions & 1 deletion lib/vaahextendflutter/base/base_controller.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,52 @@
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

import '../../controllers/root_assets_controller.dart';
import '../app_theme.dart';
import '../env.dart';
import '../services/api.dart';

class BaseController extends GetxController {
Future<void> init() async {
Future<void> init(Widget app) async {
await GetStorage.init();
EnvironmentConfig.setEnvConfig();
AppTheme.init();
Api.init();
Get.put(RootAssetsController());

final EnvironmentConfig config = EnvironmentConfig.getEnvConfig();

if (null != config.sentryConfig && config.sentryConfig!.dsn.isNotEmpty) {
await SentryFlutter.init(
(options) => options
..dsn = config.sentryConfig!.dsn
..autoAppStart = config.sentryConfig!.autoAppStart
..tracesSampleRate = config.sentryConfig!.tracesSampleRate
..enableAutoPerformanceTracking = config.sentryConfig!.enableAutoPerformanceTracking
..enableUserInteractionTracing = config.sentryConfig!.enableUserInteractionTracing
..environment = config.envType,
);
Widget child = app;
if (config.sentryConfig!.enableUserInteractionTracing) {
child = SentryUserInteractionWidget(
child: child,
);
}
if (config.sentryConfig!.enableAssetsInstrumentation) {
child = DefaultAssetBundle(
bundle: SentryAssetBundle(
enableStructuredDataTracing: true,
),
child: child,
);
}
runApp(child);
} else {
runApp(app);
}
}
}
98 changes: 73 additions & 25 deletions lib/vaahextendflutter/env.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,49 +4,49 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';

import './app_theme.dart';
import './helpers/console.dart';
import './services/logging_library/logging_library.dart';

// After changing any const you will need to restart the app (Hot-reload won't work).

// Version and build
const String version = '1.0.0'; // version format 1.0.0 (major.minor.patch)
const String build = '2022100901'; // build no format 'YYYYMMDDNUMBER'
const String build = '2022030201'; // build no format 'YYYYMMDDNUMBER'

final EnvironmentConfig defaultConfig = EnvironmentConfig(
appTitle: 'WebReinvent Team',
appTitleShort: 'Team',
appTitle: 'VaahFlutter',
appTitleShort: 'VaahFlutter',
envType: 'default',
version: version,
build: build,
backendUrl: '',
apiUrl: '',
timeoutLimit: 60 * 1000, // 60 seconds
timeoutLimit: 20 * 1000, // 20 seconds
firebaseId: '',
enableConsoleLogs: true,
enableLocalLogs: true,
enableApiLogs: true,
enableCloudLogs: true,
enableApiLogInterceptor: true,
showDebugPanel: true,
debugPanelColor: AppTheme.colors['black']!.withOpacity(0.7),
);

// To add new configuration add new key, value pair in envConfigs
Map<String, EnvironmentConfig> envConfigs = {
Map<String, EnvironmentConfig> _envConfigs = {
// Do not remove default config
'default': defaultConfig.copyWith(
envType: 'default',
),
'develop': defaultConfig.copyWith(
envType: 'develop',
enableLocalLogs: false,
enableCloudLogs: false,
),
'stage': defaultConfig.copyWith(
envType: 'stage',
enableLocalLogs: false,
enableCloudLogs: true,
),
'production': defaultConfig.copyWith(
envType: 'production',
enableConsoleLogs: false,
enableLocalLogs: false,
enableApiLogInterceptor: false,
showDebugPanel: false,
),
};
Expand All @@ -59,16 +59,16 @@ class EnvController extends GetxController {
try {
_config = getSpecificConfig(environment);
update();
} catch (e) {
Console.danger(e.toString());
} catch (error, stackTrace) {
Log.exception(error, stackTrace: stackTrace);
exit(0);
}
}

EnvironmentConfig getSpecificConfig(String key) {
bool configExists = envConfigs.containsKey(key);
bool configExists = _envConfigs.containsKey(key);
if (configExists) {
return envConfigs[key]!;
return _envConfigs[key]!;
}
throw Exception('Environment configuration not found for key: $key');
}
Expand All @@ -84,9 +84,10 @@ class EnvironmentConfig {
final String apiUrl;
final String firebaseId;
final int timeoutLimit;
final bool enableConsoleLogs;
final bool enableLocalLogs;
final bool enableApiLogs;
final bool enableCloudLogs;
final SentryConfig? sentryConfig;
final bool enableApiLogInterceptor;
final bool showDebugPanel;
final Color debugPanelColor;

Expand All @@ -100,9 +101,10 @@ class EnvironmentConfig {
required this.apiUrl,
required this.firebaseId,
required this.timeoutLimit,
required this.enableConsoleLogs,
required this.enableLocalLogs,
required this.enableApiLogs,
required this.enableCloudLogs,
this.sentryConfig,
required this.enableApiLogInterceptor,
required this.showDebugPanel,
required this.debugPanelColor,
});
Expand All @@ -119,8 +121,14 @@ class EnvironmentConfig {
static void setEnvConfig() {
String environment = const String.fromEnvironment('environment', defaultValue: 'default');
final EnvController envController = Get.put(EnvController(environment));
Console.info('Env Type: ${envController.config.envType}');
Console.info('Version: ${envController.config.version}+${envController.config.build}');
Log.info(
'Env Type: ${envController.config.envType}',
disableCloudLogging: true,
);
Log.info(
'Version: ${envController.config.version}+${envController.config.build}',
disableCloudLogging: true,
);
}

EnvironmentConfig copyWith({
Expand All @@ -133,9 +141,10 @@ class EnvironmentConfig {
String? apiUrl,
String? firebaseId,
int? timeoutLimit,
bool? enableConsoleLogs,
bool? enableLocalLogs,
bool? enableApiLogs,
bool? enableCloudLogs,
SentryConfig? sentryConfig,
bool? enableApiLogInterceptor,
bool? showDebugPanel,
Color? debugPanelColor,
}) {
Expand All @@ -149,11 +158,50 @@ class EnvironmentConfig {
apiUrl: apiUrl ?? this.apiUrl,
firebaseId: firebaseId ?? this.firebaseId,
timeoutLimit: timeoutLimit ?? this.timeoutLimit,
enableConsoleLogs: enableConsoleLogs ?? this.enableConsoleLogs,
enableLocalLogs: enableLocalLogs ?? this.enableLocalLogs,
enableApiLogs: enableApiLogs ?? this.enableApiLogs,
enableCloudLogs: enableCloudLogs ?? this.enableCloudLogs,
sentryConfig: sentryConfig ?? this.sentryConfig,
enableApiLogInterceptor: enableApiLogInterceptor ?? this.enableApiLogInterceptor,
showDebugPanel: showDebugPanel ?? this.showDebugPanel,
debugPanelColor: debugPanelColor ?? this.debugPanelColor,
);
}
}

class SentryConfig {
final String dsn;
final bool autoAppStart; // To record cold and warm start up time
final double tracesSampleRate;
final bool enableAutoPerformanceTracking;
final bool enableUserInteractionTracing;
final bool enableAssetsInstrumentation;

const SentryConfig({
required this.dsn,
this.autoAppStart = true,
this.tracesSampleRate = 0.6,
this.enableAutoPerformanceTracking = true,
this.enableUserInteractionTracing = true,
this.enableAssetsInstrumentation = true,
});

SentryConfig copyWith({
String? dsn,
bool? autoAppStart,
double? tracesSampleRate,
bool? enableAutoPerformanceTracking,
bool? enableUserInteractionTracing,
bool? enableAssetsInstrumentation,
}) {
return SentryConfig(
dsn: dsn ?? this.dsn,
autoAppStart: autoAppStart ?? this.autoAppStart,
tracesSampleRate: tracesSampleRate ?? this.tracesSampleRate,
enableAutoPerformanceTracking:
enableAutoPerformanceTracking ?? this.enableAutoPerformanceTracking,
enableUserInteractionTracing:
enableUserInteractionTracing ?? this.enableUserInteractionTracing,
enableAssetsInstrumentation: enableAssetsInstrumentation ?? this.enableAssetsInstrumentation,
);
}
}
Loading