mirror of
https://github.com/flutter/holobooth.git
synced 2025-07-02 12:36:59 +08:00

* 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
82 lines
2.5 KiB
Dart
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(),
|
|
);
|
|
}
|