minor fixes

This commit is contained in:
Thibault Deckers 2021-11-29 15:38:19 +09:00
parent 35958d87fd
commit a636c444e1
10 changed files with 26 additions and 7 deletions

View file

@ -56,7 +56,7 @@ android {
// minSdkVersion constraints: // minSdkVersion constraints:
// - Flutter & other plugins: 16 // - Flutter & other plugins: 16
// - google_maps_flutter v2.1.1: 20 // - google_maps_flutter v2.1.1: 20
minSdkVersion 16 minSdkVersion 19
targetSdkVersion 31 targetSdkVersion 31
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()
versionName flutterVersionName versionName flutterVersionName

View file

@ -26,7 +26,7 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
"canGrantDirectoryAccess" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP), "canGrantDirectoryAccess" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP),
"canPinShortcut" to ShortcutManagerCompat.isRequestPinShortcutSupported(context), "canPinShortcut" to ShortcutManagerCompat.isRequestPinShortcutSupported(context),
"canPrint" to (sdkInt >= Build.VERSION_CODES.KITKAT), "canPrint" to (sdkInt >= Build.VERSION_CODES.KITKAT),
"canRenderEmojis" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP), "canRenderFlagEmojis" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP),
// as of google_maps_flutter v2.1.1, minSDK is 20 because of default PlatformView usage, // as of google_maps_flutter v2.1.1, minSDK is 20 because of default PlatformView usage,
// but using hybrid composition would make it usable on API 19 too, // but using hybrid composition would make it usable on API 19 too,
// cf https://github.com/flutter/flutter/issues/23728 // cf https://github.com/flutter/flutter/issues/23728

View file

@ -5,7 +5,7 @@ final Device device = Device._private();
class Device { class Device {
late final String _userAgent; late final String _userAgent;
late final bool _canGrantDirectoryAccess, _canPinShortcut, _canPrint, _canRenderEmojis, _canRenderGoogleMaps; late final bool _canGrantDirectoryAccess, _canPinShortcut, _canPrint, _canRenderFlagEmojis, _canRenderGoogleMaps;
late final bool _hasFilePicker, _showPinShortcutFeedback; late final bool _hasFilePicker, _showPinShortcutFeedback;
String get userAgent => _userAgent; String get userAgent => _userAgent;
@ -16,7 +16,7 @@ class Device {
bool get canPrint => _canPrint; bool get canPrint => _canPrint;
bool get canRenderEmojis => _canRenderEmojis; bool get canRenderFlagEmojis => _canRenderFlagEmojis;
bool get canRenderGoogleMaps => _canRenderGoogleMaps; bool get canRenderGoogleMaps => _canRenderGoogleMaps;
@ -35,7 +35,7 @@ class Device {
_canGrantDirectoryAccess = capabilities['canGrantDirectoryAccess'] ?? false; _canGrantDirectoryAccess = capabilities['canGrantDirectoryAccess'] ?? false;
_canPinShortcut = capabilities['canPinShortcut'] ?? false; _canPinShortcut = capabilities['canPinShortcut'] ?? false;
_canPrint = capabilities['canPrint'] ?? false; _canPrint = capabilities['canPrint'] ?? false;
_canRenderEmojis = capabilities['canRenderEmojis'] ?? false; _canRenderFlagEmojis = capabilities['canRenderFlagEmojis'] ?? false;
_canRenderGoogleMaps = capabilities['canRenderGoogleMaps'] ?? false; _canRenderGoogleMaps = capabilities['canRenderGoogleMaps'] ?? false;
_hasFilePicker = capabilities['hasFilePicker'] ?? false; _hasFilePicker = capabilities['hasFilePicker'] ?? false;
_showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false; _showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false;

View file

@ -59,7 +59,7 @@ class LocationFilter extends CollectionFilter {
@override @override
Widget iconBuilder(BuildContext context, double size, {bool showGenericIcon = true, bool embossed = false}) { Widget iconBuilder(BuildContext context, double size, {bool showGenericIcon = true, bool embossed = false}) {
if (_countryCode != null && device.canRenderEmojis) { if (_countryCode != null && device.canRenderFlagEmojis) {
final flag = countryCodeToFlag(_countryCode); final flag = countryCodeToFlag(_countryCode);
// as of Flutter v1.22.3, emoji shadows are rendered as colorful duplicates, // as of Flutter v1.22.3, emoji shadows are rendered as colorful duplicates,
// not filled with the shadow color as expected, so we remove them // not filled with the shadow color as expected, so we remove them

View file

@ -18,7 +18,7 @@ import 'package:provider/provider.dart';
typedef FilterCallback = void Function(CollectionFilter filter); typedef FilterCallback = void Function(CollectionFilter filter);
typedef OffsetFilterCallback = void Function(BuildContext context, CollectionFilter filter, Offset tapPosition); typedef OffsetFilterCallback = void Function(BuildContext context, CollectionFilter filter, Offset tapPosition);
enum HeroType { always, onTap } enum HeroType { always, onTap, never }
@immutable @immutable
class AvesFilterDecoration { class AvesFilterDecoration {

View file

@ -4,6 +4,7 @@ import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/collection_source.dart';
import 'package:aves/theme/icons.dart'; import 'package:aves/theme/icons.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
import 'package:aves/widgets/dialogs/aves_dialog.dart'; import 'package:aves/widgets/dialogs/aves_dialog.dart';
import 'package:aves/widgets/dialogs/item_pick_dialog.dart'; import 'package:aves/widgets/dialogs/item_pick_dialog.dart';
@ -96,6 +97,7 @@ class _CoverSelectionDialogState extends State<CoverSelectionDialog> {
extent: extent, extent: extent,
coverEntry: _isCustom ? _customEntry : _recentEntry, coverEntry: _isCustom ? _customEntry : _recentEntry,
onTap: (filter) => _pickEntry(), onTap: (filter) => _pickEntry(),
heroType: HeroType.never,
), ),
), ),
], ],

View file

@ -12,6 +12,7 @@ import 'package:aves/widgets/common/app_bar_subtitle.dart';
import 'package:aves/widgets/common/basic/menu.dart'; import 'package:aves/widgets/common/basic/menu.dart';
import 'package:aves/widgets/common/basic/query_bar.dart'; import 'package:aves/widgets/common/basic/query_bar.dart';
import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/identity/empty.dart'; import 'package:aves/widgets/common/identity/empty.dart';
import 'package:aves/widgets/common/providers/selection_provider.dart'; import 'package:aves/widgets/common/providers/selection_provider.dart';
import 'package:aves/widgets/dialogs/filter_editors/create_album_dialog.dart'; import 'package:aves/widgets/dialogs/filter_editors/create_album_dialog.dart';
@ -79,6 +80,7 @@ class _AlbumPickPageState extends State<AlbumPickPage> {
text: context.l10n.albumEmpty, text: context.l10n.albumEmpty,
), ),
onTap: (filter) => Navigator.pop<String>(context, (filter as AlbumFilter).album), onTap: (filter) => Navigator.pop<String>(context, (filter as AlbumFilter).album),
heroType: HeroType.never,
), ),
); );
}, },

View file

@ -28,6 +28,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
final bool pinned; final bool pinned;
final String? banner; final String? banner;
final FilterCallback? onTap; final FilterCallback? onTap;
final HeroType heroType;
const CoveredFilterChip({ const CoveredFilterChip({
Key? key, Key? key,
@ -38,6 +39,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
this.pinned = false, this.pinned = false,
this.banner, this.banner,
this.onTap, this.onTap,
this.heroType = HeroType.onTap,
}) : thumbnailExtent = thumbnailExtent ?? extent, }) : thumbnailExtent = thumbnailExtent ?? extent,
super(key: key); super(key: key);
@ -138,6 +140,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
banner: banner, banner: banner,
details: _buildDetails(source, filter), details: _buildDetails(source, filter),
padding: titlePadding, padding: titlePadding,
heroType: heroType,
onTap: onTap, onTap: onTap,
onLongPress: null, onLongPress: null,
); );

View file

@ -51,6 +51,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
final QueryTest<T>? applyQuery; final QueryTest<T>? applyQuery;
final Widget Function() emptyBuilder; final Widget Function() emptyBuilder;
final FilterCallback onTap; final FilterCallback onTap;
final HeroType heroType;
const FilterGridPage({ const FilterGridPage({
Key? key, Key? key,
@ -66,6 +67,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
this.applyQuery, this.applyQuery,
required this.emptyBuilder, required this.emptyBuilder,
required this.onTap, required this.onTap,
required this.heroType,
}) : super(key: key); }) : super(key: key);
static const Color detailColor = Color(0xFFE0E0E0); static const Color detailColor = Color(0xFFE0E0E0);
@ -104,6 +106,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
applyQuery: applyQuery, applyQuery: applyQuery,
emptyBuilder: emptyBuilder, emptyBuilder: emptyBuilder,
onTap: onTap, onTap: onTap,
heroType: heroType,
), ),
), ),
), ),
@ -129,6 +132,7 @@ class FilterGrid<T extends CollectionFilter> extends StatefulWidget {
final QueryTest<T>? applyQuery; final QueryTest<T>? applyQuery;
final Widget Function() emptyBuilder; final Widget Function() emptyBuilder;
final FilterCallback onTap; final FilterCallback onTap;
final HeroType heroType;
const FilterGrid({ const FilterGrid({
Key? key, Key? key,
@ -144,6 +148,7 @@ class FilterGrid<T extends CollectionFilter> extends StatefulWidget {
required this.applyQuery, required this.applyQuery,
required this.emptyBuilder, required this.emptyBuilder,
required this.onTap, required this.onTap,
required this.heroType,
}) : super(key: key); }) : super(key: key);
@override @override
@ -181,6 +186,7 @@ class _FilterGridState<T extends CollectionFilter> extends State<FilterGrid<T>>
applyQuery: widget.applyQuery, applyQuery: widget.applyQuery,
emptyBuilder: widget.emptyBuilder, emptyBuilder: widget.emptyBuilder,
onTap: widget.onTap, onTap: widget.onTap,
heroType: widget.heroType,
), ),
); );
} }
@ -196,6 +202,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
final Widget Function() emptyBuilder; final Widget Function() emptyBuilder;
final QueryTest<T>? applyQuery; final QueryTest<T>? applyQuery;
final FilterCallback onTap; final FilterCallback onTap;
final HeroType heroType;
final ValueNotifier<double> _appBarHeightNotifier = ValueNotifier(0); final ValueNotifier<double> _appBarHeightNotifier = ValueNotifier(0);
@ -212,6 +219,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
required this.applyQuery, required this.applyQuery,
required this.emptyBuilder, required this.emptyBuilder,
required this.onTap, required this.onTap,
required this.heroType,
}) : super(key: key) { }) : super(key: key) {
_appBarHeightNotifier.value = appBarHeight; _appBarHeightNotifier.value = appBarHeight;
} }
@ -275,6 +283,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
pinned: pinnedFilters.contains(filter), pinned: pinnedFilters.contains(filter),
banner: newFilters.contains(filter) ? context.l10n.newFilterBanner : null, banner: newFilters.contains(filter) ? context.l10n.newFilterBanner : null,
onTap: onTap, onTap: onTap,
heroType: heroType,
), ),
), ),
); );
@ -432,6 +441,7 @@ class _FilterScaler<T extends CollectionFilter> extends StatelessWidget {
extent: tileSize.width, extent: tileSize.width,
thumbnailExtent: context.read<TileExtentController>().effectiveExtentMax, thumbnailExtent: context.read<TileExtentController>().effectiveExtentMax,
pinned: pinnedFilters.contains(filter), pinned: pinnedFilters.contains(filter),
heroType: HeroType.never,
); );
}, },
highlightItem: (item) => item.filter, highlightItem: (item) => item.filter,

View file

@ -3,6 +3,7 @@ import 'package:aves/model/source/collection_lens.dart';
import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/collection_source.dart';
import 'package:aves/model/source/enums.dart'; import 'package:aves/model/source/enums.dart';
import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/collection/collection_page.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:aves/widgets/common/providers/selection_provider.dart'; import 'package:aves/widgets/common/providers/selection_provider.dart';
import 'package:aves/widgets/filter_grids/common/action_delegates/chip_set.dart'; import 'package:aves/widgets/filter_grids/common/action_delegates/chip_set.dart';
import 'package:aves/widgets/filter_grids/common/app_bar.dart'; import 'package:aves/widgets/filter_grids/common/app_bar.dart';
@ -57,6 +58,7 @@ class FilterNavigationPage<T extends CollectionFilter> extends StatelessWidget {
}, },
), ),
onTap: (filter) => _goToCollection(context, filter), onTap: (filter) => _goToCollection(context, filter),
heroType: HeroType.onTap,
), ),
), ),
); );