upgraded flutter to stable v2.0.1 + packages upgrade

This commit is contained in:
Thibault Deckers 2021-03-09 19:35:33 +09:00
parent a06013bbf7
commit abd76511fc
35 changed files with 213 additions and 214 deletions

View file

@ -15,7 +15,7 @@ jobs:
- uses: subosito/flutter-action@v1
with:
channel: stable
flutter-version: '1.22.6'
flutter-version: '2.0.1'
- name: Clone the repository.
uses: actions/checkout@v2

View file

@ -17,7 +17,7 @@ jobs:
- uses: subosito/flutter-action@v1
with:
channel: stable
flutter-version: '1.22.6'
flutter-version: '2.0.1'
# Workaround for this Android Gradle Plugin issue (supposedly fixed in AGP 4.1):
# https://issuetracker.google.com/issues/144111441
@ -50,8 +50,8 @@ jobs:
echo "${{ secrets.KEY_JKS }}" > release.keystore.asc
gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE
rm release.keystore.asc
flutter build apk --bundle-sksl-path shaders_1.22.6.sksl.json
flutter build appbundle --bundle-sksl-path shaders_1.22.6.sksl.json
flutter build apk --bundle-sksl-path shaders_2.0.1.sksl.json
flutter build appbundle --bundle-sksl-path shaders_2.0.1.sksl.json
rm $AVES_STORE_FILE
env:
AVES_STORE_FILE: ${{ github.workspace }}/key.jks

View file

@ -2,6 +2,12 @@
All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- Korean translation
### Changed
- Upgraded Flutter to stable v2.0.1
### Fixed
- various TIFF decoding fixes

View file

@ -104,7 +104,7 @@ repositories {
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
implementation 'androidx.core:core-ktx:1.5.0-beta01' // v1.5.0-alpha02+ for ShortcutManagerCompat.setDynamicShortcuts
implementation 'androidx.core:core-ktx:1.5.0-beta02' // v1.5.0-alpha02+ for ShortcutManagerCompat.setDynamicShortcuts
implementation 'androidx.exifinterface:exifinterface:1.3.2'
implementation 'com.commonsware.cwac:document:0.4.1'
implementation 'com.drewnoakes:metadata-extractor:2.15.0'

View file

@ -8,11 +8,10 @@ buildscript {
jcenter()
}
dependencies {
// TODO TLAD upgrade AGP to 4+ when this lands on stable: https://github.com/flutter/flutter/commit/8dd0de7f580972079f610a56a689b0a9c414f81e
classpath 'com.android.tools.build:gradle:3.6.4'
classpath 'com.android.tools.build:gradle:4.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.5'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.0'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1'
}
}

View file

@ -15,4 +15,3 @@ android.useAndroidX=true
android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
android.enableR8=true

View file

@ -8,13 +8,12 @@ class UriPicture extends PictureProvider<UriPicture> {
const UriPicture({
@required this.uri,
@required this.mimeType,
this.colorFilter,
}) : assert(uri != null);
ColorFilter colorFilter,
}) : assert(uri != null),
super(colorFilter);
final String uri, mimeType;
final ColorFilter colorFilter;
@override
Future<UriPicture> obtainKey(PictureConfiguration configuration) {
return SynchronousFuture<UriPicture>(this);

View file

@ -625,7 +625,7 @@ class AvesEntry {
}
// when the entry image itself changed (e.g. after rotation)
void _onImageChanged(int oldDateModifiedSecs, int oldRotationDegrees, bool oldIsFlipped) async {
Future<void> _onImageChanged(int oldDateModifiedSecs, int oldRotationDegrees, bool oldIsFlipped) async {
if (oldDateModifiedSecs != dateModifiedSecs || oldRotationDegrees != rotationDegrees || oldIsFlipped != isFlipped) {
await EntryCache.evict(uri, mimeType, oldDateModifiedSecs, oldRotationDegrees, oldIsFlipped);
imageChangeNotifier.notifyListeners();

View file

@ -76,6 +76,7 @@ class AlbumFilter extends CollectionFilter {
@override
String get category => type;
// key `album-{path}` is expected by test driver
@override
String get key => '$type-$album';

View file

@ -142,7 +142,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
}
}
void updateAfterMove({
Future<void> updateAfterMove({
@required Set<AvesEntry> todoEntries,
@required Set<AvesEntry> favouriteEntries,
@required bool copy,

View file

@ -141,10 +141,7 @@ class _CollectionAppBarState extends State<CollectionAppBar> with SingleTickerPr
Widget _buildAppBarTitle() {
if (collection.isBrowsing) {
Widget title = Text(
AvesApp.mode == AppMode.pick ? context.l10n.collectionPickPageTitle : context.l10n.collectionPageTitle,
key: Key('appbar-title'),
);
Widget title = Text(AvesApp.mode == AppMode.pick ? context.l10n.collectionPickPageTitle : context.l10n.collectionPageTitle);
if (AvesApp.mode == AppMode.main) {
title = SourceStateAwareAppBarTitle(
title: title,

View file

@ -221,8 +221,8 @@ class _CollectionScrollViewState extends State<CollectionScrollView> {
appBar,
collection.isEmpty
? SliverFillRemaining(
child: _buildEmptyCollectionPlaceholder(collection),
hasScrollBody: false,
child: _buildEmptyCollectionPlaceholder(collection),
)
: SectionedListSliver<AvesEntry>(),
BottomPaddingSliver(),

View file

@ -88,8 +88,8 @@ class DraggableScrollbar extends StatefulWidget {
children: [
ScrollLabel(
animation: labelAnimation,
child: labelText,
backgroundColor: backgroundColor,
child: labelText,
),
scrollThumb,
],

View file

@ -3,6 +3,7 @@ import 'dart:math';
import 'package:aves/theme/durations.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:pedantic/pedantic.dart';
class Sweeper extends StatefulWidget {
final WidgetBuilder builder;
@ -89,11 +90,11 @@ class _SweeperState extends State<Sweeper> with SingleTickerProviderStateMixin {
valueListenable: _angleAnimationController,
builder: (context, value, child) {
return ClipPath(
child: widget.builder(context),
clipper: _SweepClipPath(
startAngle: _angle.value,
sweepAngle: widget.sweepAngle,
),
child: widget.builder(context),
);
}),
),
@ -115,7 +116,7 @@ class _SweeperState extends State<Sweeper> with SingleTickerProviderStateMixin {
_isAppearing = false;
if (mounted) {
_angleAnimationController.reset();
_angleAnimationController.forward();
unawaited(_angleAnimationController.forward());
}
}
if (mounted) {

View file

@ -66,7 +66,6 @@ class AvesFilterChip extends StatefulWidget {
final RenderBox overlay = Overlay.of(context).context.findRenderObject();
final touchArea = Size(40, 40);
// TODO TLAD check menu is within safe area, when this lands on stable: https://github.com/flutter/flutter/commit/cfc8ec23b633da1001359e384435e8333c9d3733
final selectedAction = await showMenu<ChipAction>(
context: context,
position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size),

View file

@ -18,6 +18,7 @@ ScrollThumbBuilder avesScrollThumbBuilder({
margin: EdgeInsets.only(right: .5),
padding: EdgeInsets.all(2),
child: ClipPath(
clipper: ArrowClipper(),
child: Container(
width: 20.0,
decoration: BoxDecoration(
@ -25,7 +26,6 @@ ScrollThumbBuilder avesScrollThumbBuilder({
borderRadius: BorderRadius.circular(12.0),
),
),
clipper: ArrowClipper(),
),
);
return (backgroundColor, thumbAnimation, labelAnimation, height, {labelText}) {

View file

@ -264,13 +264,13 @@ class _MagnifierCoreState extends State<MagnifierCore> with TickerProviderStateM
);
return MagnifierGestureDetector(
child: child,
onDoubleTap: onDoubleTap,
onScaleStart: onScaleStart,
onScaleUpdate: onScaleUpdate,
onScaleEnd: onScaleEnd,
hitDetector: this,
onTapUp: widget.onTap == null ? null : onTap,
child: child,
);
});
}

View file

@ -86,9 +86,9 @@ class _MagnifierGestureDetectorState extends State<MagnifierGestureDetector> {
);
return RawGestureDetector(
child: widget.child,
gestures: gestures,
behavior: widget.behavior ?? HitTestBehavior.translucent,
child: widget.child,
);
}
}

View file

@ -71,11 +71,11 @@ class Magnifier extends StatelessWidget {
));
return MagnifierCore(
child: child,
controller: controller,
scaleStateCycle: scaleStateCycle,
onTap: onTap,
applyScale: applyScale,
child: child,
);
},
);

View file

@ -134,13 +134,13 @@ class DecoratedFilterChip extends StatelessWidget {
if (pinned)
AnimatedPadding(
padding: EdgeInsets.only(right: padding),
duration: Durations.chipDecorationAnimation,
child: DecoratedIcon(
AIcons.pin,
color: FilterGridPage.detailColor,
shadows: [Constants.embossShadow],
size: iconSize,
),
duration: Durations.chipDecorationAnimation,
),
if (filter is AlbumFilter && androidFileUtils.isOnRemovableStorage(filter.album))
AnimatedPadding(

View file

@ -292,6 +292,7 @@ class _SectionedContentState<T extends CollectionFilter> extends State<_Sectione
Widget content;
if (empty) {
content = SliverFillRemaining(
hasScrollBody: false,
child: Selector<MediaQueryData, double>(
selector: (context, mq) => mq.effectiveBottomPadding,
builder: (context, mqPaddingBottom, child) {
@ -301,7 +302,6 @@ class _SectionedContentState<T extends CollectionFilter> extends State<_Sectione
);
},
),
hasScrollBody: false,
);
} else {
content = SectionedListSliver<FilterGridItem<T>>();

View file

@ -87,7 +87,6 @@ class FilterNavigationPage<T extends CollectionFilter> extends StatelessWidget {
void _showMenu(BuildContext context, T filter, Offset tapPosition) async {
final RenderBox overlay = Overlay.of(context).context.findRenderObject();
final touchArea = Size(40, 40);
// TODO TLAD check menu is within safe area, when this lands on stable: https://github.com/flutter/flutter/commit/cfc8ec23b633da1001359e384435e8333c9d3733
final selectedAction = await showMenu<ChipAction>(
context: context,
position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size),

View file

@ -90,13 +90,13 @@ class ExpandableFilterRow extends StatelessWidget {
titleRow,
AnimatedSwitcher(
duration: Durations.filterRowExpandAnimation,
child: filterChips,
layoutBuilder: (currentChild, previousChildren) => Stack(
children: [
...previousChildren,
if (currentChild != null) currentChild,
],
),
child: filterChips,
),
],
)
@ -105,7 +105,7 @@ class ExpandableFilterRow extends StatelessWidget {
Widget _buildFilterChip(CollectionFilter filter) {
return AvesFilterChip(
// key `album-...` is expected by test driver
// key `album-{path}` is expected by test driver
key: Key(filter.key),
filter: filter,
heroType: heroTypeBuilder?.call(filter) ?? HeroType.onTap,

View file

@ -171,41 +171,40 @@ class _EntryViewerStackState extends State<EntryViewerStack> with SingleTickerPr
return SynchronousFuture(false);
},
child: ValueListenableProvider<HeroInfo>.value(
value: _heroInfoNotifier,
builder: (context, snapshot) {
return NotificationListener(
onNotification: (notification) {
if (notification is FilterNotification) {
_goToCollection(notification.filter);
} else if (notification is ViewStateNotification) {
_updateViewState(notification.uri, notification.viewState);
} else if (notification is EntryDeletedNotification) {
_onEntryDeleted(context, notification.entry);
}
return false;
},
child: Stack(
children: [
ViewerVerticalPageView(
collection: collection,
entryNotifier: _entryNotifier,
videoControllers: _videoControllers,
multiPageControllers: _multiPageControllers,
verticalPager: _verticalPager,
horizontalPager: _horizontalPager,
onVerticalPageChanged: _onVerticalPageChanged,
onHorizontalPageChanged: _onHorizontalPageChanged,
onImageTap: () => _overlayVisible.value = !_overlayVisible.value,
onImagePageRequested: () => _goToVerticalPage(imagePage),
onViewDisposed: (uri) => _updateViewState(uri, null),
),
_buildTopOverlay(),
_buildBottomOverlay(),
BottomGestureAreaProtector(),
],
value: _heroInfoNotifier,
child: NotificationListener(
onNotification: (notification) {
if (notification is FilterNotification) {
_goToCollection(notification.filter);
} else if (notification is ViewStateNotification) {
_updateViewState(notification.uri, notification.viewState);
} else if (notification is EntryDeletedNotification) {
_onEntryDeleted(context, notification.entry);
}
return false;
},
child: Stack(
children: [
ViewerVerticalPageView(
collection: collection,
entryNotifier: _entryNotifier,
videoControllers: _videoControllers,
multiPageControllers: _multiPageControllers,
verticalPager: _verticalPager,
horizontalPager: _horizontalPager,
onVerticalPageChanged: _onVerticalPageChanged,
onHorizontalPageChanged: _onHorizontalPageChanged,
onImageTap: () => _overlayVisible.value = !_overlayVisible.value,
onImagePageRequested: () => _goToVerticalPage(imagePage),
onViewDisposed: (uri) => _updateViewState(uri, null),
),
);
}),
_buildTopOverlay(),
_buildBottomOverlay(),
BottomGestureAreaProtector(),
],
),
),
),
);
}
@ -315,9 +314,7 @@ class _EntryViewerStackState extends State<EntryViewerStack> with SingleTickerPr
return AnimatedBuilder(
animation: _verticalScrollNotifier,
builder: (context, child) => Positioned(
// TODO TLAD replace when using Flutter version adapted for null safety
// bottom: (_verticalPager.position.hasPixels ? _verticalPager.offset : 0) - mqHeight,
bottom: (_verticalPager.offset ?? 0) - mqHeight,
bottom: (_verticalPager.position.hasPixels ? _verticalPager.offset : 0) - mqHeight,
child: child,
),
child: child,
@ -462,7 +459,7 @@ class _EntryViewerStackState extends State<EntryViewerStack> with SingleTickerPr
if (_overlayVisible.value) {
_showSystemUI();
if (animate) {
_overlayAnimationController.forward();
await _overlayAnimationController.forward();
} else {
_overlayAnimationController.value = _overlayAnimationController.upperBound;
}

View file

@ -186,7 +186,9 @@ class _OwnerPropState extends State<OwnerProp> {
text: context.l10n.viewerInfoLabelOwner,
style: InfoRowGroup.keyStyle,
),
WidgetSpan(
// `com.android.shell` is the package reported
// for images copied to the device by ADB for Test Driver
if (_ownerPackage != 'com.android.shell') WidgetSpan(
alignment: PlaceholderAlignment.middle,
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 4),

View file

@ -72,6 +72,7 @@ class _EntryLeafletMapState extends State<EntryLeafletMap> with AutomaticKeepAli
zoom: widget.initialZoom,
interactive: false,
),
mapController: _mapController,
children: [
_buildMapLayer(),
ScaleLayerWidget(
@ -91,7 +92,6 @@ class _EntryLeafletMapState extends State<EntryLeafletMap> with AutomaticKeepAli
),
),
],
mapController: _mapController,
);
}

View file

@ -111,7 +111,6 @@ class _WelcomePageState extends State<WelcomePage> {
final button = ElevatedButton(
key: Key('continue-button'),
child: Text(context.l10n.continueButtonLabel),
onPressed: _hasAcceptedTerms
? () {
settings.hasAcceptedTerms = true;
@ -124,6 +123,7 @@ class _WelcomePageState extends State<WelcomePage> {
);
}
: null,
child: Text(context.l10n.continueButtonLabel),
);
return MediaQuery.of(context).orientation == Orientation.portrait

View file

@ -7,14 +7,14 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "12.0.0"
version: "14.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "0.40.6"
version: "0.41.2"
ansicolor:
dependency: transitive
description:
@ -42,7 +42,7 @@ packages:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0-nullsafety.1"
version: "2.5.0"
barcode:
dependency: transitive
description:
@ -56,21 +56,21 @@ packages:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.1"
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.3"
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.2.0"
charts_common:
dependency: transitive
description:
@ -91,49 +91,42 @@ packages:
name: cli_util
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0"
version: "0.3.0"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.1"
version: "1.1.0"
collection:
dependency: "direct main"
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0-nullsafety.3"
version: "1.15.0"
connectivity:
dependency: "direct main"
description:
name: connectivity
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.2"
connectivity_for_web:
dependency: transitive
description:
name: connectivity_for_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.1+4"
version: "3.0.2"
connectivity_macos:
dependency: transitive
description:
name: connectivity_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0+7"
version: "0.2.0"
connectivity_platform_interface:
dependency: transitive
description:
name: connectivity_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.6"
version: "2.0.0"
console_log_handler:
dependency: transitive
description:
@ -161,7 +154,7 @@ packages:
name: coverage
url: "https://pub.dartlang.org"
source: hosted
version: "0.14.2"
version: "0.15.2"
crypto:
dependency: transitive
description:
@ -182,7 +175,7 @@ packages:
name: event_bus
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
version: "2.0.0"
expansion_tile_card:
dependency: "direct main"
description:
@ -198,21 +191,21 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.2.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
version: "1.0.0"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.0-nullsafety.2"
version: "6.0.0"
firebase:
dependency: transitive
description:
@ -233,7 +226,7 @@ packages:
name: firebase_analytics_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
version: "1.1.0"
firebase_analytics_web:
dependency: transitive
description:
@ -306,13 +299,13 @@ packages:
name: flutter_highlight
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
version: "0.7.0"
flutter_ijkplayer:
dependency: "direct main"
description:
path: "."
ref: HEAD
resolved-ref: c1b7f25e2a3bc67ab7b30561af49a62ae9a8c409
resolved-ref: d4e079404ba8e4f82a7e053ffdc47af787a61c3b
url: "git://github.com/deckerst/flutter_ijkplayer.git"
source: git
version: "0.3.7"
@ -334,7 +327,7 @@ packages:
name: flutter_localized_locales
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
version: "2.0.1"
flutter_map:
dependency: "direct main"
description:
@ -355,21 +348,21 @@ packages:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.11"
version: "2.0.0"
flutter_staggered_animations:
dependency: "direct main"
description:
name: flutter_staggered_animations
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
version: "1.0.0"
flutter_svg:
dependency: "direct main"
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.19.1"
version: "0.19.3"
flutter_test:
dependency: "direct dev"
description: flutter
@ -405,35 +398,35 @@ packages:
name: glob
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "2.0.0"
google_api_availability:
dependency: "direct main"
description:
name: google_api_availability
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
version: "3.0.0"
google_maps_flutter:
dependency: "direct main"
description:
name: google_maps_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "2.0.1"
google_maps_flutter_platform_interface:
dependency: transitive
description:
name: google_maps_flutter_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "2.0.0"
highlight:
dependency: transitive
description:
name: highlight
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.0"
version: "0.7.0"
http:
dependency: transitive
description:
@ -447,7 +440,7 @@ packages:
name: http_multi_server
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0"
version: "3.0.0"
http_parser:
dependency: transitive
description:
@ -468,21 +461,21 @@ packages:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.1"
version: "0.17.0"
io:
dependency: transitive
description:
name: io
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.5"
version: "1.0.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3-nullsafety.2"
version: "0.6.3"
json_annotation:
dependency: transitive
description:
@ -490,13 +483,6 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.1"
json_rpc_2:
dependency: transitive
description:
name: json_rpc_2
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.2"
latlong:
dependency: "direct main"
description:
@ -531,21 +517,21 @@ packages:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10-nullsafety.1"
version: "0.12.10"
material_design_icons_flutter:
dependency: "direct main"
description:
name: material_design_icons_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.5855"
version: "4.0.5955"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.3"
version: "1.3.0"
mgrs_dart:
dependency: transitive
description:
@ -559,7 +545,7 @@ packages:
name: mime
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.7"
version: "1.0.0"
motion_sensors:
dependency: transitive
description:
@ -573,21 +559,7 @@ packages:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
node_interop:
dependency: transitive
description:
name: node_interop
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.1"
node_io:
dependency: transitive
description:
name: node_io
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.1"
version: "1.0.0"
node_preamble:
dependency: transitive
description:
@ -601,7 +573,7 @@ packages:
name: overlay_support
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
version: "1.2.0-nullsafety.0"
package_config:
dependency: transitive
description:
@ -615,7 +587,7 @@ packages:
name: package_info
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.3+4"
version: "2.0.0"
palette_generator:
dependency: "direct main"
description:
@ -636,7 +608,7 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.1"
version: "1.8.0"
path_drawing:
dependency: transitive
description:
@ -657,21 +629,21 @@ packages:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+2"
version: "2.0.0"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "2.0.0"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4+3"
version: "2.0.0"
pdf:
dependency: "direct main"
description:
@ -685,7 +657,7 @@ packages:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0-nullsafety.2"
version: "1.11.0"
percent_indicator:
dependency: "direct main"
description:
@ -720,7 +692,7 @@ packages:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0-nullsafety.2"
version: "3.0.0"
plugin_platform_interface:
dependency: transitive
description:
@ -734,7 +706,7 @@ packages:
name: pool
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.0-nullsafety.2"
version: "1.5.0"
positioned_tap_detector:
dependency: transitive
description:
@ -755,7 +727,7 @@ packages:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0-nullsafety.2"
version: "4.0.0"
proj4dart:
dependency: transitive
description:
@ -769,14 +741,14 @@ packages:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.3"
version: "5.0.0"
pub_semver:
dependency: transitive
description:
name: pub_semver
url: "https://pub.dartlang.org"
source: hosted
version: "1.4.4"
version: "2.0.0"
qr:
dependency: transitive
description:
@ -797,42 +769,42 @@ packages:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.12+4"
version: "2.0.3"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2+4"
version: "2.0.0"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+11"
version: "2.0.0"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+7"
version: "2.0.0"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2+3"
version: "2.0.0"
shelf:
dependency: transitive
description:
@ -872,56 +844,56 @@ packages:
name: source_map_stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.3"
version: "2.1.0"
source_maps:
dependency: transitive
description:
name: source_maps
url: "https://pub.dartlang.org"
source: hosted
version: "0.10.10-nullsafety.2"
version: "0.10.10"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0-nullsafety.2"
version: "1.8.0"
sqflite:
dependency: "direct main"
description:
name: sqflite
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.2+3"
version: "2.0.0+2"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3+1"
version: "2.0.0+1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0-nullsafety.1"
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.1"
version: "2.1.0"
stream_transform:
dependency: transitive
description:
name: stream_transform
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "2.0.0"
streams_channel:
dependency: "direct main"
description:
@ -935,7 +907,7 @@ packages:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0-nullsafety.1"
version: "1.1.0"
sync_http:
dependency: transitive
description:
@ -949,35 +921,35 @@ packages:
name: synchronized
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.0+2"
version: "3.0.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0-nullsafety.1"
version: "1.2.0"
test:
dependency: "direct dev"
description:
name: test
url: "https://pub.dartlang.org"
source: hosted
version: "1.16.0-nullsafety.5"
version: "1.16.5"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19-nullsafety.2"
version: "0.2.19"
test_core:
dependency: transitive
description:
name: test_core
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.12-nullsafety.5"
version: "0.3.15"
transparent_image:
dependency: transitive
description:
@ -998,7 +970,7 @@ packages:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0-nullsafety.3"
version: "1.3.0"
unicode:
dependency: transitive
description:
@ -1012,42 +984,42 @@ packages:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "5.7.10"
version: "6.0.2"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+4"
version: "2.0.0"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+9"
version: "2.0.0"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.9"
version: "2.0.1"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.5+3"
version: "2.0.0"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+3"
version: "2.0.0"
validate:
dependency: transitive
description:
@ -1061,7 +1033,7 @@ packages:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0-nullsafety.3"
version: "2.1.0"
version:
dependency: "direct main"
description:
@ -1076,27 +1048,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "5.5.0"
vm_service_client:
dependency: transitive
description:
name: vm_service_client
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.6+2"
watcher:
dependency: transitive
description:
name: watcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.7+15"
version: "1.0.0"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0"
webdriver:
dependency: transitive
description:
@ -1117,7 +1082,7 @@ packages:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "1.7.4+1"
version: "2.0.0"
wkt_parser:
dependency: transitive
description:
@ -1131,7 +1096,7 @@ packages:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
version: "0.2.0"
xml:
dependency: "direct main"
description:
@ -1145,7 +1110,7 @@ packages:
name: yaml
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
version: "3.1.0"
sdks:
dart: ">=2.10.2 <2.11.0"
flutter: ">=1.22.2 <2.0.0"
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.24.0-10.1.pre"

View file

@ -4,18 +4,21 @@ repository: https://github.com/deckerst/aves
version: 1.3.5+41
environment:
sdk: ">=2.7.0 <3.0.0"
sdk: '>=2.10.0 <3.0.0'
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
charts_flutter: # not null safe, as of 2021/03/09 - https://github.com/google/charts/issues/579
# `charts_flutter` not null safe, as of 2021/03/09 - https://github.com/google/charts/issues/579
charts_flutter:
collection:
connectivity:
country_code: # not null safe, as of 2021/03/09 - unmaintained?
decorated_icon: # not null safe, as of 2021/03/09 - https://github.com/benPesso/flutter_decorated_icon/issues/2
# `country_code` not null safe, as of 2021/03/09 - unmaintained?
country_code:
# `decorated_icon` not null safe, as of 2021/03/09 - https://github.com/benPesso/flutter_decorated_icon/issues/2
decorated_icon:
event_bus:
# TODO TLAD merge null safe `expansion_tile_card` to fork
expansion_tile_card:
@ -26,43 +29,63 @@ dependencies:
firebase_analytics:
firebase_crashlytics:
# TODO TLAD migrate to basic SnackBar or `another_flushbar`
flushbar: # not null safe, as of 2021/03/09 - discontinued
# `flushbar` not null safe, as of 2021/03/09 - discontinued
flushbar:
flutter_highlight:
flutter_ijkplayer: # not null safe, as of 2021/03/09 - unmaintained?
# `flutter_ijkplayer` not null safe, as of 2021/03/09 - unmaintained?
flutter_ijkplayer:
# path: ../flutter_ijkplayer
git:
url: git://github.com/deckerst/flutter_ijkplayer.git
flutter_localized_locales:
flutter_map: # not null safe, as of 2021/03/09 - https://github.com/fleaflet/flutter_map/issues/829
# `flutter_map` not null safe, as of 2021/03/09 - https://github.com/fleaflet/flutter_map/issues/829
flutter_map:
flutter_markdown:
flutter_staggered_animations:
flutter_svg:
# TODO TLAD migrate to `geocoding` (or reimplement) - https://github.com/Baseflow/flutter-geocoding/issues/37
geocoder: # not null safe, as of 2021/03/09 - unmaintained? - https://github.com/aloisdeniel/flutter_geocoder/issues/61
# `geocoder` not null safe, as of 2021/03/09 - unmaintained? - https://github.com/aloisdeniel/flutter_geocoder/issues/61
geocoder:
github:
google_api_availability:
google_maps_flutter:
intl:
latlong: # not null safe, as of 2021/03/09 - archived - migrate to maps_toolkit? cf https://github.com/fleaflet/flutter_map/pull/750
# `latlong` not null safe, as of 2021/03/09 - archived - migrate to maps_toolkit? cf https://github.com/fleaflet/flutter_map/pull/750
latlong:
material_design_icons_flutter:
overlay_support:
# as of 2021/03/09, stable version 1.0.5 uses deprecated `ancestorWidgetOfExactType`
overlay_support: 1.2.0-nullsafety.0
package_info:
palette_generator: # not null safe, as of 2021/03/09 - https://github.com/flutter/packages/pull/287
panorama: # not null safe, as of 2021/03/09 - no issue/PR
# `palette_generator` not null safe, as of 2021/03/09 - https://github.com/flutter/packages/pull/287
palette_generator:
# `panorama` not null safe, as of 2021/03/09 - no issue/PR
panorama:
pdf:
pedantic:
percent_indicator:
permission_handler:
printing:
# TODO TLAD upgrade printing to >=5 when `flutter_driver` dependency upgrade get on the right channel
# https://github.com/flutter/flutter/pull/75370
# https://github.com/flutter/flutter/blob/master/packages/flutter_driver/pubspec.yaml
# otherwise, we get this conundrum:
# every version of flutter_driver from sdk depends on crypto 2.1.5
# pdf >=3.0.1 depends on crypto ^3.0.0
# printing >=5.0.1 depends on pdf ^3.0.1
printing: 4.1.0
provider:
shared_preferences:
sqflite:
streams_channel: # not null safe, as of 2021/03/09 - unmaintained? - no issue/PR
# `streams_channel` not null safe, as of 2021/03/09 - unmaintained? - no issue/PR
streams_channel:
tuple:
url_launcher:
version:
xml:
dependency_overrides:
# because of `charts_flutter`
intl: '>=0.17.0'
dev_dependencies:
flutter_test:
sdk: flutter

File diff suppressed because one or more lines are too long

1
shaders_2.0.1.sksl.json Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,5 @@
import 'dart:ui';
import 'package:aves/main.dart' as app;
import 'package:aves/model/settings/enums.dart';
import 'package:aves/model/settings/settings.dart';
@ -22,6 +24,7 @@ Future<void> configureAndLaunch() async {
await settings.init();
settings.keepScreenOn = KeepScreenOn.always;
settings.hasAcceptedTerms = false;
settings.locale = Locale('en');
app.main();
}

View file

@ -58,7 +58,8 @@ void agreeToTerms() {
await driver.tap(find.byValueKey('continue-button'));
await driver.waitUntilNoTransientCallbacks();
expect(await driver.getText(find.byValueKey('appbar-title')), 'Collection');
// wait for collection loading
await driver.waitForCondition(NoPendingPlatformMessages());
});
}
@ -71,6 +72,7 @@ void visitAbout() {
await driver.waitUntilNoTransientCallbacks();
await pressDeviceBackButton();
await driver.waitUntilNoTransientCallbacks();
});
}
@ -83,6 +85,7 @@ void visitSettings() {
await driver.waitUntilNoTransientCallbacks();
await pressDeviceBackButton();
await driver.waitUntilNoTransientCallbacks();
});
}
@ -95,6 +98,7 @@ void sortCollection() {
await driver.waitUntilNoTransientCallbacks();
await driver.tap(find.byValueKey(EntrySortFactor.date.toString()));
await driver.waitUntilNoTransientCallbacks();
});
}
@ -107,6 +111,7 @@ void groupCollection() {
await driver.waitUntilNoTransientCallbacks();
await driver.tap(find.byValueKey(EntryGroupFactor.album.toString()));
await driver.waitUntilNoTransientCallbacks();
});
}
@ -135,13 +140,15 @@ void searchAlbum() {
await driver.tap(find.byValueKey('search-button'));
await driver.waitUntilNoTransientCallbacks();
final album = path.split(targetPicturesDir).last;
final albumPath = targetPicturesDirEmulated;
final albumUniqueName = path.split(albumPath).last;
await driver.tap(find.byType('TextField'));
await driver.enterText(album);
await driver.enterText(albumUniqueName);
final albumChip = find.byValueKey('album-$album');
final albumChip = find.byValueKey('album-$albumPath');
await driver.waitFor(albumChip);
await driver.tap(albumChip);
await driver.waitUntilNoTransientCallbacks();
});
}
@ -210,6 +217,7 @@ void showInfoMetadata() {
print('* back to image');
await driver.tap(find.byValueKey('back-button'));
await driver.waitUntilNoTransientCallbacks();
});
}

View file

@ -1,2 +1,3 @@
const sourcePicturesDir = 'test_driver/assets/';
const targetPicturesDir = '/sdcard/Pictures/Aves Test Driver/';
const targetPicturesDirEmulated = '/storage/emulated/0/Pictures/Aves Test Driver';

View file

@ -19,7 +19,7 @@ String get adb {
const List<String> adbDeviceParam = []; // '[]', '[-d]', '[-e]', or '[-s, <serial_number>]'
Future<void> runAdb(List<String> args) async {
await Process.runSync(adb, [...adbDeviceParam, ...args]);
await Process.run(adb, [...adbDeviceParam, ...args]);
}
Future<void> createDirectory(String dir) async {