This commit is contained in:
Thibault Deckers 2025-06-02 22:25:42 +02:00
parent 2e775b3906
commit ca2d2c2026
15 changed files with 48 additions and 50 deletions

View file

@ -9,6 +9,11 @@ analyzer:
# implicit-casts: false # implicit-casts: false
# implicit-dynamic: false # implicit-dynamic: false
# cf https://github.com/dart-lang/dart_style/wiki/Configuration
formatter:
page_width: 240
trailing_commas: preserve
linter: linter:
rules: rules:
# from 'flutter_lints', excluded # from 'flutter_lints', excluded

View file

@ -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/keys.dart';
import 'package:aves/model/entry/extensions/props.dart'; import 'package:aves/model/entry/extensions/props.dart';
import 'package:aves/model/media/geotiff.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/media/video/metadata.dart';
import 'package:aves/model/metadata/catalog.dart';
import 'package:aves/ref/mime_types.dart'; import 'package:aves/ref/mime_types.dart';
import 'package:aves/services/common/services.dart'; import 'package:aves/services/common/services.dart';
import 'package:aves/services/metadata/svg_metadata_service.dart'; import 'package:aves/services/metadata/svg_metadata_service.dart';

View file

@ -1,7 +1,7 @@
import 'package:aves/model/filters/container/container.dart'; 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/covered/stored_album.dart';
import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/filters/covered/location.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';

View file

@ -14,4 +14,3 @@ mixin CoveredFilter on CollectionFilter {
return super.color(context); return super.color(context);
} }
} }

View file

@ -2,9 +2,11 @@ import 'dart:convert';
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/filters/aspect_ratio.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/album_group.dart';
import 'package:aves/model/filters/container/dynamic_album.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/location.dart';
import 'package:aves/model/filters/covered/stored_album.dart'; import 'package:aves/model/filters/covered/stored_album.dart';
import 'package:aves/model/filters/covered/tag.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/query.dart';
import 'package:aves/model/filters/rating.dart'; import 'package:aves/model/filters/rating.dart';
import 'package:aves/model/filters/recent.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/trash.dart';
import 'package:aves/model/filters/type.dart'; import 'package:aves/model/filters/type.dart';
import 'package:aves/model/filters/weekday.dart'; import 'package:aves/model/filters/weekday.dart';

View file

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:math'; import 'dart:math';
import 'dart:ui' as ui;
import 'package:aves/model/app/support.dart'; import 'package:aves/model/app/support.dart';
import 'package:aves/model/entry/entry.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/foundation.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:streams_channel/streams_channel.dart'; import 'package:streams_channel/streams_channel.dart';
import 'dart:ui' as ui;
abstract class MediaFetchService { abstract class MediaFetchService {
Future<AvesEntry?> getEntry(String uri, String? mimeType, {bool allowUnsized = false}); Future<AvesEntry?> getEntry(String uri, String? mimeType, {bool allowUnsized = false});

View file

@ -1,4 +1,3 @@
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
class AStyles { class AStyles {

View file

@ -4,9 +4,9 @@ import 'dart:math';
import 'package:aves/app_mode.dart'; import 'package:aves/app_mode.dart';
import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/filters/container/dynamic_album.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/filters.dart';
import 'package:aves/model/filters/query.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/filters/trash.dart';
import 'package:aves/model/query.dart'; import 'package:aves/model/query.dart';
import 'package:aves/model/selection.dart'; import 'package:aves/model/selection.dart';

View file

@ -10,8 +10,8 @@ import 'package:aves/model/entry/extensions/multipage.dart';
import 'package:aves/model/entry/extensions/props.dart'; import 'package:aves/model/entry/extensions/props.dart';
import 'package:aves/model/favourites.dart'; import 'package:aves/model/favourites.dart';
import 'package:aves/model/filters/container/dynamic_album.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/container/set_and.dart';
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/grouping/common.dart'; import 'package:aves/model/grouping/common.dart';
import 'package:aves/model/highlight.dart'; import 'package:aves/model/highlight.dart';
import 'package:aves/model/metadata/date_modifier.dart'; import 'package:aves/model/metadata/date_modifier.dart';

View file

@ -1,4 +1,3 @@
import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/collection_source.dart';
import 'package:aves/model/source/events.dart'; import 'package:aves/model/source/events.dart';
import 'package:aves/theme/durations.dart'; import 'package:aves/theme/durations.dart';

View file

@ -522,7 +522,7 @@ class _InkResponseStateWidget extends StatefulWidget {
if (onSecondaryTap != null) 'secondary tap', if (onSecondaryTap != null) 'secondary tap',
if (onSecondaryTapUp != null) 'secondary tap up', if (onSecondaryTapUp != null) 'secondary tap up',
if (onSecondaryTapDown != null) 'secondary tap down', if (onSecondaryTapDown != null) 'secondary tap down',
if (onSecondaryTapCancel != null) 'secondary tap cancel' if (onSecondaryTapCancel != null) 'secondary tap cancel',
]; ];
properties.add(IterableProperty<String>('gestures', gestures, ifEmpty: '<none>')); properties.add(IterableProperty<String>('gestures', gestures, ifEmpty: '<none>'));
properties.add(DiagnosticsProperty<MouseCursor>('mouseCursor', mouseCursor)); properties.add(DiagnosticsProperty<MouseCursor>('mouseCursor', mouseCursor));
@ -544,10 +544,7 @@ enum _HighlightType {
focus, focus,
} }
class _InkResponseState extends State<_InkResponseStateWidget> class _InkResponseState extends State<_InkResponseStateWidget> with AutomaticKeepAliveClientMixin<_InkResponseStateWidget> implements _ParentInkResponseState {
with AutomaticKeepAliveClientMixin<_InkResponseStateWidget>
implements _ParentInkResponseState
{
Set<InteractiveInkFeature>? _splashes; Set<InteractiveInkFeature>? _splashes;
InteractiveInkFeature? _currentSplash; InteractiveInkFeature? _currentSplash;
bool _hovering = false; bool _hovering = false;
@ -578,6 +575,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
widget.parentState?.markChildInkResponsePressed(this, nowAnyPressed); widget.parentState?.markChildInkResponsePressed(this, nowAnyPressed);
} }
} }
bool get _anyChildInkResponsePressed => _activeChildren.isNotEmpty; bool get _anyChildInkResponsePressed => _activeChildren.isNotEmpty;
void activateOnIntent(Intent? intent) { void activateOnIntent(Intent? intent) {
@ -611,7 +609,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
void handleStatesControllerChange() { void handleStatesControllerChange() {
// Force a rebuild to resolve widget.overlayColor, widget.mouseCursor // Force a rebuild to resolve widget.overlayColor, widget.mouseCursor
setState(() { }); setState(() {});
} }
WidgetStatesController get statesController => widget.statesController ?? internalStatesController!; WidgetStatesController get statesController => widget.statesController ?? internalStatesController!;
@ -642,9 +640,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
} }
initStatesController(); initStatesController();
} }
if (widget.radius != oldWidget.radius || if (widget.radius != oldWidget.radius || widget.highlightShape != oldWidget.highlightShape || widget.borderRadius != oldWidget.borderRadius) {
widget.highlightShape != oldWidget.highlightShape ||
widget.borderRadius != oldWidget.borderRadius) {
final InkHighlight? hoverHighlight = _highlights[_HighlightType.hover]; final InkHighlight? hoverHighlight = _highlights[_HighlightType.hover];
if (hoverHighlight != null) { if (hoverHighlight != null) {
hoverHighlight.dispose(); 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]; final InkHighlight? highlight = _highlights[type];
void handleInkRemoval() { void handleInkRemoval() {
assert(_highlights[type] != null); assert(_highlights[type] != null);
@ -730,8 +726,8 @@ class _InkResponseState extends State<_InkResponseStateWidget>
if (value) { if (value) {
if (highlight == null) { if (highlight == null) {
final Color resolvedOverlayColor = widget.overlayColor?.resolve(statesController.value) final Color resolvedOverlayColor = widget.overlayColor?.resolve(statesController.value) ??
?? switch (type) { switch (type) {
// Use the backwards compatible defaults // Use the backwards compatible defaults
_HighlightType.pressed => widget.highlightColor ?? Theme.of(context).highlightColor, _HighlightType.pressed => widget.highlightColor ?? Theme.of(context).highlightColor,
_HighlightType.focus => widget.focusColor ?? Theme.of(context).focusColor, _HighlightType.focus => widget.focusColor ?? Theme.of(context).focusColor,
@ -846,6 +842,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
} }
bool _hasFocus = false; bool _hasFocus = false;
void handleFocusUpdate(bool hasFocus) { void handleFocusUpdate(bool hasFocus) {
_hasFocus = hasFocus; _hasFocus = hasFocus;
// Set here rather than updateHighlight because this widget's // Set here rather than updateHighlight because this widget's
@ -978,21 +975,17 @@ class _InkResponseState extends State<_InkResponseStateWidget>
} }
bool _primaryButtonEnabled(_InkResponseStateWidget widget) { bool _primaryButtonEnabled(_InkResponseStateWidget widget) {
return widget.onTap != null return widget.onTap != null || widget.onDoubleTap != null || widget.onLongPress != null || widget.onTapUp != null || widget.onTapDown != null;
|| widget.onDoubleTap != null
|| widget.onLongPress != null
|| widget.onTapUp != null
|| widget.onTapDown != null;
} }
bool _secondaryButtonEnabled(_InkResponseStateWidget widget) { bool _secondaryButtonEnabled(_InkResponseStateWidget widget) {
return widget.onSecondaryTap != null return widget.onSecondaryTap != null || widget.onSecondaryTapUp != null || widget.onSecondaryTapDown != null;
|| widget.onSecondaryTapUp != null
|| widget.onSecondaryTapDown != null;
} }
bool get enabled => isWidgetEnabled(widget); bool get enabled => isWidgetEnabled(widget);
bool get _primaryEnabled => _primaryButtonEnabled(widget); bool get _primaryEnabled => _primaryButtonEnabled(widget);
bool get _secondaryEnabled => _secondaryButtonEnabled(widget); bool get _secondaryEnabled => _secondaryButtonEnabled(widget);
void handleMouseEnter(PointerEnterEvent event) { void handleMouseEnter(PointerEnterEvent event) {
@ -1040,6 +1033,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
_HighlightType.hover => widget.overlayColor?.resolve(hovered) ?? widget.hoverColor ?? theme.hoverColor, _HighlightType.hover => widget.overlayColor?.resolve(hovered) ?? widget.hoverColor ?? theme.hoverColor,
}; };
} }
for (final _HighlightType type in _highlights.keys) { for (final _HighlightType type in _highlights.keys) {
_highlights[type]?.color = getHighlightColorForType(type); _highlights[type]?.color = getHighlightColorForType(type);
} }
@ -1077,7 +1071,7 @@ class _InkResponseState extends State<_InkResponseStateWidget>
onDoubleTap: widget.onDoubleTap != null ? handleDoubleTap : null, onDoubleTap: widget.onDoubleTap != null ? handleDoubleTap : null,
onLongPress: widget.onLongPress != null ? handleLongPress : null, onLongPress: widget.onLongPress != null ? handleLongPress : null,
onSecondaryTapDown: _secondaryEnabled ? handleSecondaryTapDown : null, onSecondaryTapDown: _secondaryEnabled ? handleSecondaryTapDown : null,
onSecondaryTapUp: _secondaryEnabled ? handleSecondaryTapUp: null, onSecondaryTapUp: _secondaryEnabled ? handleSecondaryTapUp : null,
onSecondaryTap: _secondaryEnabled ? handleSecondaryTap : null, onSecondaryTap: _secondaryEnabled ? handleSecondaryTap : null,
onSecondaryTapCancel: _secondaryEnabled ? handleSecondaryTapCancel : null, onSecondaryTapCancel: _secondaryEnabled ? handleSecondaryTapCancel : null,
behavior: HitTestBehavior.opaque, behavior: HitTestBehavior.opaque,

View file

@ -43,10 +43,12 @@ abstract class AvesSearchDelegate extends SearchDelegate {
final animate = context.read<Settings>().animate; final animate = context.read<Settings>().animate;
return canPop return canPop
? IconButton( ? IconButton(
icon: animate ? AnimatedIcon( icon: animate
? AnimatedIcon(
icon: AnimatedIcons.menu_arrow, icon: AnimatedIcons.menu_arrow,
progress: transitionAnimation, progress: transitionAnimation,
): const Icon(Icons.arrow_back), )
: const Icon(Icons.arrow_back),
onPressed: () => goBack(context), onPressed: () => goBack(context),
tooltip: MaterialLocalizations.of(context).backButtonTooltip, tooltip: MaterialLocalizations.of(context).backButtonTooltip,
) )

View file

@ -118,7 +118,7 @@ class _ImageEditorPageState extends State<ImageEditorPage> {
} }
void _onActionChanged() { void _onActionChanged() {
switch(_actionNotifier.value) { switch (_actionNotifier.value) {
case EditorAction.transform: case EditorAction.transform:
_transformController.reset(); _transformController.reset();
_marginNotifier.value = Cropper.imageMargin; _marginNotifier.value = Cropper.imageMargin;