This commit is contained in:
Thibault Deckers 2023-03-10 11:46:36 +01:00
parent 1374b8d492
commit beb65a8d51
7 changed files with 24 additions and 5 deletions

View file

@ -284,7 +284,7 @@ This change eventually prevents building the app with Flutter v3.3.3.
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<!-- as of Flutter v3.3.0, background blur & icon shading fail with Impeller -->
<!-- as of Flutter v3.7.7, background blur yields black screen with Impeller -->
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />

View file

@ -11,6 +11,7 @@ import 'package:aves/model/source/enums/enums.dart';
import 'package:aves/model/vaults/vaults.dart';
import 'package:aves/services/common/services.dart';
import 'package:aves/utils/android_file_utils.dart';
import 'package:aves/utils/file_utils.dart';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
@ -201,7 +202,8 @@ class MediaStoreSource extends CollectionSource {
// so we manually notify change for potential home screen filters
notifyAlbumsChanged();
debugPrint('$runtimeType refresh ${stopwatch.elapsed} done for ${knownEntries.length} known, ${allNewEntries.length} new, ${removedEntries.length} removed');
debugPrint('$runtimeType refresh ${stopwatch.elapsed} done');
unawaited(reportService.log('Source refresh complete in ${stopwatch.elapsed.inSeconds}s for ${knownEntries.length} known, ${allNewEntries.length} new, ${removedEntries.length} removed'));
},
onError: (error) => debugPrint('$runtimeType stream error=$error'),
);

View file

@ -256,7 +256,10 @@ class _EntryLeafletMapState<T> extends State<EntryLeafletMap<T>> with TickerProv
}
Future<void> _resetRotation() async {
final rotationTween = Tween<double>(begin: _leafletMapController.rotation, end: 0);
final rotation = _leafletMapController.rotation;
// prevent multiple turns
final begin = (rotation.abs() % 360) * rotation.sign;
final rotationTween = Tween<double>(begin: begin, end: 0);
await _animateCamera((animation) => _leafletMapController.rotate(rotationTween.evaluate(animation)));
}

View file

@ -12,11 +12,13 @@ import 'package:aves/widgets/viewer/entry_viewer_page.dart';
import 'package:flutter/material.dart';
class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin {
final bool enabled;
final AvesEntry entry;
final Widget child;
const EmbeddedDataOpener({
super.key,
required this.enabled,
required this.entry,
required this.child,
});
@ -25,8 +27,11 @@ class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin {
Widget build(BuildContext context) {
return NotificationListener<OpenEmbeddedDataNotification>(
onNotification: (notification) {
_openEmbeddedData(context, notification);
return true;
if (enabled) {
_openEmbeddedData(context, notification);
return true;
}
return false;
},
child: child,
);

View file

@ -1,6 +1,7 @@
import 'package:aves/app_mode.dart';
import 'package:aves/model/actions/entry_actions.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/selection.dart';
import 'package:aves/model/settings/settings.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/theme/durations.dart';
@ -104,12 +105,14 @@ class InfoAppBar extends StatelessWidget {
}
void _goToSearch(BuildContext context) {
final isSelecting = context.read<Selection<AvesEntry>?>()?.isSelecting ?? false;
showSearch(
context: context,
delegate: InfoSearchDelegate(
searchFieldLabel: context.l10n.viewerInfoSearchFieldLabel,
entry: entry,
metadataNotifier: metadataNotifier,
isSelecting: isSelecting,
),
);
}

View file

@ -4,6 +4,7 @@ import 'package:aves/model/actions/entry_actions.dart';
import 'package:aves/model/actions/events.dart';
import 'package:aves/model/entry.dart';
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/selection.dart';
import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/theme/durations.dart';
import 'package:aves/widgets/common/basic/insets.dart';
@ -67,9 +68,11 @@ class _InfoPageState extends State<InfoPage> {
builder: (context, mainEntry, child) {
if (mainEntry == null) return const SizedBox();
final isSelecting = context.select<Selection<AvesEntry>?, bool>((v) => v?.isSelecting ?? false);
Widget _buildContent({AvesEntry? pageEntry}) {
final targetEntry = pageEntry ?? mainEntry;
return EmbeddedDataOpener(
enabled: !isSelecting,
entry: targetEntry,
child: _InfoPageContent(
collection: widget.collection,

View file

@ -12,6 +12,7 @@ import 'package:flutter/material.dart';
class InfoSearchDelegate extends SearchDelegate {
final AvesEntry entry;
final ValueNotifier<Map<String, MetadataDirectory>> metadataNotifier;
final bool isSelecting;
Map<String, MetadataDirectory> get metadata => metadataNotifier.value;
@ -19,6 +20,7 @@ class InfoSearchDelegate extends SearchDelegate {
required String searchFieldLabel,
required this.entry,
required this.metadataNotifier,
required this.isSelecting,
}) : super(
searchFieldLabel: searchFieldLabel,
);
@ -113,6 +115,7 @@ class InfoSearchDelegate extends SearchDelegate {
text: context.l10n.viewerInfoSearchEmpty,
)
: EmbeddedDataOpener(
enabled: !isSelecting,
entry: entry,
child: ListView.builder(
padding: const EdgeInsets.all(8),