46 lines
1.3 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:logging/logging.dart';
import 'package:starting_template/core/dependency_injection/get_it.dart';
import 'package:starting_template/core/enums/feature_flag.dart';
import 'package:starting_template/core/logger/app_logger.dart';
import 'package:starting_template/core/logger/simple_log_printer.dart';
import 'package:starting_template/core/utils/app_bloc_observer.dart';
import 'package:starting_template/core/utils/env.dart';
Future<void> bootstrap(FutureOr<Widget> Function() builder) async {
// Initialize logging
final logger = AppLogger();
await runZonedGuarded(
() async {
WidgetsFlutterBinding.ensureInitialized();
// Verify that we have the correct environment
Env.verify();
if (Env.isFeatureEnabled(FeatureFlag.logger)) {
logger
..level = Env.loggerLevel
..addPlugin(const SimpleLogPrinter());
} else {
logger.level = Level.OFF;
}
debugPrint(Env.summary); // Print even if logger is disabled
Bloc.observer = AppBlocObserver();
// Intialize dependencies injection
await GetItInitializer.init();
runApp(await builder());
},
(error, stackTrace) {
logger.error(error.toString(), stackTrace);
},
);
}