From d46933536c7d2014df180e6990d5f5ac2ce72a64 Mon Sep 17 00:00:00 2001 From: TheLastGimbus Date: Wed, 20 Sep 2023 23:52:11 +0200 Subject: [PATCH] Try to connect to headphones under the hood so that user won't see spinning wheel and thus have *even* smoother experience This was SO easy!! Thanks @jonbhanson !!! --- lib/main.dart | 14 +++++++++++++- pubspec.lock | 2 +- pubspec.yaml | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 3f6ce21..ee4f2c4 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -4,6 +4,7 @@ import 'package:dynamic_color/dynamic_color.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:flutter_native_splash/flutter_native_splash.dart'; import 'package:provider/provider.dart'; import 'package:streaming_shared_preferences/streaming_shared_preferences.dart'; @@ -21,7 +22,10 @@ import 'ui/pages/settings/settings_page.dart'; import 'ui/theme/themes.dart'; void main() { - WidgetsFlutterBinding.ensureInitialized(); + final bind = WidgetsFlutterBinding.ensureInitialized(); + // This is so that we try to connect to headphones under splash screen + // This will make it more smooth to the user + FlutterNativeSplash.preserve(widgetsBinding: bind); if (Platform.isAndroid) { // this is async, so it won't block runApp android_periodic.init(); @@ -45,6 +49,14 @@ class _MyAppWrapperState extends State @override void initState() { WidgetsBinding.instance.addObserver(this); + // ...and this removes splash if we either connected or 1 second passed + _btBlock.stream + .firstWhere((e) => e is HeadphonesConnectedOpen) + .timeout( + const Duration(seconds: 1), + onTimeout: () => HeadphonesNotPaired(), // just placeholder + ) + .then((_) => FlutterNativeSplash.remove()); super.initState(); } diff --git a/pubspec.lock b/pubspec.lock index a9e9808..2dcaa6b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -188,7 +188,7 @@ packages: source: sdk version: "0.0.0" flutter_native_splash: - dependency: "direct dev" + dependency: "direct main" description: name: flutter_native_splash sha256: ecff62b3b893f2f665de7e4ad3de89f738941fcfcaaba8ee601e749efafa4698 diff --git a/pubspec.yaml b/pubspec.yaml index 7071a72..f7eff9b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,6 +43,7 @@ dependencies: dynamic_color: ^1.6.7 home_widget: ^0.3.0 workmanager: ^0.5.1 + flutter_native_splash: ^2.3.2 # Logic libs crclib: ^3.0.0 @@ -74,7 +75,6 @@ dev_dependencies: sdk: flutter flutter_launcher_icons: ^0.13.1 - flutter_native_splash: ^2.3.2 flutter_lints: ^2.0.3