diff --git a/analysis_options.yaml b/analysis_options.yaml index f9925ff6f..a6531e827 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -9,6 +9,11 @@ analyzer: # implicit-casts: false # implicit-dynamic: false +# cf https://github.com/dart-lang/dart_style/wiki/Configuration +formatter: + page_width: 240 + trailing_commas: preserve + linter: rules: # from 'flutter_lints', excluded diff --git a/lib/model/entry/extensions/catalog.dart b/lib/model/entry/extensions/catalog.dart index 5312f8655..900cfe8e5 100644 --- a/lib/model/entry/extensions/catalog.dart +++ b/lib/model/entry/extensions/catalog.dart @@ -4,8 +4,8 @@ import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/extensions/keys.dart'; import 'package:aves/model/entry/extensions/props.dart'; import 'package:aves/model/media/geotiff.dart'; -import 'package:aves/model/metadata/catalog.dart'; import 'package:aves/model/media/video/metadata.dart'; +import 'package:aves/model/metadata/catalog.dart'; import 'package:aves/ref/mime_types.dart'; import 'package:aves/services/common/services.dart'; import 'package:aves/services/metadata/svg_metadata_service.dart'; diff --git a/lib/model/filters/container/set_and.dart b/lib/model/filters/container/set_and.dart index a443c7f63..82b09fe90 100644 --- a/lib/model/filters/container/set_and.dart +++ b/lib/model/filters/container/set_and.dart @@ -1,7 +1,7 @@ import 'package:aves/model/filters/container/container.dart'; +import 'package:aves/model/filters/covered/location.dart'; import 'package:aves/model/filters/covered/stored_album.dart'; import 'package:aves/model/filters/filters.dart'; -import 'package:aves/model/filters/covered/location.dart'; import 'package:aves/theme/icons.dart'; import 'package:collection/collection.dart'; import 'package:flutter/widgets.dart'; diff --git a/lib/model/filters/covered/covered.dart b/lib/model/filters/covered/covered.dart index bea2e8506..6e4b2c6f4 100644 --- a/lib/model/filters/covered/covered.dart +++ b/lib/model/filters/covered/covered.dart @@ -14,4 +14,3 @@ mixin CoveredFilter on CollectionFilter { return super.color(context); } } - diff --git a/lib/model/filters/filters.dart b/lib/model/filters/filters.dart index 5aa653568..cfc8c608f 100644 --- a/lib/model/filters/filters.dart +++ b/lib/model/filters/filters.dart @@ -2,9 +2,11 @@ import 'dart:convert'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/filters/aspect_ratio.dart'; -import 'package:aves/model/filters/coordinate.dart'; import 'package:aves/model/filters/container/album_group.dart'; import 'package:aves/model/filters/container/dynamic_album.dart'; +import 'package:aves/model/filters/container/set_and.dart'; +import 'package:aves/model/filters/container/set_or.dart'; +import 'package:aves/model/filters/coordinate.dart'; import 'package:aves/model/filters/covered/location.dart'; import 'package:aves/model/filters/covered/stored_album.dart'; import 'package:aves/model/filters/covered/tag.dart'; @@ -17,8 +19,6 @@ import 'package:aves/model/filters/placeholder.dart'; import 'package:aves/model/filters/query.dart'; import 'package:aves/model/filters/rating.dart'; import 'package:aves/model/filters/recent.dart'; -import 'package:aves/model/filters/container/set_and.dart'; -import 'package:aves/model/filters/container/set_or.dart'; import 'package:aves/model/filters/trash.dart'; import 'package:aves/model/filters/type.dart'; import 'package:aves/model/filters/weekday.dart'; diff --git a/lib/services/media/media_fetch_service.dart b/lib/services/media/media_fetch_service.dart index 4d1bb10b0..057f544aa 100644 --- a/lib/services/media/media_fetch_service.dart +++ b/lib/services/media/media_fetch_service.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:math'; +import 'dart:ui' as ui; import 'package:aves/model/app/support.dart'; import 'package:aves/model/entry/entry.dart'; @@ -13,7 +14,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:streams_channel/streams_channel.dart'; -import 'dart:ui' as ui; abstract class MediaFetchService { Future getEntry(String uri, String? mimeType, {bool allowUnsized = false}); diff --git a/lib/theme/styles.dart b/lib/theme/styles.dart index bc679416d..94b0a21ac 100644 --- a/lib/theme/styles.dart +++ b/lib/theme/styles.dart @@ -1,4 +1,3 @@ - import 'package:flutter/painting.dart'; class AStyles { diff --git a/lib/widgets/collection/app_bar.dart b/lib/widgets/collection/app_bar.dart index ab89a3ac2..7cfa92611 100644 --- a/lib/widgets/collection/app_bar.dart +++ b/lib/widgets/collection/app_bar.dart @@ -4,9 +4,9 @@ import 'dart:math'; import 'package:aves/app_mode.dart'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/filters/container/dynamic_album.dart'; +import 'package:aves/model/filters/container/set_and.dart'; import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/query.dart'; -import 'package:aves/model/filters/container/set_and.dart'; import 'package:aves/model/filters/trash.dart'; import 'package:aves/model/query.dart'; import 'package:aves/model/selection.dart'; diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index 407f61315..53edf37fe 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -10,8 +10,8 @@ import 'package:aves/model/entry/extensions/multipage.dart'; import 'package:aves/model/entry/extensions/props.dart'; import 'package:aves/model/favourites.dart'; import 'package:aves/model/filters/container/dynamic_album.dart'; -import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/container/set_and.dart'; +import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/grouping/common.dart'; import 'package:aves/model/highlight.dart'; import 'package:aves/model/metadata/date_modifier.dart'; diff --git a/lib/widgets/common/app_bar/app_bar_subtitle.dart b/lib/widgets/common/app_bar/app_bar_subtitle.dart index 5a30727e9..4eb44ee5b 100644 --- a/lib/widgets/common/app_bar/app_bar_subtitle.dart +++ b/lib/widgets/common/app_bar/app_bar_subtitle.dart @@ -1,4 +1,3 @@ - import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/events.dart'; import 'package:aves/theme/durations.dart'; diff --git a/lib/widgets/common/basic/gestures/ink_well.dart b/lib/widgets/common/basic/gestures/ink_well.dart index ffc21b4cc..1c3c8546e 100644 --- a/lib/widgets/common/basic/gestures/ink_well.dart +++ b/lib/widgets/common/basic/gestures/ink_well.dart @@ -522,7 +522,7 @@ class _InkResponseStateWidget extends StatefulWidget { if (onSecondaryTap != null) 'secondary tap', if (onSecondaryTapUp != null) 'secondary tap up', if (onSecondaryTapDown != null) 'secondary tap down', - if (onSecondaryTapCancel != null) 'secondary tap cancel' + if (onSecondaryTapCancel != null) 'secondary tap cancel', ]; properties.add(IterableProperty('gestures', gestures, ifEmpty: '')); properties.add(DiagnosticsProperty('mouseCursor', mouseCursor)); @@ -544,10 +544,7 @@ enum _HighlightType { focus, } -class _InkResponseState extends State<_InkResponseStateWidget> - with AutomaticKeepAliveClientMixin<_InkResponseStateWidget> - implements _ParentInkResponseState -{ +class _InkResponseState extends State<_InkResponseStateWidget> with AutomaticKeepAliveClientMixin<_InkResponseStateWidget> implements _ParentInkResponseState { Set? _splashes; InteractiveInkFeature? _currentSplash; bool _hovering = false; @@ -578,6 +575,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> widget.parentState?.markChildInkResponsePressed(this, nowAnyPressed); } } + bool get _anyChildInkResponsePressed => _activeChildren.isNotEmpty; void activateOnIntent(Intent? intent) { @@ -611,7 +609,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> void handleStatesControllerChange() { // Force a rebuild to resolve widget.overlayColor, widget.mouseCursor - setState(() { }); + setState(() {}); } WidgetStatesController get statesController => widget.statesController ?? internalStatesController!; @@ -642,9 +640,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> } initStatesController(); } - if (widget.radius != oldWidget.radius || - widget.highlightShape != oldWidget.highlightShape || - widget.borderRadius != oldWidget.borderRadius) { + if (widget.radius != oldWidget.radius || widget.highlightShape != oldWidget.highlightShape || widget.borderRadius != oldWidget.borderRadius) { final InkHighlight? hoverHighlight = _highlights[_HighlightType.hover]; if (hoverHighlight != null) { hoverHighlight.dispose(); @@ -701,7 +697,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> } } - void updateHighlight(_HighlightType type, { required bool value, bool callOnHover = true }) { + void updateHighlight(_HighlightType type, {required bool value, bool callOnHover = true}) { final InkHighlight? highlight = _highlights[type]; void handleInkRemoval() { assert(_highlights[type] != null); @@ -717,7 +713,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> statesController.update(WidgetState.hovered, value); } case _HighlightType.focus: - // see handleFocusUpdate() + // see handleFocusUpdate() break; } @@ -730,9 +726,9 @@ class _InkResponseState extends State<_InkResponseStateWidget> if (value) { if (highlight == null) { - final Color resolvedOverlayColor = widget.overlayColor?.resolve(statesController.value) - ?? switch (type) { - // Use the backwards compatible defaults + final Color resolvedOverlayColor = widget.overlayColor?.resolve(statesController.value) ?? + switch (type) { + // Use the backwards compatible defaults _HighlightType.pressed => widget.highlightColor ?? Theme.of(context).highlightColor, _HighlightType.focus => widget.focusColor ?? Theme.of(context).focusColor, _HighlightType.hover => widget.hoverColor ?? Theme.of(context).hoverColor, @@ -789,7 +785,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> final MaterialInkController inkController = Material.of(context); final RenderBox referenceBox = context.findRenderObject()! as RenderBox; final Offset position = referenceBox.globalToLocal(globalPosition); - final Color color = widget.overlayColor?.resolve(statesController.value) ?? widget.splashColor ?? Theme.of(context).splashColor; + final Color color = widget.overlayColor?.resolve(statesController.value) ?? widget.splashColor ?? Theme.of(context).splashColor; final RectCallback? rectCallback = widget.containedInkWell ? widget.getRectCallback!(referenceBox) : null; final BorderRadius? borderRadius = widget.borderRadius; final ShapeBorder? customBorder = widget.customBorder; @@ -846,6 +842,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> } bool _hasFocus = false; + void handleFocusUpdate(bool hasFocus) { _hasFocus = hasFocus; // Set here rather than updateHighlight because this widget's @@ -978,21 +975,17 @@ class _InkResponseState extends State<_InkResponseStateWidget> } bool _primaryButtonEnabled(_InkResponseStateWidget widget) { - return widget.onTap != null - || widget.onDoubleTap != null - || widget.onLongPress != null - || widget.onTapUp != null - || widget.onTapDown != null; + return widget.onTap != null || widget.onDoubleTap != null || widget.onLongPress != null || widget.onTapUp != null || widget.onTapDown != null; } bool _secondaryButtonEnabled(_InkResponseStateWidget widget) { - return widget.onSecondaryTap != null - || widget.onSecondaryTapUp != null - || widget.onSecondaryTapDown != null; + return widget.onSecondaryTap != null || widget.onSecondaryTapUp != null || widget.onSecondaryTapDown != null; } bool get enabled => isWidgetEnabled(widget); + bool get _primaryEnabled => _primaryButtonEnabled(widget); + bool get _secondaryEnabled => _secondaryButtonEnabled(widget); void handleMouseEnter(PointerEnterEvent event) { @@ -1032,14 +1025,15 @@ class _InkResponseState extends State<_InkResponseStateWidget> final ThemeData theme = Theme.of(context); return switch (type) { - // The pressed state triggers a ripple (ink splash), per the current - // Material Design spec. A separate highlight is no longer used. - // See https://material.io/design/interaction/states.html#pressed + // The pressed state triggers a ripple (ink splash), per the current + // Material Design spec. A separate highlight is no longer used. + // See https://material.io/design/interaction/states.html#pressed _HighlightType.pressed => widget.overlayColor?.resolve(pressed) ?? widget.highlightColor ?? theme.highlightColor, - _HighlightType.focus => widget.overlayColor?.resolve(focused) ?? widget.focusColor ?? theme.focusColor, - _HighlightType.hover => widget.overlayColor?.resolve(hovered) ?? widget.hoverColor ?? theme.hoverColor, + _HighlightType.focus => widget.overlayColor?.resolve(focused) ?? widget.focusColor ?? theme.focusColor, + _HighlightType.hover => widget.overlayColor?.resolve(hovered) ?? widget.hoverColor ?? theme.hoverColor, }; } + for (final _HighlightType type in _highlights.keys) { _highlights[type]?.color = getHighlightColorForType(type); } @@ -1077,7 +1071,7 @@ class _InkResponseState extends State<_InkResponseStateWidget> onDoubleTap: widget.onDoubleTap != null ? handleDoubleTap : null, onLongPress: widget.onLongPress != null ? handleLongPress : null, onSecondaryTapDown: _secondaryEnabled ? handleSecondaryTapDown : null, - onSecondaryTapUp: _secondaryEnabled ? handleSecondaryTapUp: null, + onSecondaryTapUp: _secondaryEnabled ? handleSecondaryTapUp : null, onSecondaryTap: _secondaryEnabled ? handleSecondaryTap : null, onSecondaryTapCancel: _secondaryEnabled ? handleSecondaryTapCancel : null, behavior: HitTestBehavior.opaque, diff --git a/lib/widgets/common/grid/sliver.dart b/lib/widgets/common/grid/sliver.dart index 299e70134..3d7ed7502 100644 --- a/lib/widgets/common/grid/sliver.dart +++ b/lib/widgets/common/grid/sliver.dart @@ -71,7 +71,7 @@ class _RenderSliverKnownExtentBoxAdaptor extends RenderSliverMultiBoxAdaptor { _RenderSliverKnownExtentBoxAdaptor({ required super.childManager, required List sectionLayouts, - }) : _sectionLayouts = sectionLayouts; + }) : _sectionLayouts = sectionLayouts; SectionLayout? sectionAtIndex(int index) => sectionLayouts.firstWhereOrNull((section) => section.hasChild(index)); diff --git a/lib/widgets/common/search/delegate.dart b/lib/widgets/common/search/delegate.dart index da4176455..e48a21f5b 100644 --- a/lib/widgets/common/search/delegate.dart +++ b/lib/widgets/common/search/delegate.dart @@ -43,10 +43,12 @@ abstract class AvesSearchDelegate extends SearchDelegate { final animate = context.read().animate; return canPop ? IconButton( - icon: animate ? AnimatedIcon( - icon: AnimatedIcons.menu_arrow, - progress: transitionAnimation, - ): const Icon(Icons.arrow_back), + icon: animate + ? AnimatedIcon( + icon: AnimatedIcons.menu_arrow, + progress: transitionAnimation, + ) + : const Icon(Icons.arrow_back), onPressed: () => goBack(context), tooltip: MaterialLocalizations.of(context).backButtonTooltip, ) diff --git a/lib/widgets/editor/entry_editor_page.dart b/lib/widgets/editor/entry_editor_page.dart index 907afe33e..87eca7848 100644 --- a/lib/widgets/editor/entry_editor_page.dart +++ b/lib/widgets/editor/entry_editor_page.dart @@ -118,7 +118,7 @@ class _ImageEditorPageState extends State { } void _onActionChanged() { - switch(_actionNotifier.value) { + switch (_actionNotifier.value) { case EditorAction.transform: _transformController.reset(); _marginNotifier.value = Cropper.imageMargin; diff --git a/lib/widgets/settings/language/language.dart b/lib/widgets/settings/language/language.dart index b0e6730b1..3bba84db9 100644 --- a/lib/widgets/settings/language/language.dart +++ b/lib/widgets/settings/language/language.dart @@ -82,8 +82,8 @@ class SettingsTileLanguageNumerals extends SettingsTile { @override Widget build(BuildContext context) => SettingsSwitchListTile( - selector: (context, s) => s.forceWesternArabicNumerals, - onChanged: (v) => settings.forceWesternArabicNumerals = v, - title: title(context), - ); + selector: (context, s) => s.forceWesternArabicNumerals, + onChanged: (v) => settings.forceWesternArabicNumerals = v, + title: title(context), + ); }