packages upgrade & fixed pedantic issues

This commit is contained in:
Thibault Deckers 2020-04-01 10:40:02 +09:00
parent 99271e0428
commit dd2199ef20
25 changed files with 68 additions and 75 deletions

View file

@ -40,9 +40,9 @@ class SliverTransitionGridDelegateWithCrossAxisCount extends SliverGridDelegate
}
SliverTransitionGridTileLayoutSettings _buildSettings(SliverConstraints constraints, double crossAxisCount) {
final double usableCrossAxisExtent = constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
final double childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
final usableCrossAxisExtent = constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
final childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
final childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
final current = SliverTransitionGridTileLayoutSettings(
crossAxisCount: crossAxisCount,
mainAxisStride: childMainAxisExtent + mainAxisSpacing,
@ -129,7 +129,7 @@ class SliverTransitionGridTileLayout extends SliverGridLayout {
int getMaxChildIndexForScrollOffset(double scrollOffset) {
final settings = t == 0 ? current : floor;
if (settings.mainAxisStride > 0.0) {
final int mainAxisCount = (scrollOffset / settings.mainAxisStride).ceil();
final mainAxisCount = (scrollOffset / settings.mainAxisStride).ceil();
final index = math.max(0, settings.crossAxisCount * mainAxisCount - 1).ceil();
return index;
}
@ -141,7 +141,7 @@ class SliverTransitionGridTileLayout extends SliverGridLayout {
}
double _getCrossAxisOffset(int index, SliverTransitionGridTileLayoutSettings settings) {
final double crossAxisStart = (index % settings.crossAxisCount) * settings.crossAxisStride;
final crossAxisStart = (index % settings.crossAxisCount) * settings.crossAxisStride;
if (reverseCrossAxis) {
return settings.crossAxisCount * settings.crossAxisStride - crossAxisStart - settings.childCrossAxisExtent - (settings.crossAxisStride - settings.childCrossAxisExtent);
}
@ -168,8 +168,8 @@ class SliverTransitionGridTileLayout extends SliverGridLayout {
return maxScrollOffset;
}
final int mainAxisCount = ((childCount - 1) ~/ current.crossAxisCount) + 1;
final double mainAxisSpacing = current.mainAxisStride - current.childMainAxisExtent;
final mainAxisCount = ((childCount - 1) ~/ current.crossAxisCount) + 1;
final mainAxisSpacing = current.mainAxisStride - current.childMainAxisExtent;
final maxScrollOffset = current.mainAxisStride * mainAxisCount - mainAxisSpacing;
return maxScrollOffset;
}

View file

@ -67,12 +67,12 @@ class _HomePageState extends State<HomePage> {
debugPrint('$runtimeType _setup');
// TODO reduce permission check time
final permissions = await PermissionHandler().requestPermissions([
PermissionGroup.storage,
final permissions = await [
Permission.storage,
// unredacted EXIF with scoped storage (Android 10+)
PermissionGroup.accessMediaLocation,
]); // 350ms
if (permissions[PermissionGroup.storage] != PermissionStatus.granted) {
Permission.accessMediaLocation,
].request(); // 350ms
if (permissions[Permission.storage] != PermissionStatus.granted) {
unawaited(SystemNavigator.pop());
return;
}

View file

@ -27,9 +27,9 @@ class CollectionLens with ChangeNotifier {
Iterable<CollectionFilter> filters,
@required GroupFactor groupFactor,
@required SortFactor sortFactor,
}) : this.filters = [if (filters != null) ...filters.where((f) => f != null)].toSet(),
this.groupFactor = groupFactor ?? GroupFactor.month,
this.sortFactor = sortFactor ?? SortFactor.date {
}) : filters = {if (filters != null) ...filters.where((f) => f != null)},
groupFactor = groupFactor ?? GroupFactor.month,
sortFactor = sortFactor ?? SortFactor.date {
_subscriptions.add(source.eventBus.on<EntryAddedEvent>().listen((e) => onEntryAdded()));
_subscriptions.add(source.eventBus.on<EntryRemovedEvent>().listen((e) => onEntryRemoved(e.entry)));
_subscriptions.add(source.eventBus.on<CatalogMetadataChangedEvent>().listen((e) => onMetadataChanged()));
@ -69,9 +69,7 @@ class CollectionLens with ChangeNotifier {
List<ImageEntry> _sortedEntries;
List<ImageEntry> get sortedEntries {
if (_sortedEntries == null) {
_sortedEntries = List.of(sections.entries.expand((e) => e.value));
}
_sortedEntries ??= List.of(sections.entries.expand((e) => e.value));
return _sortedEntries;
}

View file

@ -119,7 +119,7 @@ class CollectionSource {
void updateLocations() {
final locations = _rawEntries.where((entry) => entry.isLocated).map((entry) => entry.addressDetails);
final lister = (String f(AddressDetails a)) => List<String>.unmodifiable(locations.map(f).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase));
final lister = (String Function(AddressDetails a) f) => List<String>.unmodifiable(locations.map(f).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase));
sortedCountries = lister((address) => address.countryName);
sortedCities = lister((address) => address.city);
}
@ -146,7 +146,7 @@ class CollectionSource {
static String getUniqueAlbumName(String album, Iterable<String> albums) {
final otherAlbums = albums?.where((item) => item != album) ?? [];
final parts = album.split(separator);
int partCount = 0;
var partCount = 0;
String testName;
do {
testName = separator + parts.skip(parts.length - ++partCount).join(separator);

View file

@ -5,7 +5,7 @@ import 'package:aves/model/metadata_db.dart';
final FavouriteRepo favourites = FavouriteRepo._private();
class FavouriteRepo {
List<FavouriteRow> _rows = List();
List<FavouriteRow> _rows = [];
FavouriteRepo._private();

View file

@ -12,7 +12,7 @@ import 'package:path/path.dart';
class AlbumFilter extends CollectionFilter {
static const type = 'album';
static Map<String, Color> _appColors = Map();
static final Map<String, Color> _appColors = {};
final String album;

View file

@ -16,8 +16,8 @@ class CatalogMetadata {
double longitude,
})
// Geocoder throws an IllegalArgumentException when a coordinate has a funky values like 1.7056881853375E7
: this.latitude = latitude == null || latitude < -90.0 || latitude > 90.0 ? null : latitude,
this.longitude = longitude == null || longitude < -180.0 || longitude > 180.0 ? null : longitude;
: latitude = latitude == null || latitude < -90.0 || latitude > 90.0 ? null : latitude,
longitude = longitude == null || longitude < -180.0 || longitude > 180.0 ? null : longitude;
factory CatalogMetadata.fromMap(Map map) {
return CatalogMetadata(
@ -53,7 +53,7 @@ class OverlayMetadata {
this.exposureTime,
this.focalLength,
this.iso,
}) : this.aperture = aperture.replaceFirst('f', 'ƒ');
}) : aperture = aperture.replaceFirst('f', 'ƒ');
factory OverlayMetadata.fromMap(Map map) {
return OverlayMetadata(

View file

@ -35,7 +35,7 @@ class Settings {
void notifyListeners(String key, dynamic oldValue, dynamic newValue) {
debugPrint('$runtimeType notifyListeners key=$key, old=$oldValue, new=$newValue');
if (_listeners != null) {
final List<SettingsCallback> localListeners = _listeners.toList();
final localListeners = _listeners.toList();
for (final listener in localListeners) {
try {
if (_listeners.contains(listener)) {

View file

@ -1,5 +1,5 @@
String formatFilesize(int size, {int round = 2}) {
int divider = 1024;
var divider = 1024;
if (size < divider) return '$size B';

View file

@ -10,24 +10,24 @@ String _decimal2sexagesimal(final double dec) {
List<int> _split(final double value) {
// NumberFormat is necessary to create digit after comma if the value
// has no decimal point (only necessary for browser)
final List<String> tmp = NumberFormat('0.0#####').format(_round(value, decimals: 10)).split('.');
final tmp = NumberFormat('0.0#####').format(_round(value, decimals: 10)).split('.');
return <int>[
int.parse(tmp[0]).abs(),
int.parse(tmp[1]),
];
}
final List<int> parts = _split(dec);
final int integerPart = parts[0];
final int fractionalPart = parts[1];
final parts = _split(dec);
final integerPart = parts[0];
final fractionalPart = parts[1];
final int deg = integerPart;
final double min = double.parse('0.$fractionalPart') * 60;
final deg = integerPart;
final min = double.parse('0.$fractionalPart') * 60;
final List<int> minParts = _split(min);
final int minFractionalPart = minParts[1];
final minParts = _split(min);
final minFractionalPart = minParts[1];
final double sec = double.parse('0.$minFractionalPart') * 60;
final sec = double.parse('0.$minFractionalPart') * 60;
return '$deg° ${min.floor()} ${_round(sec, decimals: 2).toStringAsFixed(2)}';
}

View file

@ -4,19 +4,19 @@ String formatDuration(Duration d) {
return '0$n';
}
String twoDigitSeconds = twoDigits(d.inSeconds.remainder(Duration.secondsPerMinute));
final twoDigitSeconds = twoDigits(d.inSeconds.remainder(Duration.secondsPerMinute));
if (d.inHours == 0) return '${d.inMinutes}:$twoDigitSeconds';
String twoDigitMinutes = twoDigits(d.inMinutes.remainder(Duration.minutesPerHour));
final twoDigitMinutes = twoDigits(d.inMinutes.remainder(Duration.minutesPerHour));
return '${d.inHours}:$twoDigitMinutes:$twoDigitSeconds';
}
extension ExtraDateTime on DateTime {
bool isAtSameYearAs(DateTime other) => this != null && other != null && this.year == other.year;
bool isAtSameYearAs(DateTime other) => this != null && other != null && year == other.year;
bool isAtSameMonthAs(DateTime other) => isAtSameYearAs(other) && this.month == other.month;
bool isAtSameMonthAs(DateTime other) => isAtSameYearAs(other) && month == other.month;
bool isAtSameDayAs(DateTime other) => isAtSameMonthAs(other) && this.day == other.day;
bool isAtSameDayAs(DateTime other) => isAtSameMonthAs(other) && day == other.day;
bool get isToday => isAtSameDayAs(DateTime.now());

View file

@ -3,10 +3,10 @@ import 'dart:ui';
import 'package:aves/model/collection_lens.dart';
import 'package:aves/model/collection_source.dart';
import 'package:aves/model/filters/album.dart';
import 'package:aves/model/filters/location.dart';
import 'package:aves/model/filters/favourite.dart';
import 'package:aves/model/filters/filters.dart';
import 'package:aves/model/filters/gif.dart';
import 'package:aves/model/filters/location.dart';
import 'package:aves/model/filters/tag.dart';
import 'package:aves/model/filters/video.dart';
import 'package:aves/model/settings.dart';
@ -300,7 +300,7 @@ class _FilteredCollectionNavTile extends StatelessWidget {
@required this.title,
bool dense,
@required this.filter,
}) : this.dense = dense ?? false;
}) : dense = dense ?? false;
@override
Widget build(BuildContext context) {

View file

@ -233,7 +233,7 @@ class GridPainter extends CustomPainter {
],
);
final topLeft = center.translate(-extent / 2, -extent / 2);
for (int i = -1; i <= 2; i++) {
for (var i = -1; i <= 2; i++) {
canvas.drawLine(Offset(0, topLeft.dy + extent * i), Offset(size.width, topLeft.dy + extent * i), paint);
canvas.drawLine(Offset(topLeft.dx + extent * i, 0), Offset(topLeft.dx + extent * i, size.height), paint);
}

View file

@ -168,7 +168,7 @@ class SectionHeader extends StatelessWidget {
}
Widget _buildAlbumSectionHeader(BuildContext context) {
Widget albumIcon = IconUtils.getAlbumIcon(context: context, album: sectionKey as String);
var albumIcon = IconUtils.getAlbumIcon(context: context, album: sectionKey as String);
if (albumIcon != null) {
albumIcon = Material(
type: MaterialType.circle,

View file

@ -10,7 +10,7 @@ class TransparentMaterialPageRoute<T> extends PageRouteBuilder<T> {
@override
Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
final PageTransitionsTheme theme = Theme.of(context).pageTransitionsTheme;
final theme = Theme.of(context).pageTransitionsTheme;
return theme.buildTransitions<T>(this, context, animation, secondaryAnimation, child);
}
}

View file

@ -50,7 +50,7 @@ class _MediaStoreCollectionProviderState extends State<MediaStoreCollectionProvi
settings.catalogTimeZone = currentTimeZone;
}
final allEntries = List<ImageEntry>();
final allEntries = <ImageEntry>[];
eventChannel.receiveBroadcastStream().cast<Map>().listen(
(entryMap) => allEntries.add(ImageEntry.fromMap(entryMap)),
onDone: () async {

View file

@ -121,11 +121,10 @@ class _SweepClipPath extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path path = Path();
path.moveTo(size.width / 2, size.height / 2);
path.addArc(Rect.fromLTWH(0, 0, size.width, size.height), startAngle, sweepAngle);
path.lineTo(size.width / 2, size.height / 2);
return path;
return Path()
..moveTo(size.width / 2, size.height / 2)
..addArc(Rect.fromLTWH(0, 0, size.width, size.height), startAngle, sweepAngle)
..lineTo(size.width / 2, size.height / 2);
}
@override

View file

@ -1,4 +1,3 @@
import 'dart:typed_data';
import 'dart:ui' as ui show Codec;
import 'package:aves/utils/android_app_service.dart';
@ -38,7 +37,7 @@ class AppIconImage extends ImageProvider<AppIconImageKey> {
}
Future<ui.Codec> _loadAsync(AppIconImageKey key, DecoderCallback decode) async {
final Uint8List bytes = await AndroidAppService.getAppIcon(key.packageName, key.sizePixels);
final bytes = await AndroidAppService.getAppIcon(key.packageName, key.sizePixels);
if (bytes.lengthInBytes == 0) {
return null;
}

View file

@ -1,4 +1,3 @@
import 'dart:typed_data';
import 'dart:ui' as ui show Codec;
import 'package:aves/model/image_entry.dart';
@ -45,7 +44,7 @@ class ThumbnailProvider extends ImageProvider<ThumbnailProviderKey> {
Future<ui.Codec> _loadAsync(ThumbnailProviderKey key, DecoderCallback decode) async {
final dimPixels = (extent * key.devicePixelRatio).round();
final Uint8List bytes = await ImageFileService.getThumbnail(key.entry, dimPixels, dimPixels);
final bytes = await ImageFileService.getThumbnail(key.entry, dimPixels, dimPixels);
if (bytes.lengthInBytes == 0) {
return null;
}

View file

@ -1,4 +1,3 @@
import 'dart:typed_data';
import 'dart:ui' as ui show Codec;
import 'package:aves/model/image_file_service.dart';
@ -36,7 +35,7 @@ class UriImage extends ImageProvider<UriImage> {
Future<ui.Codec> _loadAsync(UriImage key, DecoderCallback decode) async {
assert(key == this);
final Uint8List bytes = await ImageFileService.getImage(uri, mimeType);
final bytes = await ImageFileService.getImage(uri, mimeType);
if (bytes.lengthInBytes == 0) {
return null;
}

View file

@ -324,8 +324,8 @@ class FullscreenVerticalPageView extends StatefulWidget {
class _FullscreenVerticalPageViewState extends State<FullscreenVerticalPageView> {
bool _isInitialScale = true;
ValueNotifier<Color> _backgroundColorNotifier = ValueNotifier(Colors.black);
ValueNotifier<bool> _infoPageVisibleNotifier = ValueNotifier(false);
final ValueNotifier<Color> _backgroundColorNotifier = ValueNotifier(Colors.black);
final ValueNotifier<bool> _infoPageVisibleNotifier = ValueNotifier(false);
CollectionLens get collection => widget.collection;

View file

@ -30,7 +30,7 @@ class InfoPage extends StatefulWidget {
}
class InfoPageState extends State<InfoPage> {
ScrollController _scrollController = ScrollController();
final ScrollController _scrollController = ScrollController();
bool _scrollStartFromTop = false;
CollectionLens get collection => widget.collection;
@ -172,7 +172,7 @@ class SectionRow extends StatelessWidget {
@override
Widget build(BuildContext context) {
const double dim = 32;
const dim = 32.0;
final buildDivider = () => const SizedBox(
width: dim,
child: Divider(

View file

@ -73,8 +73,8 @@ class _LocationSectionState extends State<LocationSection> {
final showMap = (_loadedUri == entry.uri) || (entry.hasGps && widget.visibleNotifier.value);
if (showMap) {
_loadedUri = entry.uri;
String location = '';
final List<LocationFilter> filters = [];
var location = '';
final filters = <LocationFilter>[];
if (entry.isLocated) {
final address = entry.addressDetails;
location = address.addressLine;
@ -179,7 +179,7 @@ class ImageMapState extends State<ImageMap> with AutomaticKeepAliveClientMixin {
target: widget.latLng,
zoom: widget.initialZoom,
),
onMapCreated: (controller) => setState(() => this._controller = controller),
onMapCreated: (controller) => setState(() => _controller = controller),
rotateGesturesEnabled: false,
scrollGesturesEnabled: false,
zoomGesturesEnabled: false,

View file

@ -20,7 +20,7 @@ import 'package:percent_indicator/linear_percent_indicator.dart';
class StatsPage extends StatelessWidget {
final CollectionLens collection;
final Map<String, int> entryCountPerCity = Map(), entryCountPerCountry = Map(), entryCountPerTag = Map();
final Map<String, int> entryCountPerCity = {}, entryCountPerCountry = {}, entryCountPerTag = {};
List<ImageEntry> get entries => collection.sortedEntries;
@ -54,7 +54,7 @@ class StatsPage extends StatelessWidget {
final catalogued = entries.where((entry) => entry.isCatalogued);
final withGps = catalogued.where((entry) => entry.hasGps);
final withGpsPercent = withGps.length / collection.entryCount;
final Map<String, int> byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map((k, v) => MapEntry(k, v.length));
final byMimeTypes = groupBy(entries, (entry) => entry.mimeType).map<String, int>((k, v) => MapEntry(k, v.length));
final imagesByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('image/')));
final videoByMimeTypes = Map.fromEntries(byMimeTypes.entries.where((kv) => kv.key.startsWith('video/')));
child = ListView(
@ -127,9 +127,8 @@ class StatsPage extends StatelessWidget {
];
return LayoutBuilder(builder: (context, constraints) {
final mq = MediaQuery.of(context);
final availableWidth = constraints.maxWidth;
final double dim = max(mimeDonutMinWidth, availableWidth / (availableWidth > 4 * mimeDonutMinWidth ? 4 : 2));
final dim = max(mimeDonutMinWidth, availableWidth / (availableWidth > 4 * mimeDonutMinWidth ? 4 : 2));
final donut = Container(
width: dim,

View file

@ -168,7 +168,7 @@ packages:
name: google_maps_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.24+1"
version: "0.5.25+2"
image:
dependency: transitive
description:
@ -266,14 +266,14 @@ packages:
name: pdf
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.0"
version: "1.6.0"
pedantic:
dependency: "direct main"
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0+1"
version: "1.9.0"
percent_indicator:
dependency: "direct main"
description:
@ -287,14 +287,14 @@ packages:
name: permission_handler
url: "https://pub.dartlang.org"
source: hosted
version: "4.4.0+hotfix.2"
version: "5.0.0+hotfix.2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.0"
version: "2.0.0"
petitparser:
dependency: transitive
description:
@ -322,7 +322,7 @@ packages:
name: printing
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
version: "3.2.1"
provider:
dependency: "direct main"
description: