spotube/lib/main.dart
2022-05-26 19:39:55 +06:00

76 lines
2.4 KiB
Dart

import 'dart:io';
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:hotkey_manager/hotkey_manager.dart';
import 'package:spotube/models/GoRouteDeclarations.dart';
import 'package:spotube/models/Logger.dart';
import 'package:spotube/provider/AudioPlayer.dart';
import 'package:spotube/provider/UserPreferences.dart';
import 'package:spotube/provider/YouTube.dart';
import 'package:just_audio_background/just_audio_background.dart';
import 'package:spotube/themes/dark-theme.dart';
import 'package:spotube/themes/light-theme.dart';
void main() async {
if (Platform.isAndroid || Platform.isIOS) {
await JustAudioBackground.init(
androidNotificationChannelId: 'oss.krtirtho.Spotube',
androidNotificationChannelName: 'Spotube',
androidNotificationOngoing: true,
);
} else {
WidgetsFlutterBinding.ensureInitialized();
await hotKeyManager.unregisterAll();
doWhenWindowReady(() {
appWindow.minSize =
Size(Platform.isAndroid || Platform.isIOS ? 280 : 359, 700);
appWindow.size = const Size(900, 700);
appWindow.alignment = Alignment.center;
appWindow.maximize();
appWindow.title = "Spotube";
appWindow.show();
});
}
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends HookConsumerWidget {
final GoRouter _router = createGoRouter();
final logger = getLogger(MyApp);
MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, ref) {
final themeMode =
ref.watch(userPreferencesProvider.select((s) => s.themeMode));
final player = ref.watch(audioPlayerProvider);
final youtube = ref.watch(youtubeProvider);
useEffect(() {
return () {
player.dispose();
youtube.close();
};
}, []);
return MaterialApp.router(
routeInformationParser: _router.routeInformationParser,
routerDelegate: _router.routerDelegate,
debugShowCheckedModeBanner: false,
title: 'Spotube',
theme: lightTheme(
accentMaterialColor: Colors.deepPurple,
backgroundMaterialColor: Colors.grey,
),
darkTheme: darkTheme(
accentMaterialColor: Colors.purple,
backgroundMaterialColor: Colors.grey,
),
themeMode: themeMode,
);
}
}