Вещи должны или не должны помещаться в 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,
);
}