From 5312bad52da9cdc0d23eadb9fe44f387a341fd85 Mon Sep 17 00:00:00 2001 From: Elias Projahn Date: Sat, 18 Jul 2020 11:54:49 +0200 Subject: [PATCH] Move more code from mobile to common --- {mobile => common}/assets/about.md | 0 .../fonts/libertinussans_bold.otf | Bin .../fonts/libertinussans_italic.otf | Bin .../fonts/libertinussans_regular.otf | Bin {mobile => common}/fonts/musicus_icons.ttf | Bin common/lib/musicus_common.dart | 21 +- common/lib/src/app.dart | 188 ++++++++++++++++++ {mobile/lib => common/lib/src}/icons.dart | 2 +- common/lib/src/platform.dart | 6 + .../lib => common/lib/src}/screens/about.dart | 3 +- .../lib/src}/screens/account_settings.dart | 3 +- .../lib/src}/screens/delete_account.dart | 3 +- .../lib => common/lib/src}/screens/email.dart | 3 +- .../lib => common/lib/src}/screens/home.dart | 5 +- .../lib/src}/screens/password.dart | 3 +- .../lib/src}/screens/person.dart | 5 +- .../lib/src}/screens/program.dart | 4 +- .../lib/src}/screens/register.dart | 3 +- .../lib/src}/screens/server_settings.dart | 2 + .../lib/src}/screens/settings.dart | 4 +- .../lib => common/lib/src}/screens/work.dart | 6 +- .../lib/src}/widgets/play_pause_button.dart | 3 +- .../lib/src}/widgets/player_bar.dart | 3 +- common/pubspec.yaml | 20 +- mobile/lib/app.dart | 156 --------------- mobile/lib/main.dart | 4 +- mobile/lib/platform.dart | 5 + mobile/pubspec.yaml | 21 -- 28 files changed, 258 insertions(+), 215 deletions(-) rename {mobile => common}/assets/about.md (100%) rename {mobile => common}/fonts/libertinussans_bold.otf (100%) rename {mobile => common}/fonts/libertinussans_italic.otf (100%) rename {mobile => common}/fonts/libertinussans_regular.otf (100%) rename {mobile => common}/fonts/musicus_icons.ttf (100%) create mode 100644 common/lib/src/app.dart rename {mobile/lib => common/lib/src}/icons.dart (87%) rename {mobile/lib => common/lib/src}/screens/about.dart (92%) rename {mobile/lib => common/lib/src}/screens/account_settings.dart (99%) rename {mobile/lib => common/lib/src}/screens/delete_account.dart (98%) rename {mobile/lib => common/lib/src}/screens/email.dart (97%) rename {mobile/lib => common/lib/src}/screens/home.dart (96%) rename {mobile/lib => common/lib/src}/screens/password.dart (98%) rename {mobile/lib => common/lib/src}/screens/person.dart (96%) rename {mobile/lib => common/lib/src}/screens/program.dart (99%) rename {mobile/lib => common/lib/src}/screens/register.dart (98%) rename {mobile/lib => common/lib/src}/screens/server_settings.dart (99%) rename {mobile/lib => common/lib/src}/screens/settings.dart (96%) rename {mobile/lib => common/lib/src}/screens/work.dart (93%) rename {mobile/lib => common/lib/src}/widgets/play_pause_button.dart (96%) rename {mobile/lib => common/lib/src}/widgets/player_bar.dart (98%) delete mode 100644 mobile/lib/app.dart diff --git a/mobile/assets/about.md b/common/assets/about.md similarity index 100% rename from mobile/assets/about.md rename to common/assets/about.md diff --git a/mobile/fonts/libertinussans_bold.otf b/common/fonts/libertinussans_bold.otf similarity index 100% rename from mobile/fonts/libertinussans_bold.otf rename to common/fonts/libertinussans_bold.otf diff --git a/mobile/fonts/libertinussans_italic.otf b/common/fonts/libertinussans_italic.otf similarity index 100% rename from mobile/fonts/libertinussans_italic.otf rename to common/fonts/libertinussans_italic.otf diff --git a/mobile/fonts/libertinussans_regular.otf b/common/fonts/libertinussans_regular.otf similarity index 100% rename from mobile/fonts/libertinussans_regular.otf rename to common/fonts/libertinussans_regular.otf diff --git a/mobile/fonts/musicus_icons.ttf b/common/fonts/musicus_icons.ttf similarity index 100% rename from mobile/fonts/musicus_icons.ttf rename to common/fonts/musicus_icons.ttf diff --git a/common/lib/musicus_common.dart b/common/lib/musicus_common.dart index 1c4d383..d85d4fa 100644 --- a/common/lib/musicus_common.dart +++ b/common/lib/musicus_common.dart @@ -1,23 +1,4 @@ -export 'src/editors/ensemble.dart'; -export 'src/editors/instrument.dart'; -export 'src/editors/performance.dart'; -export 'src/editors/person.dart'; -export 'src/editors/recording.dart'; -export 'src/editors/tracks.dart'; -export 'src/editors/work.dart'; - -export 'src/selectors/ensemble.dart'; -export 'src/selectors/files.dart'; -export 'src/selectors/instruments.dart'; -export 'src/selectors/person.dart'; -export 'src/selectors/recording.dart'; -export 'src/selectors/work.dart'; - -export 'src/widgets/lists.dart'; -export 'src/widgets/recording_tile.dart'; -export 'src/widgets/texts.dart'; - -export 'src/backend.dart'; +export 'src/app.dart'; export 'src/library.dart'; export 'src/platform.dart'; export 'src/playback.dart'; diff --git a/common/lib/src/app.dart b/common/lib/src/app.dart new file mode 100644 index 0000000..5e49322 --- /dev/null +++ b/common/lib/src/app.dart @@ -0,0 +1,188 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +import 'backend.dart'; +import 'screens/home.dart'; +import 'settings.dart'; +import 'platform.dart'; +import 'playback.dart'; +import 'widgets/player_bar.dart'; + +/// The classical music player and organizer. +/// +/// This widget is the cross platform abstraction for a whole Musicus app. The +/// properties should be implemented seperately for each platform. +class MusicusApp extends StatelessWidget { + /// Path to the database file. + final String dbPath; + + /// An object to persist the settings. + final MusicusSettingsStorage settingsStorage; + + /// An object handling playback. + final MusicusPlayback playback; + + /// An object handling platform dependent functionality. + final MusicusPlatform platform; + + MusicusApp({ + @required this.dbPath, + @required this.settingsStorage, + @required this.playback, + @required this.platform, + }); + + @override + Widget build(BuildContext context) { + return MusicusBackend( + dbPath: dbPath, + settingsStorage: settingsStorage, + playback: playback, + platform: platform, + child: Builder( + builder: (context) { + final backend = MusicusBackend.of(context); + + return MaterialApp( + title: 'Musicus', + theme: ThemeData( + brightness: Brightness.dark, + accentColor: Colors.amber, + textSelectionColor: Colors.grey[600], + cursorColor: Colors.amber, + textSelectionHandleColor: Colors.amber, + toggleableActiveColor: Colors.amber, + // Added for sliders and FABs. Not everything seems to obey this. + colorScheme: ColorScheme.dark( + primary: Colors.amber, + secondary: Colors.amber, + ), + snackBarTheme: SnackBarThemeData( + backgroundColor: Colors.grey[800], + contentTextStyle: TextStyle( + color: Colors.white, + ), + behavior: SnackBarBehavior.floating, + ), + fontFamily: 'Libertinus Sans', + ), + home: Builder( + builder: (context) { + if (backend.status == MusicusBackendStatus.loading) { + return Material( + color: Theme.of(context).scaffoldBackgroundColor, + ); + } else if (backend.status == MusicusBackendStatus.setup) { + return Material( + color: Theme.of(context).scaffoldBackgroundColor, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Choose the base path for\nyour music library.', + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.headline6, + ), + SizedBox( + height: 16.0, + ), + ListTile( + leading: const Icon(Icons.folder_open), + title: Text('Choose path'), + onTap: () async { + final uri = await platform.chooseBasePath(); + if (uri != null) { + backend.settings.setMusicLibraryPath(uri); + } + }, + ), + ], + ), + ); + } else { + return Content(); + } + }, + ), + ); + }, + ), + ); + } +} + +class Content extends StatefulWidget { + @override + _ContentState createState() => _ContentState(); +} + +class _ContentState extends State with SingleTickerProviderStateMixin { + final nestedNavigator = GlobalKey(); + + AnimationController playerBarAnimation; + MusicusBackendState backend; + StreamSubscription playerActiveSubscription; + + @override + void initState() { + super.initState(); + + playerBarAnimation = AnimationController( + vsync: this, + duration: Duration(milliseconds: 300), + ); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + backend = MusicusBackend.of(context); + playerBarAnimation.value = backend.playback.active.value ? 1.0 : 0.0; + + if (playerActiveSubscription != null) { + playerActiveSubscription.cancel(); + } + + playerActiveSubscription = backend.playback.active.listen((active) => + active ? playerBarAnimation.forward() : playerBarAnimation.reverse()); + } + + @override + Widget build(BuildContext context) { + // The nested Navigator is for every screen from which the player bar at + // the bottom should be accessible. The WillPopScope widget intercepts + // taps on the system back button and redirects them to the nested + // navigator. + return WillPopScope( + onWillPop: () async => !(await nestedNavigator.currentState.maybePop()), + child: Scaffold( + body: Navigator( + key: nestedNavigator, + onGenerateRoute: (settings) => settings.name == '/' + ? MaterialPageRoute( + builder: (context) => HomeScreen(), + ) + : null, + initialRoute: '/', + ), + bottomNavigationBar: SizeTransition( + sizeFactor: CurvedAnimation( + curve: Curves.easeOut, + parent: playerBarAnimation, + ), + axisAlignment: -1.0, + child: PlayerBar(), + ), + ), + ); + } + + @override + void dispose() { + super.dispose(); + playerActiveSubscription.cancel(); + } +} diff --git a/mobile/lib/icons.dart b/common/lib/src/icons.dart similarity index 87% rename from mobile/lib/icons.dart rename to common/lib/src/icons.dart index d6778e4..b0cf1ce 100644 --- a/mobile/lib/icons.dart +++ b/common/lib/src/icons.dart @@ -7,7 +7,7 @@ class MusicusIcons { MusicusIcons._(); static const _kFontFam = 'Musicus Icons'; - static const _kFontPkg = null; + static const _kFontPkg = 'musicus_common'; static const IconData musicus = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); diff --git a/common/lib/src/platform.dart b/common/lib/src/platform.dart index e33a7ca..4fe35c8 100644 --- a/common/lib/src/platform.dart +++ b/common/lib/src/platform.dart @@ -46,6 +46,12 @@ abstract class MusicusPlatform { basePath = path; } + /// Choose a root level directory for the music library. + /// + /// This should return a string representation of the chosen directory + /// suitable for storage as [basePath]. + Future chooseBasePath(); + /// Get all documents in a directory. /// /// [parentId] will be the ID of the directory document. If [parentId] is diff --git a/mobile/lib/screens/about.dart b/common/lib/src/screens/about.dart similarity index 92% rename from mobile/lib/screens/about.dart rename to common/lib/src/screens/about.dart index c80aa2c..0004fa7 100644 --- a/mobile/lib/screens/about.dart +++ b/common/lib/src/screens/about.dart @@ -14,7 +14,8 @@ class AboutScreen extends StatelessWidget { title: Text('About'), ), body: FutureBuilder( - future: rootBundle.loadString('assets/about.md'), + future: + rootBundle.loadString('packages/musicus_common/assets/about.md'), builder: (context, snapshot) { if (snapshot.hasData) { return Markdown( diff --git a/mobile/lib/screens/account_settings.dart b/common/lib/src/screens/account_settings.dart similarity index 99% rename from mobile/lib/screens/account_settings.dart rename to common/lib/src/screens/account_settings.dart index 9afdb89..a597cc6 100644 --- a/mobile/lib/screens/account_settings.dart +++ b/common/lib/src/screens/account_settings.dart @@ -2,7 +2,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; import 'delete_account.dart'; import 'email.dart'; diff --git a/mobile/lib/screens/delete_account.dart b/common/lib/src/screens/delete_account.dart similarity index 98% rename from mobile/lib/screens/delete_account.dart rename to common/lib/src/screens/delete_account.dart index 0f84586..e0ef887 100644 --- a/mobile/lib/screens/delete_account.dart +++ b/common/lib/src/screens/delete_account.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; class DeleteAccountScreen extends StatefulWidget { @override diff --git a/mobile/lib/screens/email.dart b/common/lib/src/screens/email.dart similarity index 97% rename from mobile/lib/screens/email.dart rename to common/lib/src/screens/email.dart index eedcf3b..edcc552 100644 --- a/mobile/lib/screens/email.dart +++ b/common/lib/src/screens/email.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; class EmailScreen extends StatefulWidget { final String email; diff --git a/mobile/lib/screens/home.dart b/common/lib/src/screens/home.dart similarity index 96% rename from mobile/lib/screens/home.dart rename to common/lib/src/screens/home.dart index 29ffdd3..2a12df8 100644 --- a/mobile/lib/screens/home.dart +++ b/common/lib/src/screens/home.dart @@ -1,8 +1,11 @@ import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; +import '../backend.dart'; +import '../editors/person.dart'; +import '../editors/tracks.dart'; import '../icons.dart'; +import '../widgets/lists.dart'; import 'about.dart'; import 'person.dart'; diff --git a/mobile/lib/screens/password.dart b/common/lib/src/screens/password.dart similarity index 98% rename from mobile/lib/screens/password.dart rename to common/lib/src/screens/password.dart index 38b2417..317ae31 100644 --- a/mobile/lib/screens/password.dart +++ b/common/lib/src/screens/password.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; class PasswordScreen extends StatefulWidget { @override diff --git a/mobile/lib/screens/person.dart b/common/lib/src/screens/person.dart similarity index 96% rename from mobile/lib/screens/person.dart rename to common/lib/src/screens/person.dart index 503739b..cc28a8d 100644 --- a/mobile/lib/screens/person.dart +++ b/common/lib/src/screens/person.dart @@ -1,6 +1,9 @@ import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; +import '../editors/work.dart'; +import '../widgets/lists.dart'; import 'work.dart'; diff --git a/mobile/lib/screens/program.dart b/common/lib/src/screens/program.dart similarity index 99% rename from mobile/lib/screens/program.dart rename to common/lib/src/screens/program.dart index 046d392..b61ba84 100644 --- a/mobile/lib/screens/program.dart +++ b/common/lib/src/screens/program.dart @@ -2,9 +2,11 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; +import '../backend.dart'; +import '../library.dart'; import '../widgets/play_pause_button.dart'; +import '../widgets/recording_tile.dart'; class ProgramScreen extends StatefulWidget { @override diff --git a/mobile/lib/screens/register.dart b/common/lib/src/screens/register.dart similarity index 98% rename from mobile/lib/screens/register.dart rename to common/lib/src/screens/register.dart index c0eb881..33b7264 100644 --- a/mobile/lib/screens/register.dart +++ b/common/lib/src/screens/register.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; /// A screen for creating a new Musicus account. class RegisterScreen extends StatefulWidget { diff --git a/mobile/lib/screens/server_settings.dart b/common/lib/src/screens/server_settings.dart similarity index 99% rename from mobile/lib/screens/server_settings.dart rename to common/lib/src/screens/server_settings.dart index 779ddae..3ce7854 100644 --- a/mobile/lib/screens/server_settings.dart +++ b/common/lib/src/screens/server_settings.dart @@ -3,6 +3,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:musicus_common/musicus_common.dart'; +import '../backend.dart'; + class ServerSettingsScreen extends StatefulWidget { @override _ServerSettingsScreenState createState() => _ServerSettingsScreenState(); diff --git a/mobile/lib/screens/settings.dart b/common/lib/src/screens/settings.dart similarity index 96% rename from mobile/lib/screens/settings.dart rename to common/lib/src/screens/settings.dart index 6c9ea9d..8067536 100644 --- a/mobile/lib/screens/settings.dart +++ b/common/lib/src/screens/settings.dart @@ -3,6 +3,8 @@ import 'package:flutter/services.dart'; import 'package:musicus_client/musicus_client.dart'; import 'package:musicus_common/musicus_common.dart'; +import '../backend.dart'; + import 'account_settings.dart'; import 'server_settings.dart'; @@ -28,7 +30,7 @@ class SettingsScreen extends StatelessWidget { subtitle: Text(snapshot.data ?? 'Choose folder'), isThreeLine: snapshot.hasData, onTap: () async { - final uri = await _platform.invokeMethod('openTree'); + final uri = await backend.platform.chooseBasePath(); if (uri != null) { settings.setMusicLibraryPath(uri); diff --git a/mobile/lib/screens/work.dart b/common/lib/src/screens/work.dart similarity index 93% rename from mobile/lib/screens/work.dart rename to common/lib/src/screens/work.dart index 4f977ac..4e56008 100644 --- a/mobile/lib/screens/work.dart +++ b/common/lib/src/screens/work.dart @@ -1,6 +1,10 @@ import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; +import '../editors/recording.dart'; +import '../widgets/lists.dart'; +import '../widgets/texts.dart'; class WorkScreen extends StatelessWidget { final WorkInfo workInfo; diff --git a/mobile/lib/widgets/play_pause_button.dart b/common/lib/src/widgets/play_pause_button.dart similarity index 96% rename from mobile/lib/widgets/play_pause_button.dart rename to common/lib/src/widgets/play_pause_button.dart index b5926bf..e3e3e6f 100644 --- a/mobile/lib/widgets/play_pause_button.dart +++ b/common/lib/src/widgets/play_pause_button.dart @@ -1,7 +1,8 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:musicus_common/musicus_common.dart'; + +import '../backend.dart'; class PlayPauseButton extends StatefulWidget { @override diff --git a/mobile/lib/widgets/player_bar.dart b/common/lib/src/widgets/player_bar.dart similarity index 98% rename from mobile/lib/widgets/player_bar.dart rename to common/lib/src/widgets/player_bar.dart index 5083f0a..8b10e01 100644 --- a/mobile/lib/widgets/player_bar.dart +++ b/common/lib/src/widgets/player_bar.dart @@ -2,8 +2,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:musicus_client/musicus_client.dart'; -import 'package:musicus_common/musicus_common.dart'; +import '../backend.dart'; +import '../library.dart'; import '../screens/program.dart'; import 'play_pause_button.dart'; diff --git a/common/pubspec.yaml b/common/pubspec.yaml index da3b035..ce71fa2 100644 --- a/common/pubspec.yaml +++ b/common/pubspec.yaml @@ -8,9 +8,27 @@ environment: dependencies: flutter: sdk: flutter + flutter_markdown: meta: moor: moor_ffi: musicus_client: path: ../client - rxdart: \ No newline at end of file + rxdart: + url_launcher: + +flutter: + uses-material-design: true + assets: + - assets/about.md + fonts: + - family: Libertinus Sans + fonts: + - asset: fonts/libertinussans_regular.otf + - asset: fonts/libertinussans_bold.otf + weight: 700 + - asset: fonts/libertinussans_italic.otf + style: italic + - family: Musicus Icons + fonts: + - asset: fonts/musicus_icons.ttf \ No newline at end of file diff --git a/mobile/lib/app.dart b/mobile/lib/app.dart deleted file mode 100644 index 55913bd..0000000 --- a/mobile/lib/app.dart +++ /dev/null @@ -1,156 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:musicus_common/musicus_common.dart'; - -import 'screens/home.dart'; -import 'widgets/player_bar.dart'; - -class App extends StatelessWidget { - static const _platform = MethodChannel('de.johrpan.musicus/platform'); - - @override - Widget build(BuildContext context) { - final backend = MusicusBackend.of(context); - - return MaterialApp( - title: 'Musicus', - theme: ThemeData( - brightness: Brightness.dark, - accentColor: Colors.amber, - textSelectionColor: Colors.grey[600], - cursorColor: Colors.amber, - textSelectionHandleColor: Colors.amber, - toggleableActiveColor: Colors.amber, - // Added for sliders and FABs. Not everything seems to obey this. - colorScheme: ColorScheme.dark( - primary: Colors.amber, - secondary: Colors.amber, - ), - snackBarTheme: SnackBarThemeData( - backgroundColor: Colors.grey[800], - contentTextStyle: TextStyle( - color: Colors.white, - ), - behavior: SnackBarBehavior.floating, - ), - fontFamily: 'Libertinus Sans', - ), - home: Builder( - builder: (context) { - if (backend.status == MusicusBackendStatus.loading) { - return Material( - color: Theme.of(context).scaffoldBackgroundColor, - ); - } else if (backend.status == MusicusBackendStatus.setup) { - return Material( - color: Theme.of(context).scaffoldBackgroundColor, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Choose the base path for\nyour music library.', - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.headline6, - ), - SizedBox( - height: 16.0, - ), - ListTile( - leading: const Icon(Icons.folder_open), - title: Text('Choose path'), - onTap: () async { - final uri = - await _platform.invokeMethod('openTree'); - - if (uri != null) { - backend.settings.setMusicLibraryPath(uri); - } - }, - ), - ], - ), - ); - } else { - return Content(); - } - }, - ), - ); - } -} - -class Content extends StatefulWidget { - @override - _ContentState createState() => _ContentState(); -} - -class _ContentState extends State with SingleTickerProviderStateMixin { - final nestedNavigator = GlobalKey(); - - AnimationController playerBarAnimation; - MusicusBackendState backend; - StreamSubscription playerActiveSubscription; - - @override - void initState() { - super.initState(); - - playerBarAnimation = AnimationController( - vsync: this, - duration: Duration(milliseconds: 300), - ); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - backend = MusicusBackend.of(context); - playerBarAnimation.value = backend.playback.active.value ? 1.0 : 0.0; - - if (playerActiveSubscription != null) { - playerActiveSubscription.cancel(); - } - - playerActiveSubscription = backend.playback.active.listen((active) => - active ? playerBarAnimation.forward() : playerBarAnimation.reverse()); - } - - @override - Widget build(BuildContext context) { - // The nested Navigator is for every screen from which the player bar at - // the bottom should be accessible. The WillPopScope widget intercepts - // taps on the system back button and redirects them to the nested - // navigator. - return WillPopScope( - onWillPop: () async => !(await nestedNavigator.currentState.maybePop()), - child: Scaffold( - body: Navigator( - key: nestedNavigator, - onGenerateRoute: (settings) => settings.name == '/' - ? MaterialPageRoute( - builder: (context) => HomeScreen(), - ) - : null, - initialRoute: '/', - ), - bottomNavigationBar: SizeTransition( - sizeFactor: CurvedAnimation( - curve: Curves.easeOut, - parent: playerBarAnimation, - ), - axisAlignment: -1.0, - child: PlayerBar(), - ), - ), - ); - } - - @override - void dispose() { - super.dispose(); - playerActiveSubscription.cancel(); - } -} diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 3f10c37..3a729e1 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -4,7 +4,6 @@ import 'package:musicus_common/musicus_common.dart'; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart' as pp; -import 'app.dart'; import 'settings.dart'; import 'platform.dart'; import 'playback.dart'; @@ -16,12 +15,11 @@ Future main() async { final dbPath = p.join(dir.path, 'db.sqlite'); runApp(AudioServiceWidget( - child: MusicusBackend( + child: MusicusApp( dbPath: dbPath, settingsStorage: SettingsStorage(), platform: MusicusAndroidPlatform(), playback: Playback(), - child: App(), ), )); } diff --git a/mobile/lib/platform.dart b/mobile/lib/platform.dart index b24d5d5..4ea0d79 100644 --- a/mobile/lib/platform.dart +++ b/mobile/lib/platform.dart @@ -4,6 +4,11 @@ import 'package:musicus_common/musicus_common.dart'; class MusicusAndroidPlatform extends MusicusPlatform { static const _platform = MethodChannel('de.johrpan.musicus/platform'); + @override + Future chooseBasePath() async { + return await _platform.invokeMethod('openTree'); + } + @override Future> getChildren(String parentId) async { final List> childrenJson = diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index e68c7ef..e27fb15 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,34 +12,13 @@ dependencies: audio_service: flutter: sdk: flutter - flutter_markdown: - meta: - moor: - moor_ffi: - musicus_client: - path: ../client musicus_common: path: ../common musicus_player: path: ../player path: path_provider: - rxdart: shared_preferences: - url_launcher: flutter: uses-material-design: true - assets: - - assets/about.md - fonts: - - family: Libertinus Sans - fonts: - - asset: fonts/libertinussans_regular.otf - - asset: fonts/libertinussans_bold.otf - weight: 700 - - asset: fonts/libertinussans_italic.otf - style: italic - - family: Musicus Icons - fonts: - - asset: fonts/musicus_icons.ttf