minor
This commit is contained in:
parent
1374b8d492
commit
beb65a8d51
7 changed files with 24 additions and 5 deletions
|
@ -284,7 +284,7 @@ This change eventually prevents building the app with Flutter v3.3.3.
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
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
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.EnableImpeller"
|
android:name="io.flutter.embedding.android.EnableImpeller"
|
||||||
android:value="false" />
|
android:value="false" />
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:aves/model/source/enums/enums.dart';
|
||||||
import 'package:aves/model/vaults/vaults.dart';
|
import 'package:aves/model/vaults/vaults.dart';
|
||||||
import 'package:aves/services/common/services.dart';
|
import 'package:aves/services/common/services.dart';
|
||||||
import 'package:aves/utils/android_file_utils.dart';
|
import 'package:aves/utils/android_file_utils.dart';
|
||||||
|
import 'package:aves/utils/file_utils.dart';
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
@ -201,7 +202,8 @@ class MediaStoreSource extends CollectionSource {
|
||||||
// so we manually notify change for potential home screen filters
|
// so we manually notify change for potential home screen filters
|
||||||
notifyAlbumsChanged();
|
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'),
|
onError: (error) => debugPrint('$runtimeType stream error=$error'),
|
||||||
);
|
);
|
||||||
|
|
|
@ -256,7 +256,10 @@ class _EntryLeafletMapState<T> extends State<EntryLeafletMap<T>> with TickerProv
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _resetRotation() async {
|
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)));
|
await _animateCamera((animation) => _leafletMapController.rotate(rotationTween.evaluate(animation)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,13 @@ import 'package:aves/widgets/viewer/entry_viewer_page.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin {
|
class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin {
|
||||||
|
final bool enabled;
|
||||||
final AvesEntry entry;
|
final AvesEntry entry;
|
||||||
final Widget child;
|
final Widget child;
|
||||||
|
|
||||||
const EmbeddedDataOpener({
|
const EmbeddedDataOpener({
|
||||||
super.key,
|
super.key,
|
||||||
|
required this.enabled,
|
||||||
required this.entry,
|
required this.entry,
|
||||||
required this.child,
|
required this.child,
|
||||||
});
|
});
|
||||||
|
@ -25,8 +27,11 @@ class EmbeddedDataOpener extends StatelessWidget with FeedbackMixin {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return NotificationListener<OpenEmbeddedDataNotification>(
|
return NotificationListener<OpenEmbeddedDataNotification>(
|
||||||
onNotification: (notification) {
|
onNotification: (notification) {
|
||||||
_openEmbeddedData(context, notification);
|
if (enabled) {
|
||||||
return true;
|
_openEmbeddedData(context, notification);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
},
|
},
|
||||||
child: child,
|
child: child,
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import 'package:aves/app_mode.dart';
|
import 'package:aves/app_mode.dart';
|
||||||
import 'package:aves/model/actions/entry_actions.dart';
|
import 'package:aves/model/actions/entry_actions.dart';
|
||||||
import 'package:aves/model/entry.dart';
|
import 'package:aves/model/entry.dart';
|
||||||
|
import 'package:aves/model/selection.dart';
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/model/source/collection_lens.dart';
|
import 'package:aves/model/source/collection_lens.dart';
|
||||||
import 'package:aves/theme/durations.dart';
|
import 'package:aves/theme/durations.dart';
|
||||||
|
@ -104,12 +105,14 @@ class InfoAppBar extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _goToSearch(BuildContext context) {
|
void _goToSearch(BuildContext context) {
|
||||||
|
final isSelecting = context.read<Selection<AvesEntry>?>()?.isSelecting ?? false;
|
||||||
showSearch(
|
showSearch(
|
||||||
context: context,
|
context: context,
|
||||||
delegate: InfoSearchDelegate(
|
delegate: InfoSearchDelegate(
|
||||||
searchFieldLabel: context.l10n.viewerInfoSearchFieldLabel,
|
searchFieldLabel: context.l10n.viewerInfoSearchFieldLabel,
|
||||||
entry: entry,
|
entry: entry,
|
||||||
metadataNotifier: metadataNotifier,
|
metadataNotifier: metadataNotifier,
|
||||||
|
isSelecting: isSelecting,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'package:aves/model/actions/entry_actions.dart';
|
||||||
import 'package:aves/model/actions/events.dart';
|
import 'package:aves/model/actions/events.dart';
|
||||||
import 'package:aves/model/entry.dart';
|
import 'package:aves/model/entry.dart';
|
||||||
import 'package:aves/model/filters/filters.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/model/source/collection_lens.dart';
|
||||||
import 'package:aves/theme/durations.dart';
|
import 'package:aves/theme/durations.dart';
|
||||||
import 'package:aves/widgets/common/basic/insets.dart';
|
import 'package:aves/widgets/common/basic/insets.dart';
|
||||||
|
@ -67,9 +68,11 @@ class _InfoPageState extends State<InfoPage> {
|
||||||
builder: (context, mainEntry, child) {
|
builder: (context, mainEntry, child) {
|
||||||
if (mainEntry == null) return const SizedBox();
|
if (mainEntry == null) return const SizedBox();
|
||||||
|
|
||||||
|
final isSelecting = context.select<Selection<AvesEntry>?, bool>((v) => v?.isSelecting ?? false);
|
||||||
Widget _buildContent({AvesEntry? pageEntry}) {
|
Widget _buildContent({AvesEntry? pageEntry}) {
|
||||||
final targetEntry = pageEntry ?? mainEntry;
|
final targetEntry = pageEntry ?? mainEntry;
|
||||||
return EmbeddedDataOpener(
|
return EmbeddedDataOpener(
|
||||||
|
enabled: !isSelecting,
|
||||||
entry: targetEntry,
|
entry: targetEntry,
|
||||||
child: _InfoPageContent(
|
child: _InfoPageContent(
|
||||||
collection: widget.collection,
|
collection: widget.collection,
|
||||||
|
|
|
@ -12,6 +12,7 @@ import 'package:flutter/material.dart';
|
||||||
class InfoSearchDelegate extends SearchDelegate {
|
class InfoSearchDelegate extends SearchDelegate {
|
||||||
final AvesEntry entry;
|
final AvesEntry entry;
|
||||||
final ValueNotifier<Map<String, MetadataDirectory>> metadataNotifier;
|
final ValueNotifier<Map<String, MetadataDirectory>> metadataNotifier;
|
||||||
|
final bool isSelecting;
|
||||||
|
|
||||||
Map<String, MetadataDirectory> get metadata => metadataNotifier.value;
|
Map<String, MetadataDirectory> get metadata => metadataNotifier.value;
|
||||||
|
|
||||||
|
@ -19,6 +20,7 @@ class InfoSearchDelegate extends SearchDelegate {
|
||||||
required String searchFieldLabel,
|
required String searchFieldLabel,
|
||||||
required this.entry,
|
required this.entry,
|
||||||
required this.metadataNotifier,
|
required this.metadataNotifier,
|
||||||
|
required this.isSelecting,
|
||||||
}) : super(
|
}) : super(
|
||||||
searchFieldLabel: searchFieldLabel,
|
searchFieldLabel: searchFieldLabel,
|
||||||
);
|
);
|
||||||
|
@ -113,6 +115,7 @@ class InfoSearchDelegate extends SearchDelegate {
|
||||||
text: context.l10n.viewerInfoSearchEmpty,
|
text: context.l10n.viewerInfoSearchEmpty,
|
||||||
)
|
)
|
||||||
: EmbeddedDataOpener(
|
: EmbeddedDataOpener(
|
||||||
|
enabled: !isSelecting,
|
||||||
entry: entry,
|
entry: entry,
|
||||||
child: ListView.builder(
|
child: ListView.builder(
|
||||||
padding: const EdgeInsets.all(8),
|
padding: const EdgeInsets.all(8),
|
||||||
|
|
Loading…
Reference in a new issue