Base

Base Controller

Introduction

Base Controller is used for initializing all core functionalities needed by vaahextendflutter. We need to initialize base controller in main function.

...

Future<void> init({
  required Widget app,
  FirebaseOptions? firebaseOptions,
}) async {
  // Storage initialization to store some properties locally
  await GetStorage.init();

  // Environment initialization
  EnvironmentConfig.setEnvConfig();
  final EnvironmentConfig config = EnvironmentConfig.getEnvConfig();

  // Initialization of Firebase and Services
  if (firebaseOptions != null) {
    await Firebase.initializeApp(
      options: firebaseOptions,
    );
    DynamicLinks.init();
  }

  // Other Local Initializations (Depends on your app)
  AppTheme.init();
  Api.init();

  // Sentry Initialization (And/ Or) Running main app
  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
        ..enableAutoPerformanceTracing = config.sentryConfig!.enableAutoPerformanceTracing
        ..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,
      );
    }
    // Running main app
    runApp(child);
  } else {
    // Running main app when sentry config is not there
    runApp(app);
  }
}

Copyright © 2024