minor fixes
This commit is contained in:
parent
35958d87fd
commit
a636c444e1
10 changed files with 26 additions and 7 deletions
|
@ -56,7 +56,7 @@ android {
|
|||
// minSdkVersion constraints:
|
||||
// - Flutter & other plugins: 16
|
||||
// - google_maps_flutter v2.1.1: 20
|
||||
minSdkVersion 16
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 31
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
|
|
|
@ -26,7 +26,7 @@ class DeviceHandler(private val context: Context) : MethodCallHandler {
|
|||
"canGrantDirectoryAccess" to (sdkInt >= Build.VERSION_CODES.LOLLIPOP),
|
||||
"canPinShortcut" to ShortcutManagerCompat.isRequestPinShortcutSupported(context),
|
||||
"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,
|
||||
// but using hybrid composition would make it usable on API 19 too,
|
||||
// cf https://github.com/flutter/flutter/issues/23728
|
||||
|
|
|
@ -5,7 +5,7 @@ final Device device = Device._private();
|
|||
|
||||
class Device {
|
||||
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;
|
||||
|
||||
String get userAgent => _userAgent;
|
||||
|
@ -16,7 +16,7 @@ class Device {
|
|||
|
||||
bool get canPrint => _canPrint;
|
||||
|
||||
bool get canRenderEmojis => _canRenderEmojis;
|
||||
bool get canRenderFlagEmojis => _canRenderFlagEmojis;
|
||||
|
||||
bool get canRenderGoogleMaps => _canRenderGoogleMaps;
|
||||
|
||||
|
@ -35,7 +35,7 @@ class Device {
|
|||
_canGrantDirectoryAccess = capabilities['canGrantDirectoryAccess'] ?? false;
|
||||
_canPinShortcut = capabilities['canPinShortcut'] ?? false;
|
||||
_canPrint = capabilities['canPrint'] ?? false;
|
||||
_canRenderEmojis = capabilities['canRenderEmojis'] ?? false;
|
||||
_canRenderFlagEmojis = capabilities['canRenderFlagEmojis'] ?? false;
|
||||
_canRenderGoogleMaps = capabilities['canRenderGoogleMaps'] ?? false;
|
||||
_hasFilePicker = capabilities['hasFilePicker'] ?? false;
|
||||
_showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false;
|
||||
|
|
|
@ -59,7 +59,7 @@ class LocationFilter extends CollectionFilter {
|
|||
|
||||
@override
|
||||
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);
|
||||
// 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
|
||||
|
|
|
@ -18,7 +18,7 @@ import 'package:provider/provider.dart';
|
|||
typedef FilterCallback = void Function(CollectionFilter filter);
|
||||
typedef OffsetFilterCallback = void Function(BuildContext context, CollectionFilter filter, Offset tapPosition);
|
||||
|
||||
enum HeroType { always, onTap }
|
||||
enum HeroType { always, onTap, never }
|
||||
|
||||
@immutable
|
||||
class AvesFilterDecoration {
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'package:aves/model/source/collection_lens.dart';
|
|||
import 'package:aves/model/source/collection_source.dart';
|
||||
import 'package:aves/theme/icons.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/dialogs/aves_dialog.dart';
|
||||
import 'package:aves/widgets/dialogs/item_pick_dialog.dart';
|
||||
|
@ -96,6 +97,7 @@ class _CoverSelectionDialogState extends State<CoverSelectionDialog> {
|
|||
extent: extent,
|
||||
coverEntry: _isCustom ? _customEntry : _recentEntry,
|
||||
onTap: (filter) => _pickEntry(),
|
||||
heroType: HeroType.never,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
|
|
@ -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/query_bar.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/providers/selection_provider.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,
|
||||
),
|
||||
onTap: (filter) => Navigator.pop<String>(context, (filter as AlbumFilter).album),
|
||||
heroType: HeroType.never,
|
||||
),
|
||||
);
|
||||
},
|
||||
|
|
|
@ -28,6 +28,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
final bool pinned;
|
||||
final String? banner;
|
||||
final FilterCallback? onTap;
|
||||
final HeroType heroType;
|
||||
|
||||
const CoveredFilterChip({
|
||||
Key? key,
|
||||
|
@ -38,6 +39,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
this.pinned = false,
|
||||
this.banner,
|
||||
this.onTap,
|
||||
this.heroType = HeroType.onTap,
|
||||
}) : thumbnailExtent = thumbnailExtent ?? extent,
|
||||
super(key: key);
|
||||
|
||||
|
@ -138,6 +140,7 @@ class CoveredFilterChip<T extends CollectionFilter> extends StatelessWidget {
|
|||
banner: banner,
|
||||
details: _buildDetails(source, filter),
|
||||
padding: titlePadding,
|
||||
heroType: heroType,
|
||||
onTap: onTap,
|
||||
onLongPress: null,
|
||||
);
|
||||
|
|
|
@ -51,6 +51,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
|
|||
final QueryTest<T>? applyQuery;
|
||||
final Widget Function() emptyBuilder;
|
||||
final FilterCallback onTap;
|
||||
final HeroType heroType;
|
||||
|
||||
const FilterGridPage({
|
||||
Key? key,
|
||||
|
@ -66,6 +67,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
|
|||
this.applyQuery,
|
||||
required this.emptyBuilder,
|
||||
required this.onTap,
|
||||
required this.heroType,
|
||||
}) : super(key: key);
|
||||
|
||||
static const Color detailColor = Color(0xFFE0E0E0);
|
||||
|
@ -104,6 +106,7 @@ class FilterGridPage<T extends CollectionFilter> extends StatelessWidget {
|
|||
applyQuery: applyQuery,
|
||||
emptyBuilder: emptyBuilder,
|
||||
onTap: onTap,
|
||||
heroType: heroType,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -129,6 +132,7 @@ class FilterGrid<T extends CollectionFilter> extends StatefulWidget {
|
|||
final QueryTest<T>? applyQuery;
|
||||
final Widget Function() emptyBuilder;
|
||||
final FilterCallback onTap;
|
||||
final HeroType heroType;
|
||||
|
||||
const FilterGrid({
|
||||
Key? key,
|
||||
|
@ -144,6 +148,7 @@ class FilterGrid<T extends CollectionFilter> extends StatefulWidget {
|
|||
required this.applyQuery,
|
||||
required this.emptyBuilder,
|
||||
required this.onTap,
|
||||
required this.heroType,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
|
@ -181,6 +186,7 @@ class _FilterGridState<T extends CollectionFilter> extends State<FilterGrid<T>>
|
|||
applyQuery: widget.applyQuery,
|
||||
emptyBuilder: widget.emptyBuilder,
|
||||
onTap: widget.onTap,
|
||||
heroType: widget.heroType,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -196,6 +202,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
|
|||
final Widget Function() emptyBuilder;
|
||||
final QueryTest<T>? applyQuery;
|
||||
final FilterCallback onTap;
|
||||
final HeroType heroType;
|
||||
|
||||
final ValueNotifier<double> _appBarHeightNotifier = ValueNotifier(0);
|
||||
|
||||
|
@ -212,6 +219,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
|
|||
required this.applyQuery,
|
||||
required this.emptyBuilder,
|
||||
required this.onTap,
|
||||
required this.heroType,
|
||||
}) : super(key: key) {
|
||||
_appBarHeightNotifier.value = appBarHeight;
|
||||
}
|
||||
|
@ -275,6 +283,7 @@ class _FilterGridContent<T extends CollectionFilter> extends StatelessWidget {
|
|||
pinned: pinnedFilters.contains(filter),
|
||||
banner: newFilters.contains(filter) ? context.l10n.newFilterBanner : null,
|
||||
onTap: onTap,
|
||||
heroType: heroType,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -432,6 +441,7 @@ class _FilterScaler<T extends CollectionFilter> extends StatelessWidget {
|
|||
extent: tileSize.width,
|
||||
thumbnailExtent: context.read<TileExtentController>().effectiveExtentMax,
|
||||
pinned: pinnedFilters.contains(filter),
|
||||
heroType: HeroType.never,
|
||||
);
|
||||
},
|
||||
highlightItem: (item) => item.filter,
|
||||
|
|
|
@ -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/enums.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/filter_grids/common/action_delegates/chip_set.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),
|
||||
heroType: HeroType.onTap,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue