Вещи должны или не должны помещаться в void main во Flutter

У нас есть приложение Flutter, запущенное в обоих магазинах. Приложение, которое у нас есть, имеет ужасное время запуска/запуска и занимает слишком много времени. Люди обычно застревают на черном экране (они не могут получить доступ к заставке, которую мы показываем видео) или ждут несколько секунд, пока не появится заставка.

Прежде чем мы запустим приложение,MyAppилиMainApp, мы создаем множество библиотек, таких какFlutterSecureStorage, Firebase, Hive & Hive's DBs.

Я открыт для любого предложения столкнуться с проблемой, которая у нас есть.

      // one part of the main.dart
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  lockOrientation();

  SystemChrome.setSystemUIOverlayStyle(
    const SystemUiOverlayStyle(
      statusBarBrightness: Brightness.dark,
      systemNavigationBarColor: AppColors.transparent,
    ),
  );

  storage = const FlutterSecureStorage(
    iOptions: IOSOptions(accessibility: KeychainAccessibility.first_unlock),
    aOptions: AndroidOptions(encryptedSharedPreferences: true),
  );

  await Firebase.initializeApp();
  await Future.wait(
    [
      setupInjector(),
      setupLocator(),
      Hive.initFlutter(),
    ],
  );
  
  // Initializing some hive services to pass Riverpod's provider
  await initModels();
  final services = await initDbServices();
  final downloadServices = await initDownloadDbServices();

  await FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(!kDebugMode);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  Isolate.current.addErrorListener(RawReceivePort((pair) async {
    final List<dynamic> errorAndStacktrace = pair;
    await FirebaseCrashlytics.instance.recordError(
      errorAndStacktrace.first,
      errorAndStacktrace.last,
    );
  }).sendPort);

  Platform.isIOS
      ? InAppPurchaseStoreKitPlatform.registerPlatform()
      : !DeviceInfo.isHarmonyOS
          ? InAppPurchaseAndroidPlatform.registerPlatform()
          : null;

  RemoteConfigSettings setting =
      RemoteConfigSettings(minimumFetchInterval: const Duration(hours: 1), fetchTimeout: const Duration(minutes: 1));
  await remoteConfig.setConfigSettings(setting);

  NotificationService.instance.listenPushNotifications?.listen((uri) => deeplinkUri = URI);

  return runZonedGuarded(
    () => ProviderScope(child: runApp(MyApp())),
    FirebaseCrashlytics.instance.recordError,
  );
}

0 ответов

Другие вопросы по тегам