Add silent start for desktop

This commit is contained in:
problematicconsumer
2023-07-15 18:00:44 +03:30
parent 292ed96d2a
commit a1209f5453
13 changed files with 188 additions and 67 deletions

View File

@@ -3,8 +3,10 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_native_splash/flutter_native_splash.dart';
import 'package:hiddify/core/app/app.dart';
import 'package:hiddify/core/prefs/prefs.dart';
import 'package:hiddify/data/data_providers.dart';
import 'package:hiddify/features/common/active_profile/active_profile_notifier.dart';
import 'package:hiddify/features/common/window/window_controller.dart';
import 'package:hiddify/features/system_tray/system_tray.dart';
import 'package:hiddify/services/deep_link_service.dart';
import 'package:hiddify/services/service_providers.dart';
@@ -13,13 +15,13 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:loggy/loggy.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:stack_trace/stack_trace.dart' as stack_trace;
import 'package:window_manager/window_manager.dart';
final _loggy = Loggy('bootstrap');
final _stopWatch = Stopwatch();
Future<void> lazyBootstrap(WidgetsBinding widgetsBinding) async {
_stopWatch.start();
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
// temporary solution: https://github.com/rrousselGit/riverpod/issues/1874
FlutterError.demangleStackTrace = (StackTrace stack) {
@@ -28,6 +30,9 @@ Future<void> lazyBootstrap(WidgetsBinding widgetsBinding) async {
return stack;
};
FlutterNativeSplash.preserve(widgetsBinding: widgetsBinding);
await windowManager.ensureInitialized();
final sharedPreferences = await SharedPreferences.getInstance();
final container = ProviderContainer(
overrides: [sharedPreferencesProvider.overrideWithValue(sharedPreferences)],
@@ -35,6 +40,15 @@ Future<void> lazyBootstrap(WidgetsBinding widgetsBinding) async {
Loggy.initLoggy(logPrinter: const PrettyPrinter());
final silentStart =
container.read(prefsControllerProvider).general.silentStart;
if (silentStart) {
FlutterNativeSplash.remove();
}
if (PlatformUtils.isDesktop) {
await container.read(windowControllerProvider.future);
}
await initAppServices(container.read);
await initControllers(container.read);
@@ -45,7 +59,7 @@ Future<void> lazyBootstrap(WidgetsBinding widgetsBinding) async {
),
);
FlutterNativeSplash.remove();
if (!silentStart) FlutterNativeSplash.remove();
_stopWatch.stop();
_loggy.debug("bootstrapping took [${_stopWatch.elapsedMilliseconds}]ms");
}
@@ -60,7 +74,6 @@ Future<void> initAppServices(
read(clashServiceProvider).init(),
read(clashServiceProvider).start(),
read(notificationServiceProvider).init(),
if (PlatformUtils.isDesktop) read(windowManagerServiceProvider).init(),
],
);
_loggy.debug('initialized app services');