Browse Source

perf: Stop using unnecessary spread operators

Signed-off-by: jld3103 <jld3103yt@gmail.com>
pull/740/head
jld3103 2 years ago
parent
commit
a443e62895
No known key found for this signature in database
GPG Key ID: 9062417B9E8EB7B3
  1. 3
      packages/dynamite/dynamite/lib/src/builder/client.dart
  2. 24
      packages/dynamite/dynamite/lib/src/builder/ofs_builder.dart
  3. 7
      packages/file_icons/bin/file_icons.dart
  4. 3
      packages/neon/neon/lib/src/app.dart
  5. 3
      packages/neon/neon/lib/src/pages/login_check_account.dart
  6. 3
      packages/neon/neon/lib/src/pages/login_check_server_status.dart
  7. 16
      packages/neon/neon/lib/src/pages/nextcloud_app_settings.dart
  8. 21
      packages/neon/neon/lib/src/pages/settings.dart
  9. 4
      packages/neon/neon/lib/src/settings/widgets/settings_category.dart
  10. 4
      packages/neon/neon/lib/src/utils/account_options.dart
  11. 7
      packages/neon/neon/lib/src/utils/global_options.dart
  12. 3
      packages/neon/neon/lib/src/widgets/account_tile.dart
  13. 16
      packages/neon/neon/lib/src/widgets/app_bar.dart
  14. 3
      packages/neon/neon/lib/src/widgets/app_implementation_icon.dart
  15. 7
      packages/neon/neon/lib/src/widgets/list_view.dart
  16. 6
      packages/neon/neon/lib/src/widgets/unified_search_results.dart
  17. 3
      packages/neon/neon/lib/src/widgets/user_avatar.dart
  18. 3
      packages/neon/neon_files/lib/dialogs/choose_create.dart
  19. 11
      packages/neon/neon_files/lib/options.dart
  20. 12
      packages/neon/neon_files/lib/pages/details.dart
  21. 6
      packages/neon/neon_files/lib/widgets/actions.dart
  22. 12
      packages/neon/neon_files/lib/widgets/browser_view.dart
  23. 3
      packages/neon/neon_news/lib/dialogs/add_feed.dart
  24. 7
      packages/neon/neon_news/lib/widgets/articles_view.dart
  25. 6
      packages/neon/neon_news/lib/widgets/feeds_view.dart
  26. 3
      packages/neon/neon_notes/lib/dialogs/create_note.dart
  27. 3
      packages/neon/neon_notes/lib/dialogs/select_category.dart
  28. 6
      packages/nextcloud/lib/src/client.dart

3
packages/dynamite/dynamite/lib/src/builder/client.dart

@ -169,14 +169,13 @@ Class buildRootClient(
..toSuper = true
..named = true,
),
if (spec.hasAnySecurity) ...[
if (spec.hasAnySecurity)
Parameter(
(final b) => b
..name = 'authentications'
..toSuper = true
..named = true,
),
],
]),
),
Constructor(

24
packages/dynamite/dynamite/lib/src/builder/ofs_builder.dart

@ -239,33 +239,25 @@ TypeResult resolveOfs(
(final entry) =>
entry.value.endsWith('/${result.name.replaceFirst(state.classPrefix, '')}'),
)
.map((final entry) => entry.key)) ...[
.map((final entry) => entry.key))
" || discriminator == '$key'",
],
') {',
],
],
'try {',
if (result is TypeResultBase || result is TypeResultEnum) ...[
'result._${fields[result.name]!} = ${result.deserialize('data')};',
] else ...[
if (result is TypeResultBase || result is TypeResultEnum)
'result._${fields[result.name]!} = ${result.deserialize('data')};'
else
'result._${fields[result.name]!} = ${result.deserialize('data')}.toBuilder();',
],
'} catch (_) {',
if (schema.discriminator != null) ...[
'rethrow;',
],
if (schema.discriminator != null) 'rethrow;',
'}',
if (schema.discriminator != null) ...[
'}',
],
if (schema.discriminator != null) '}',
],
if (schema.oneOf != null) ...[
if (schema.oneOf != null)
"assert([${fields.values.map((final e) => 'result._$e').join(',')}].where((final x) => x != null).length >= 1, 'Need oneOf for \${result._data}');",
],
if (schema.anyOf != null) ...[
if (schema.anyOf != null)
"assert([${fields.values.map((final e) => 'result._$e').join(',')}].where((final x) => x != null).length >= 1, 'Need anyOf for \${result._data}');",
],
'return result.build();',
].join(),
);

7
packages/file_icons/bin/file_icons.dart

@ -100,14 +100,11 @@ void generateData() {
'// Code points',
// This filters unused codepoints.
for (final type in codePoints.keys
.where((final type) => iconSet.keys.map((final pattern) => iconSet[pattern]![0] == type).contains(true))) ...[
.where((final type) => iconSet.keys.map((final pattern) => iconSet[pattern]![0] == type).contains(true)))
'const ${_toVariableName(type)} = ${codePoints[type]};',
],
'',
'// Colors',
for (final colorName in colors.keys) ...[
'const ${_toVariableName(colorName)} = ${colors[colorName]};',
],
for (final colorName in colors.keys) 'const ${_toVariableName(colorName)} = ${colors[colorName]};',
'',
"const _fontFamily = 'Seti';",
"const _fontPackage = 'file_icons';",

3
packages/neon/neon/lib/src/app.dart

@ -108,13 +108,12 @@ class _NeonAppState extends State<NeonApp> with WidgetsBindingObserver, tray.Tra
await tray.trayManager.setContextMenu(
tray.Menu(
items: [
for (final app in _appImplementations) ...[
for (final app in _appImplementations)
tray.MenuItem(
key: 'app_${app.id}',
label: app.nameFromLocalization(localizations),
// TODO: Add icons which should work on macOS and Windows
),
],
tray.MenuItem.separator(),
tray.MenuItem(
key: 'show_hide',

3
packages/neon/neon/lib/src/pages/login_check_account.dart

@ -63,7 +63,7 @@ class _LoginCheckAccountPageState extends State<LoginCheckAccountPage> {
builder: (final context, final state) => Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (state.hasError) ...[
if (state.hasError)
Builder(
builder: (final context) {
final details = NeonException.getDetails(context, state.error);
@ -75,7 +75,6 @@ class _LoginCheckAccountPageState extends State<LoginCheckAccountPage> {
);
},
),
],
_buildAccountTile(state),
Align(
alignment: Alignment.bottomRight,

3
packages/neon/neon/lib/src/pages/login_check_server_status.dart

@ -63,12 +63,11 @@ class _LoginCheckServerStatusPageState extends State<LoginCheckServerStatusPage>
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (state.hasError) ...[
if (state.hasError)
NeonValidationTile(
title: NeonException.getDetails(context, state.error).text,
state: ValidationState.failure,
),
],
_buildServerVersionTile(state),
_buildMaintenanceModeTile(state),
Align(

16
packages/neon/neon/lib/src/pages/nextcloud_app_settings.dart

@ -41,29 +41,25 @@ class NextcloudAppSettingsPage extends StatelessWidget {
final body = SettingsList(
categories: [
for (final category in [...appImplementation.options.categories, null]) ...[
if (appImplementation.options.options.where((final option) => option.category == category).isNotEmpty) ...[
for (final category in [...appImplementation.options.categories, null])
if (appImplementation.options.options.where((final option) => option.category == category).isNotEmpty)
SettingsCategory(
title: Text(
category != null ? category.name(context) : AppLocalizations.of(context).optionsCategoryOther,
),
tiles: [
for (final option
in appImplementation.options.options.where((final option) => option.category == category)) ...[
if (option is ToggleOption) ...[
in appImplementation.options.options.where((final option) => option.category == category))
if (option is ToggleOption)
CheckBoxSettingsTile(
option: option,
),
] else if (option is SelectOption) ...[
)
else if (option is SelectOption)
DropdownButtonSettingsTile(
option: option,
),
],
],
],
),
],
],
],
);

21
packages/neon/neon/lib/src/pages/settings.dart

@ -98,8 +98,8 @@ class _SettingsPageState extends State<SettingsPage> {
title: Text(AppLocalizations.of(context).settingsApps),
key: ValueKey(SettingsCategories.apps.name),
tiles: <SettingsTile>[
for (final appImplementation in appImplementations) ...[
if (appImplementation.options.options.isNotEmpty) ...[
for (final appImplementation in appImplementations)
if (appImplementation.options.options.isNotEmpty)
CustomSettingsTile(
leading: appImplementation.buildIcon(),
title: Text(appImplementation.name(context)),
@ -107,8 +107,6 @@ class _SettingsPageState extends State<SettingsPage> {
NextcloudAppSettingsRoute(appid: appImplementation.id).go(context);
},
),
],
],
],
),
SettingsCategory(
@ -135,12 +133,12 @@ class _SettingsPageState extends State<SettingsPage> {
),
],
),
if (NeonPlatform.instance.canUsePushNotifications) ...[
if (NeonPlatform.instance.canUsePushNotifications)
SettingsCategory(
title: Text(AppLocalizations.of(context).optionsCategoryPushNotifications),
key: ValueKey(SettingsCategories.pushNotifications.name),
tiles: [
if (!globalOptions.pushNotificationsEnabled.enabled) ...[
if (!globalOptions.pushNotificationsEnabled.enabled)
TextSettingsTile(
text: AppLocalizations.of(context).globalOptionsPushNotificationsEnabledDisabledNotice,
style: TextStyle(
@ -149,7 +147,6 @@ class _SettingsPageState extends State<SettingsPage> {
color: Theme.of(context).colorScheme.error,
),
),
],
CheckBoxSettingsTile(
option: globalOptions.pushNotificationsEnabled,
),
@ -158,8 +155,7 @@ class _SettingsPageState extends State<SettingsPage> {
),
],
),
],
if (NeonPlatform.instance.canUseWindowManager) ...[
if (NeonPlatform.instance.canUseWindowManager)
SettingsCategory(
title: Text(AppLocalizations.of(context).optionsCategoryStartup),
key: ValueKey(SettingsCategories.startup.name),
@ -172,8 +168,7 @@ class _SettingsPageState extends State<SettingsPage> {
),
],
),
],
if (NeonPlatform.instance.canUseWindowManager && NeonPlatform.instance.canUseSystemTray) ...[
if (NeonPlatform.instance.canUseWindowManager && NeonPlatform.instance.canUseSystemTray)
SettingsCategory(
title: Text(AppLocalizations.of(context).optionsCategorySystemTray),
key: ValueKey(SettingsCategories.systemTray.name),
@ -186,7 +181,6 @@ class _SettingsPageState extends State<SettingsPage> {
),
],
),
],
SettingsCategory(
title: Text(AppLocalizations.of(context).optionsCategoryAccounts),
key: ValueKey(SettingsCategories.accounts.name),
@ -199,14 +193,13 @@ class _SettingsPageState extends State<SettingsPage> {
option: globalOptions.initialAccount,
),
],
for (final account in accountsSnapshot.requireData) ...[
for (final account in accountsSnapshot.requireData)
AccountSettingsTile(
account: account,
onTap: () {
AccountSettingsRoute(accountid: account.id).go(context);
},
),
],
CustomSettingsTile(
title: ElevatedButton.icon(
onPressed: () async => const LoginRoute().push(context),

4
packages/neon/neon/lib/src/settings/widgets/settings_category.dart

@ -18,9 +18,7 @@ class SettingsCategory extends StatelessWidget {
Widget build(final BuildContext context) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (title != null) ...[
title!,
],
if (title != null) title!,
...tiles,
]
.intersperse(

4
packages/neon/neon/lib/src/utils/account_options.dart

@ -20,9 +20,7 @@ class AccountSpecificOptions extends OptionsCollection {
initialApp.values = {
null: (final context) => AppLocalizations.of(context).accountOptionsAutomatic,
for (final app in result.requireData) ...{
app.id: app.name,
},
for (final app in result.requireData) app.id: app.name,
};
});
}

7
packages/neon/neon/lib/src/utils/global_options.dart

@ -103,9 +103,7 @@ class GlobalOptions extends OptionsCollection {
Future updateDistributors(final List<String> distributors) async {
pushNotificationsDistributor.values = {
for (final distributor in distributors) ...{
distributor: _distributorsMap[distributor] ?? (final _) => distributor,
},
for (final distributor in distributors) distributor: _distributorsMap[distributor] ?? (final _) => distributor,
};
final allowed = distributors.isNotEmpty;
@ -210,10 +208,9 @@ class GlobalOptions extends OptionsCollection {
defaultValue: Platform.isAndroid || Platform.isIOS ? NavigationMode.drawer : NavigationMode.drawerAlwaysVisible,
values: {
NavigationMode.drawer: (final context) => AppLocalizations.of(context).globalOptionsNavigationModeDrawer,
if (!Platform.isAndroid && !Platform.isIOS) ...{
if (!Platform.isAndroid && !Platform.isIOS)
NavigationMode.drawerAlwaysVisible: (final context) =>
AppLocalizations.of(context).globalOptionsNavigationModeDrawerAlwaysVisible,
},
// ignore: deprecated_member_use_from_same_package
NavigationMode.quickBar: (final context) => AppLocalizations.of(context).globalOptionsNavigationModeQuickBar,
},

3
packages/neon/neon/lib/src/widgets/account_tile.dart

@ -54,7 +54,7 @@ class NeonAccountTile extends StatelessWidget {
stream: userDetailsBloc.userDetails,
builder: (final context, final userDetails) => Row(
children: [
if (userDetails.hasData) ...[
if (userDetails.hasData)
Flexible(
child: Text(
userDetails.requireData.displayname,
@ -64,7 +64,6 @@ class NeonAccountTile extends StatelessWidget {
overflow: TextOverflow.ellipsis,
),
),
],
if (userDetails.isLoading) ...[
const SizedBox(
width: 5,

16
packages/neon/neon/lib/src/widgets/app_bar.dart

@ -78,13 +78,12 @@ class _NeonAppBarState extends State<NeonAppBar> {
children: [
Row(
children: [
if (activeAppSnapshot.hasData) ...[
if (activeAppSnapshot.hasData)
Flexible(
child: Text(
activeAppSnapshot.requireData.name(context),
),
),
],
if (appImplementations.hasError) ...[
const SizedBox(
width: 8,
@ -107,16 +106,15 @@ class _NeonAppBarState extends State<NeonAppBar> {
],
],
),
if (accounts.length > 1) ...[
if (accounts.length > 1)
Text(
account.humanReadableID,
style: Theme.of(context).textTheme.bodySmall,
),
],
],
),
actions: [
if (unifiedSearchEnabled) ...[
if (unifiedSearchEnabled)
Flexible(
child: SearchBar(
focusNode: _searchBarFocusNode,
@ -136,10 +134,9 @@ class _NeonAppBarState extends State<NeonAppBar> {
),
],
),
),
] else ...[
)
else
const SearchIconButton(),
],
const NotificationIconButton(),
const AccountSwitcherButton(),
],
@ -220,12 +217,11 @@ class _NotificationIconButtonState extends State<NotificationIconButton> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(app.name(context)),
if (_accounts.length > 1) ...[
if (_accounts.length > 1)
Text(
_account.humanReadableID,
style: Theme.of(context).textTheme.bodySmall,
),
],
],
),
),

3
packages/neon/neon/lib/src/widgets/app_implementation_icon.dart

@ -32,7 +32,7 @@ class NeonAppImplementationIcon extends StatelessWidget {
color: color,
),
),
if (unreadCount > 0) ...[
if (unreadCount > 0)
Text(
unreadCount.toString(),
style: TextStyle(
@ -40,7 +40,6 @@ class NeonAppImplementationIcon extends StatelessWidget {
fontWeight: FontWeight.bold,
),
),
],
],
);
}

7
packages/neon/neon/lib/src/widgets/list_view.dart

@ -51,11 +51,8 @@ class NeonListView<T> extends StatelessWidget {
error,
onRetry: onRefresh,
),
if (items != null) ...[
for (final item in items!) ...[
builder(context, item),
],
],
if (items != null)
for (final item in items!) builder(context, item),
],
),
),

6
packages/neon/neon/lib/src/widgets/unified_search_results.dart

@ -73,7 +73,7 @@ class NeonUnifiedSearchResults extends StatelessWidget {
NeonLinearProgressIndicator(
visible: result.isLoading,
),
if (entries.isEmpty) ...[
if (entries.isEmpty)
ListTile(
leading: const Icon(
Icons.close,
@ -81,8 +81,7 @@ class NeonUnifiedSearchResults extends StatelessWidget {
),
title: Text(AppLocalizations.of(context).searchNoResults),
),
],
for (final entry in entries) ...[
for (final entry in entries)
ListTile(
leading: NeonImageWrapper(
size: const Size.square(kAvatarSize),
@ -95,7 +94,6 @@ class NeonUnifiedSearchResults extends StatelessWidget {
context.go(entry.resourceUrl);
},
),
],
],
),
),

3
packages/neon/neon/lib/src/widgets/user_avatar.dart

@ -84,12 +84,11 @@ class _UserAvatarState extends State<NeonUserAvatar> {
),
),
),
if (widget.showStatus) ...[
if (widget.showStatus)
ResultBuilder<UserStatusPublicInterface?>(
stream: _userStatusBloc.statuses.mapNotNull((final statuses) => statuses[widget.username]),
builder: _userStatusIconBuilder,
),
],
],
);
},

3
packages/neon/neon_files/lib/dialogs/choose_create.dart

@ -77,7 +77,7 @@ class _FilesChooseCreateDialogState extends State<FilesChooseCreateDialog> {
}
},
),
if (NeonPlatform.instance.canUseCamera) ...[
if (NeonPlatform.instance.canUseCamera)
ListTile(
leading: Icon(
MdiIcons.cameraPlus,
@ -94,7 +94,6 @@ class _FilesChooseCreateDialogState extends State<FilesChooseCreateDialog> {
}
},
),
],
ListTile(
leading: Icon(
MdiIcons.folderPlus,

11
packages/neon/neon_files/lib/options.dart

@ -67,9 +67,7 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
label: (final context) => AppLocalizations.of(context).optionsUploadQueueParallelism,
defaultValue: 4,
values: {
for (var i = 1; i <= 16; i = i * 2) ...{
i: (final _) => i.toString(),
},
for (var i = 1; i <= 16; i = i * 2) i: (final _) => i.toString(),
},
);
@ -80,9 +78,7 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
label: (final context) => AppLocalizations.of(context).optionsDownloadQueueParallelism,
defaultValue: 4,
values: {
for (var i = 1; i <= 16; i = i * 2) ...{
i: (final _) => i.toString(),
},
for (var i = 1; i <= 16; i = i * 2) i: (final _) => i.toString(),
},
);
@ -96,9 +92,8 @@ class FilesAppSpecificOptions extends NextcloudAppOptions {
2 * 2024,
6 * 1024,
10 * 1024,
]) ...{
])
_mb(i): (final _) => filesize(_mb(i)),
},
};
int _mb(final int i) => i * 1024 * 1024;

12
packages/neon/neon_files/lib/pages/details.dart

@ -45,28 +45,24 @@ class FilesDetailsPage extends StatelessWidget {
: AppLocalizations.of(context).detailsFileName: details.name,
AppLocalizations.of(context).detailsParentFolder:
details.path.length == 1 ? '/' : details.path.sublist(0, details.path.length - 1).join('/'),
if (details.size != null) ...{
if (details.size != null)
details.isDirectory
? AppLocalizations.of(context).detailsFolderSize
: AppLocalizations.of(context).detailsFileSize: filesize(details.size, 1),
},
if (details.lastModified != null) ...{
if (details.lastModified != null)
AppLocalizations.of(context).detailsLastModified:
details.lastModified!.toLocal().toIso8601String(),
},
if (details.isFavorite != null) ...{
if (details.isFavorite != null)
AppLocalizations.of(context).detailsIsFavorite: details.isFavorite!
? AppLocalizations.of(context).actionYes
: AppLocalizations.of(context).actionNo,
},
}.entries) ...[
}.entries)
DataRow(
cells: [
DataCell(Text(entry.key)),
DataCell(Text(entry.value)),
],
),
],
],
),
],

6
packages/neon/neon_files/lib/widgets/actions.dart

@ -118,7 +118,7 @@ class FileActions extends StatelessWidget {
@override
Widget build(final BuildContext context) => PopupMenuButton<FilesFileAction>(
itemBuilder: (final context) => [
if (details.isFavorite != null) ...[
if (details.isFavorite != null)
PopupMenuItem(
value: FilesFileAction.toggleFavorite,
child: Text(
@ -127,7 +127,6 @@ class FileActions extends StatelessWidget {
: AppLocalizations.of(context).addToFavorites,
),
),
],
PopupMenuItem(
value: FilesFileAction.details,
child: Text(AppLocalizations.of(context).details),
@ -145,12 +144,11 @@ class FileActions extends StatelessWidget {
child: Text(AppLocalizations.of(context).actionCopy),
),
// TODO: https://github.com/provokateurin/nextcloud-neon/issues/4
if (!details.isDirectory) ...[
if (!details.isDirectory)
PopupMenuItem(
value: FilesFileAction.sync,
child: Text(AppLocalizations.of(context).actionSync),
),
],
PopupMenuItem(
value: FilesFileAction.delete,
child: Text(AppLocalizations.of(context).actionDelete),

12
packages/neon/neon_files/lib/widgets/browser_view.dart

@ -75,7 +75,7 @@ class _FilesBrowserViewState extends State<FilesBrowserView> {
for (final uploadTask in tasksSnapshot.requireData.whereType<FilesUploadTask>().where(
(final task) =>
sorted.where((final file) => _pathMatchesFile(task.path, file.name)).isEmpty,
)) ...[
))
FileListTile(
bloc: widget.filesBloc,
browserBloc: widget.bloc,
@ -84,10 +84,9 @@ class _FilesBrowserViewState extends State<FilesBrowserView> {
),
mode: widget.mode,
),
],
for (final file in sorted) ...[
for (final file in sorted)
if ((widget.mode != FilesBrowserMode.selectDirectory || file.isDirectory) &&
(!file.isHidden || showHiddenFiles)) ...[
(!file.isHidden || showHiddenFiles))
Builder(
builder: (final context) {
final matchingTask = tasksSnapshot.requireData
@ -111,8 +110,6 @@ class _FilesBrowserViewState extends State<FilesBrowserView> {
);
},
),
],
],
],
isLoading: files.isLoading,
error: files.error,
@ -143,7 +140,7 @@ class _FilesBrowserViewState extends State<FilesBrowserView> {
widget.bloc.setPath([]);
},
),
for (var i = 0; i < pathSnapshot.requireData.length; i++) ...[
for (var i = 0; i < pathSnapshot.requireData.length; i++)
Builder(
builder: (final context) {
final path = pathSnapshot.requireData.sublist(0, i + 1);
@ -162,7 +159,6 @@ class _FilesBrowserViewState extends State<FilesBrowserView> {
);
},
),
],
]
.intersperse(
const Icon(

3
packages/neon/neon_news/lib/dialogs/add_feed.dart

@ -83,7 +83,7 @@ class _NewsAddFeedDialogState extends State<NewsAddFeedDialog> {
visible: folders.isLoading,
),
),
if (folders.hasData) ...[
if (folders.hasData)
NewsFolderSelect(
folders: folders.requireData,
value: folder,
@ -93,7 +93,6 @@ class _NewsAddFeedDialogState extends State<NewsAddFeedDialog> {
});
},
),
],
],
ElevatedButton(
onPressed: folders.hasData ? submit : null,

7
packages/neon/neon_news/lib/widgets/articles_view.dart

@ -61,9 +61,7 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
items: [
FilterType.all,
FilterType.unread,
if (widget.bloc.listType == null) ...[
FilterType.starred,
],
if (widget.bloc.listType == null) FilterType.starred,
].map<DropdownMenuItem<FilterType>>(
(final a) {
late final String label;
@ -112,13 +110,12 @@ class _NewsArticlesViewState extends State<NewsArticlesView> {
: Theme.of(context).textTheme.titleMedium!.copyWith(color: Theme.of(context).disabledColor),
),
),
if (article.mediaThumbnail != null) ...[
if (article.mediaThumbnail != null)
NeonCachedImage.url(
url: article.mediaThumbnail!,
size: const Size(100, 50),
fit: BoxFit.cover,
),
],
],
),
subtitle: Row(

6
packages/neon/neon_news/lib/widgets/feeds_view.dart

@ -61,7 +61,7 @@ class NewsFeedsView extends StatelessWidget {
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (feed.updateErrorCount > 0) ...[
if (feed.updateErrorCount > 0)
IconButton(
onPressed: () async {
await showDialog(
@ -80,7 +80,6 @@ class NewsFeedsView extends StatelessWidget {
),
),
),
],
PopupMenuButton<NewsFeedAction>(
itemBuilder: (final context) => [
PopupMenuItem(
@ -95,12 +94,11 @@ class NewsFeedsView extends StatelessWidget {
value: NewsFeedAction.rename,
child: Text(AppLocalizations.of(context).actionRename),
),
if (folders.isNotEmpty) ...[
if (folders.isNotEmpty)
PopupMenuItem(
value: NewsFeedAction.move,
child: Text(AppLocalizations.of(context).actionMove),
),
],
],
onSelected: (final action) async {
switch (action) {

3
packages/neon/neon_notes/lib/dialogs/create_note.dart

@ -65,7 +65,7 @@ class _NotesCreateNoteDialogState extends State<NotesCreateNoteDialog> {
visible: notes.isLoading,
),
),
if (notes.hasData) ...[
if (notes.hasData)
NotesCategorySelect(
categories: notes.requireData.map((final note) => note.category).toSet().toList(),
onChanged: (final category) {
@ -73,7 +73,6 @@ class _NotesCreateNoteDialogState extends State<NotesCreateNoteDialog> {
},
onSubmitted: submit,
),
],
],
ElevatedButton(
onPressed: submit,

3
packages/neon/neon_notes/lib/dialogs/select_category.dart

@ -47,7 +47,7 @@ class _NotesSelectCategoryDialogState extends State<NotesSelectCategoryDialog> {
visible: notes.isLoading,
),
),
if (notes.hasData) ...[
if (notes.hasData)
NotesCategorySelect(
categories: notes.requireData.map((final note) => note.category).toSet().toList(),
initialValue: widget.initialCategory,
@ -56,7 +56,6 @@ class _NotesSelectCategoryDialogState extends State<NotesSelectCategoryDialog> {
},
onSubmitted: submit,
),
],
ElevatedButton(
onPressed: submit,
child: Text(AppLocalizations.of(context).noteSetCategory),

6
packages/nextcloud/lib/src/client.dart

@ -19,17 +19,15 @@ class NextcloudClient extends DynamiteClient {
baseHeaders: language != null ? {'Accept-Language': language} : null,
userAgent: userAgentOverride ?? appType.userAgent,
authentications: [
if (appPassword != null) ...[
if (appPassword != null)
DynamiteHttpBearerAuthentication(
token: appPassword,
),
],
if (loginName != null && (password ?? appPassword) != null) ...[
if (loginName != null && (password ?? appPassword) != null)
DynamiteHttpBasicAuthentication(
username: loginName,
password: (password ?? appPassword)!,
),
],
],
);

Loading…
Cancel
Save