Browse Source

neon: Refactor app implementations to only override methods

pull/50/head
jld3103 2 years ago
parent
commit
74a2e6e144
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 31
      packages/neon/lib/src/apps/files/app.dart
  2. 31
      packages/neon/lib/src/apps/news/app.dart
  3. 30
      packages/neon/lib/src/apps/notes/app.dart
  4. 30
      packages/neon/lib/src/apps/notifications/app.dart
  5. 2
      packages/neon/lib/src/pages/home/home.dart
  6. 29
      packages/neon/lib/src/utils/app_implementation.dart

31
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<FilesBloc, FilesAppSpecificOptions> {
FilesApp(
final SharedPreferences sharedPreferences,
final RequestManager requestManager,
final NeonPlatform platform,
) : super(
'files',
(final localizations) => localizations.filesName,
sharedPreferences,
FilesAppSpecificOptions.new,
(final options, final client) => FilesBloc(
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,
),
(final context, final bloc) => FilesMainPage(
);
@override
Widget buildPage(BuildContext context, FilesBloc bloc) => FilesMainPage(
bloc: bloc,
),
);
}

31
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<NewsBloc, NewsAppSpecificOptions> {
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(
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,
),
(final context, final bloc) => NewsMainPage(
);
@override
Widget buildPage(BuildContext context, NewsBloc bloc) => NewsMainPage(
bloc: bloc,
),
);
}

30
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<NotesBloc, NotesAppSpecificOptions> {
NotesApp(
final SharedPreferences sharedPreferences,
final RequestManager requestManager,
) : super(
'notes',
(final localizations) => localizations.notesName,
sharedPreferences,
NotesAppSpecificOptions.new,
(final options, final client) => NotesBloc(
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,
),
(final context, final bloc) => NotesMainPage(
);
@override
Widget buildPage(BuildContext context, NotesBloc bloc) => NotesMainPage(
bloc: bloc,
),
);
}

30
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<NotificationsBloc, NotificationsAppSpecificOptions> {
NotificationsApp(
final SharedPreferences sharedPreferences,
final RequestManager requestManager,
) : super(
'notifications',
(final localizations) => localizations.notificationsName,
sharedPreferences,
NotificationsAppSpecificOptions.new,
(final options, final client) => NotificationsBloc(
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,
),
(final context, final bloc) => NotificationsMainPage(
);
@override
Widget buildPage(BuildContext context, NotificationsBloc bloc) => NotificationsMainPage(
bloc: bloc,
),
);
}

2
packages/neon/lib/src/pages/home/home.dart

@ -565,7 +565,7 @@ class _HomePageState extends State<HomePage> with tray.TrayListener, WindowListe
Expanded(
child: appsData
.singleWhere((final a) => a.id == activeAppIDSnapshot.data!)
.buildPage(context, _appsBloc),
.buildPageFromAppsBloc(context, _appsBloc),
),
],
],

29
packages/neon/lib/src/utils/app_implementation.dart

@ -8,34 +8,35 @@ List<AppImplementation> 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<T extends RxBlocBase, R extends NextcloudAppSpecificOptions> {
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, {

Loading…
Cancel
Save