Files
holobooth/lib/bootstrap.dart
Oscar 0323a267b8 feat: analytics (#376)
* feat: animoji button

* feat: completed analytics

* chore: wip

* chore: wip

* chore: wip

* feat: move to bloc observer

* chore: inject

* chore: wip

* test: firebase_analytics_client

* chore: remove

* chore: docs

* test: coverage

* chore: cleanup

* test: coverage

* test: coverage

* chore: fix
2023-01-20 17:04:18 +01:00

82 lines
2.5 KiB
Dart

// ignore_for_file: avoid_print
import 'dart:async';
import 'package:analytics_repository/analytics_repository.dart';
import 'package:authentication_repository/authentication_repository.dart';
import 'package:avatar_detector_repository/avatar_detector_repository.dart';
import 'package:bloc/bloc.dart';
import 'package:convert_repository/convert_repository.dart';
import 'package:download_repository/download_repository.dart';
import 'package:firebase_analytics_client/firebase_analytics_client.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:holobooth/app/app.dart';
import 'package:holobooth/app/app_bloc_observer.dart';
import 'package:holobooth/landing/loading_indicator_io.dart'
if (dart.library.html) 'package:holobooth/landing/loading_indicator_web.dart';
import 'package:holobooth_ui/holobooth_ui.dart';
Future<void> bootstrap({
required String convertUrl,
required FirebaseOptions firebaseOptions,
required String shareUrl,
required String assetBucketUrl,
}) async {
WidgetsFlutterBinding.ensureInitialized();
FlutterError.onError = (details) {
print(details.exceptionAsString());
print(details.stack);
};
await Firebase.initializeApp(
options: firebaseOptions,
);
final authenticationRepository = AuthenticationRepository(
firebaseAuth: FirebaseAuth.instance,
);
await authenticationRepository.signInAnonymously();
final avatarDetectorRepository = AvatarDetectorRepository();
final convertRepository = ConvertRepository(
url: convertUrl,
shareUrl: shareUrl,
assetBucketUrl: assetBucketUrl,
);
final downloadRepository = DownloadRepository();
final analyticsRepository = AnalyticsRepository(FirebaseAnalyticsClient());
Bloc.observer = AppBlocObserver(analyticsRepository: analyticsRepository);
unawaited(
Future.wait([
Flame.images.load('holobooth_avatar.png'),
]),
);
runZonedGuarded(
() => runApp(
App(
authenticationRepository: authenticationRepository,
avatarDetectorRepository: avatarDetectorRepository,
convertRepository: convertRepository,
downloadRepository: downloadRepository,
analyticsRepository: analyticsRepository,
),
),
(error, stackTrace) {
print(error);
print(stackTrace);
},
);
SchedulerBinding.instance.addPostFrameCallback(
(_) => removeLoadingIndicator(),
);
}