From 74a2e6e14410b870c3b92c6da9cf525269b13f41 Mon Sep 17 00:00:00 2001 From: jld3103 Date: Sat, 13 Aug 2022 10:09:46 +0200 Subject: [PATCH] neon: Refactor app implementations to only override methods --- packages/neon/lib/src/apps/files/app.dart | 43 ++++++++++--------- packages/neon/lib/src/apps/news/app.dart | 41 ++++++++++-------- packages/neon/lib/src/apps/notes/app.dart | 40 +++++++++-------- .../neon/lib/src/apps/notifications/app.dart | 40 +++++++++-------- packages/neon/lib/src/pages/home/home.dart | 2 +- .../lib/src/utils/app_implementation.dart | 29 +++++++------ 6 files changed, 105 insertions(+), 90 deletions(-) diff --git a/packages/neon/lib/src/apps/files/app.dart b/packages/neon/lib/src/apps/files/app.dart index 7a80f83e..ae159865 100644 --- a/packages/neon/lib/src/apps/files/app.dart +++ b/packages/neon/lib/src/apps/files/app.dart @@ -25,7 +25,6 @@ import 'package:path/path.dart' as p; import 'package:provider/provider.dart'; import 'package:rxdart/rxdart.dart'; import 'package:settings/settings.dart'; -import 'package:shared_preferences/shared_preferences.dart'; part 'dialogs/choose_create.dart'; part 'dialogs/choose_folder.dart'; @@ -40,23 +39,27 @@ part 'widgets/browser_view.dart'; part 'widgets/file_preview.dart'; class FilesApp extends AppImplementation { - FilesApp( - final SharedPreferences sharedPreferences, - final RequestManager requestManager, - final NeonPlatform platform, - ) : super( - 'files', - (final localizations) => localizations.filesName, - sharedPreferences, - FilesAppSpecificOptions.new, - (final options, final client) => FilesBloc( - options, - requestManager, - client, - platform, - ), - (final context, final bloc) => FilesMainPage( - bloc: bloc, - ), - ); + FilesApp(super.sharedPreferences, super.requestManager, super.platform); + + @override + String id = 'files'; + + @override + String nameFromLocalization(AppLocalizations localizations) => localizations.filesName; + + @override + FilesAppSpecificOptions buildOptions(Storage storage) => FilesAppSpecificOptions(storage); + + @override + FilesBloc buildBloc(NextcloudClient client) => FilesBloc( + options, + requestManager, + client, + platform, + ); + + @override + Widget buildPage(BuildContext context, FilesBloc bloc) => FilesMainPage( + bloc: bloc, + ); } diff --git a/packages/neon/lib/src/apps/news/app.dart b/packages/neon/lib/src/apps/news/app.dart index fdbba317..a73582b5 100644 --- a/packages/neon/lib/src/apps/news/app.dart +++ b/packages/neon/lib/src/apps/news/app.dart @@ -21,7 +21,6 @@ import 'package:provider/provider.dart'; import 'package:rxdart/rxdart.dart'; import 'package:settings/settings.dart'; import 'package:share_plus/share_plus.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:sort_box/sort_box.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:wakelock/wakelock.dart'; @@ -48,22 +47,26 @@ part 'widgets/folder_view.dart'; part 'widgets/folders_view.dart'; class NewsApp extends AppImplementation { - NewsApp( - final SharedPreferences sharedPreferences, - final RequestManager requestManager, - final NeonPlatform platform, - ) : super( - 'news', - (final localizations) => localizations.newsName, - sharedPreferences, - (final storage) => NewsAppSpecificOptions(storage, platform), - (final options, final client) => NewsBloc( - options, - requestManager, - client, - ), - (final context, final bloc) => NewsMainPage( - bloc: bloc, - ), - ); + NewsApp(super.sharedPreferences, super.requestManager, super.platform); + + @override + String id = 'news'; + + @override + String nameFromLocalization(AppLocalizations localizations) => localizations.newsName; + + @override + NewsAppSpecificOptions buildOptions(Storage storage) => NewsAppSpecificOptions(storage, platform); + + @override + NewsBloc buildBloc(NextcloudClient client) => NewsBloc( + options, + requestManager, + client, + ); + + @override + Widget buildPage(BuildContext context, NewsBloc bloc) => NewsMainPage( + bloc: bloc, + ); } diff --git a/packages/neon/lib/src/apps/notes/app.dart b/packages/neon/lib/src/apps/notes/app.dart index 121402c8..d3b3a71b 100644 --- a/packages/neon/lib/src/apps/notes/app.dart +++ b/packages/neon/lib/src/apps/notes/app.dart @@ -15,7 +15,6 @@ import 'package:nextcloud/nextcloud.dart'; import 'package:provider/provider.dart'; import 'package:rxdart/rxdart.dart'; import 'package:settings/settings.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:sort_box/sort_box.dart'; import 'package:url_launcher/url_launcher_string.dart'; import 'package:wakelock/wakelock.dart'; @@ -35,21 +34,26 @@ part 'widgets/category_select.dart'; part 'widgets/notes_view.dart'; class NotesApp extends AppImplementation { - NotesApp( - final SharedPreferences sharedPreferences, - final RequestManager requestManager, - ) : super( - 'notes', - (final localizations) => localizations.notesName, - sharedPreferences, - NotesAppSpecificOptions.new, - (final options, final client) => NotesBloc( - options, - requestManager, - client, - ), - (final context, final bloc) => NotesMainPage( - bloc: bloc, - ), - ); + NotesApp(super.sharedPreferences, super.requestManager, super.platform); + + @override + String id = 'notes'; + + @override + String nameFromLocalization(AppLocalizations localizations) => localizations.notesName; + + @override + NotesAppSpecificOptions buildOptions(Storage storage) => NotesAppSpecificOptions(storage); + + @override + NotesBloc buildBloc(NextcloudClient client) => NotesBloc( + options, + requestManager, + client, + ); + + @override + Widget buildPage(BuildContext context, NotesBloc bloc) => NotesMainPage( + bloc: bloc, + ); } diff --git a/packages/neon/lib/src/apps/notifications/app.dart b/packages/neon/lib/src/apps/notifications/app.dart index 1b1c4da9..42043a6c 100644 --- a/packages/neon/lib/src/apps/notifications/app.dart +++ b/packages/neon/lib/src/apps/notifications/app.dart @@ -8,27 +8,31 @@ import 'package:neon/src/apps/notifications/blocs/notifications.dart'; import 'package:neon/src/neon.dart'; import 'package:nextcloud/nextcloud.dart'; import 'package:provider/provider.dart'; -import 'package:shared_preferences/shared_preferences.dart'; part 'options.dart'; part 'pages/main.dart'; class NotificationsApp extends AppImplementation { - NotificationsApp( - final SharedPreferences sharedPreferences, - final RequestManager requestManager, - ) : super( - 'notifications', - (final localizations) => localizations.notificationsName, - sharedPreferences, - NotificationsAppSpecificOptions.new, - (final options, final client) => NotificationsBloc( - options, - requestManager, - client, - ), - (final context, final bloc) => NotificationsMainPage( - bloc: bloc, - ), - ); + NotificationsApp(super.sharedPreferences, super.requestManager, super.platform); + + @override + String id = 'notifications'; + + @override + String nameFromLocalization(AppLocalizations localizations) => localizations.notificationsName; + + @override + NotificationsAppSpecificOptions buildOptions(Storage storage) => NotificationsAppSpecificOptions(storage); + + @override + NotificationsBloc buildBloc(NextcloudClient client) => NotificationsBloc( + options, + requestManager, + client, + ); + + @override + Widget buildPage(BuildContext context, NotificationsBloc bloc) => NotificationsMainPage( + bloc: bloc, + ); } diff --git a/packages/neon/lib/src/pages/home/home.dart b/packages/neon/lib/src/pages/home/home.dart index 0e5d7b60..f4c9d5cc 100644 --- a/packages/neon/lib/src/pages/home/home.dart +++ b/packages/neon/lib/src/pages/home/home.dart @@ -565,7 +565,7 @@ class _HomePageState extends State with tray.TrayListener, WindowListe Expanded( child: appsData .singleWhere((final a) => a.id == activeAppIDSnapshot.data!) - .buildPage(context, _appsBloc), + .buildPageFromAppsBloc(context, _appsBloc), ), ], ], diff --git a/packages/neon/lib/src/utils/app_implementation.dart b/packages/neon/lib/src/utils/app_implementation.dart index 0540d0f6..e2edba62 100644 --- a/packages/neon/lib/src/utils/app_implementation.dart +++ b/packages/neon/lib/src/utils/app_implementation.dart @@ -8,34 +8,35 @@ List getAppImplementations( [ FilesApp(sharedPreferences, requestManager, platform), NewsApp(sharedPreferences, requestManager, platform), - NotesApp(sharedPreferences, requestManager), - NotificationsApp(sharedPreferences, requestManager), + NotesApp(sharedPreferences, requestManager, platform), + NotificationsApp(sharedPreferences, requestManager, platform), ]; abstract class AppImplementation { AppImplementation( - this.id, - this.nameFromLocalization, final SharedPreferences sharedPreferences, - final R Function(Storage) buildOptions, - this._buildBloc, - this._buildPage, + final this.requestManager, + final this.platform, ) { final storage = Storage('app-$id', sharedPreferences); options = buildOptions(storage); } - final String Function(AppLocalizations) nameFromLocalization; + String get id; + final RequestManager requestManager; + final NeonPlatform platform; + + String nameFromLocalization(AppLocalizations localizations); String name(BuildContext context) => nameFromLocalization(AppLocalizations.of(context)); - final String id; + late final R options; - final T Function(R options, NextcloudClient client) _buildBloc; - final Widget Function(BuildContext context, T bloc) _buildPage; + R buildOptions(Storage storage); - T buildBloc(final NextcloudClient client) => _buildBloc(options, client); + T buildBloc(final NextcloudClient client); - Widget buildPage(final BuildContext context, final AppsBloc appsBloc) => - _buildPage(context, appsBloc.getAppBloc(this)); + Widget buildPage(BuildContext context, T bloc); + Widget buildPageFromAppsBloc(final BuildContext context, final AppsBloc appsBloc) => + buildPage(context, appsBloc.getAppBloc(this)); Widget buildIcon( final BuildContext context, {