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 - uses: subosito/flutter-action@v1
with: with:
channel: stable channel: stable
flutter-version: '1.22.6' flutter-version: '2.0.1'
- name: Clone the repository. - name: Clone the repository.
uses: actions/checkout@v2 uses: actions/checkout@v2

View file

@ -17,7 +17,7 @@ jobs:
- uses: subosito/flutter-action@v1 - uses: subosito/flutter-action@v1
with: with:
channel: stable 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): # Workaround for this Android Gradle Plugin issue (supposedly fixed in AGP 4.1):
# https://issuetracker.google.com/issues/144111441 # https://issuetracker.google.com/issues/144111441
@ -50,8 +50,8 @@ jobs:
echo "${{ secrets.KEY_JKS }}" > release.keystore.asc echo "${{ secrets.KEY_JKS }}" > release.keystore.asc
gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE
rm release.keystore.asc rm release.keystore.asc
flutter build apk --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_1.22.6.sksl.json flutter build appbundle --bundle-sksl-path shaders_2.0.1.sksl.json
rm $AVES_STORE_FILE rm $AVES_STORE_FILE
env: env:
AVES_STORE_FILE: ${{ github.workspace }}/key.jks 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. All notable changes to this project will be documented in this file.
## [Unreleased] ## [Unreleased]
### Added
- Korean translation
### Changed
- Upgraded Flutter to stable v2.0.1
### Fixed ### Fixed
- various TIFF decoding fixes - various TIFF decoding fixes

View file

@ -104,7 +104,7 @@ repositories {
dependencies { dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' 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 'androidx.exifinterface:exifinterface:1.3.2'
implementation 'com.commonsware.cwac:document:0.4.1' implementation 'com.commonsware.cwac:document:0.4.1'
implementation 'com.drewnoakes:metadata-extractor:2.15.0' implementation 'com.drewnoakes:metadata-extractor:2.15.0'

View file

@ -8,11 +8,10 @@ buildscript {
jcenter() jcenter()
} }
dependencies { 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:4.1.2'
classpath 'com.android.tools.build:gradle:3.6.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.5' 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 android.enableJetifier=true
# Kotlin code style for this project: "official" or "obsolete": # Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official kotlin.code.style=official
android.enableR8=true

View file

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

View file

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

View file

@ -76,6 +76,7 @@ class AlbumFilter extends CollectionFilter {
@override @override
String get category => type; String get category => type;
// key `album-{path}` is expected by test driver
@override @override
String get key => '$type-$album'; 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> todoEntries,
@required Set<AvesEntry> favouriteEntries, @required Set<AvesEntry> favouriteEntries,
@required bool copy, @required bool copy,

View file

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

View file

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

View file

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

View file

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

View file

@ -66,7 +66,6 @@ class AvesFilterChip extends StatefulWidget {
final RenderBox overlay = Overlay.of(context).context.findRenderObject(); final RenderBox overlay = Overlay.of(context).context.findRenderObject();
final touchArea = Size(40, 40); 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>( final selectedAction = await showMenu<ChipAction>(
context: context, context: context,
position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size), position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size),

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -292,6 +292,7 @@ class _SectionedContentState<T extends CollectionFilter> extends State<_Sectione
Widget content; Widget content;
if (empty) { if (empty) {
content = SliverFillRemaining( content = SliverFillRemaining(
hasScrollBody: false,
child: Selector<MediaQueryData, double>( child: Selector<MediaQueryData, double>(
selector: (context, mq) => mq.effectiveBottomPadding, selector: (context, mq) => mq.effectiveBottomPadding,
builder: (context, mqPaddingBottom, child) { builder: (context, mqPaddingBottom, child) {
@ -301,7 +302,6 @@ class _SectionedContentState<T extends CollectionFilter> extends State<_Sectione
); );
}, },
), ),
hasScrollBody: false,
); );
} else { } else {
content = SectionedListSliver<FilterGridItem<T>>(); 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 { void _showMenu(BuildContext context, T filter, Offset tapPosition) async {
final RenderBox overlay = Overlay.of(context).context.findRenderObject(); final RenderBox overlay = Overlay.of(context).context.findRenderObject();
final touchArea = Size(40, 40); 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>( final selectedAction = await showMenu<ChipAction>(
context: context, context: context,
position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size), position: RelativeRect.fromRect(tapPosition & touchArea, Offset.zero & overlay.size),

View file

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

View file

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

View file

@ -186,7 +186,9 @@ class _OwnerPropState extends State<OwnerProp> {
text: context.l10n.viewerInfoLabelOwner, text: context.l10n.viewerInfoLabelOwner,
style: InfoRowGroup.keyStyle, 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, alignment: PlaceholderAlignment.middle,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: 4), padding: EdgeInsets.symmetric(horizontal: 4),

View file

@ -72,6 +72,7 @@ class _EntryLeafletMapState extends State<EntryLeafletMap> with AutomaticKeepAli
zoom: widget.initialZoom, zoom: widget.initialZoom,
interactive: false, interactive: false,
), ),
mapController: _mapController,
children: [ children: [
_buildMapLayer(), _buildMapLayer(),
ScaleLayerWidget( 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( final button = ElevatedButton(
key: Key('continue-button'), key: Key('continue-button'),
child: Text(context.l10n.continueButtonLabel),
onPressed: _hasAcceptedTerms onPressed: _hasAcceptedTerms
? () { ? () {
settings.hasAcceptedTerms = true; settings.hasAcceptedTerms = true;
@ -124,6 +123,7 @@ class _WelcomePageState extends State<WelcomePage> {
); );
} }
: null, : null,
child: Text(context.l10n.continueButtonLabel),
); );
return MediaQuery.of(context).orientation == Orientation.portrait return MediaQuery.of(context).orientation == Orientation.portrait

View file

@ -7,14 +7,14 @@ packages:
name: _fe_analyzer_shared name: _fe_analyzer_shared
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "12.0.0" version: "14.0.0"
analyzer: analyzer:
dependency: transitive dependency: transitive
description: description:
name: analyzer name: analyzer
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.40.6" version: "0.41.2"
ansicolor: ansicolor:
dependency: transitive dependency: transitive
description: description:
@ -42,7 +42,7 @@ packages:
name: async name: async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.5.0-nullsafety.1" version: "2.5.0"
barcode: barcode:
dependency: transitive dependency: transitive
description: description:
@ -56,21 +56,21 @@ packages:
name: boolean_selector name: boolean_selector
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0-nullsafety.1" version: "2.1.0"
characters: characters:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0-nullsafety.3" version: "1.1.0"
charcode: charcode:
dependency: transitive dependency: transitive
description: description:
name: charcode name: charcode
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0-nullsafety.1" version: "1.2.0"
charts_common: charts_common:
dependency: transitive dependency: transitive
description: description:
@ -91,49 +91,42 @@ packages:
name: cli_util name: cli_util
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.0" version: "0.3.0"
clock: clock:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0-nullsafety.1" version: "1.1.0"
collection: collection:
dependency: "direct main" dependency: "direct main"
description: description:
name: collection name: collection
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.15.0-nullsafety.3" version: "1.15.0"
connectivity: connectivity:
dependency: "direct main" dependency: "direct main"
description: description:
name: connectivity name: connectivity
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "3.0.2"
connectivity_for_web:
dependency: transitive
description:
name: connectivity_for_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.3.1+4"
connectivity_macos: connectivity_macos:
dependency: transitive dependency: transitive
description: description:
name: connectivity_macos name: connectivity_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.0+7" version: "0.2.0"
connectivity_platform_interface: connectivity_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: connectivity_platform_interface name: connectivity_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.6" version: "2.0.0"
console_log_handler: console_log_handler:
dependency: transitive dependency: transitive
description: description:
@ -161,7 +154,7 @@ packages:
name: coverage name: coverage
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.14.2" version: "0.15.2"
crypto: crypto:
dependency: transitive dependency: transitive
description: description:
@ -182,7 +175,7 @@ packages:
name: event_bus name: event_bus
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.1" version: "2.0.0"
expansion_tile_card: expansion_tile_card:
dependency: "direct main" dependency: "direct main"
description: description:
@ -198,21 +191,21 @@ packages:
name: fake_async name: fake_async
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0-nullsafety.1" version: "1.2.0"
ffi: ffi:
dependency: transitive dependency: transitive
description: description:
name: ffi name: ffi
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.3" version: "1.0.0"
file: file:
dependency: transitive dependency: transitive
description: description:
name: file name: file
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "6.0.0-nullsafety.2" version: "6.0.0"
firebase: firebase:
dependency: transitive dependency: transitive
description: description:
@ -233,7 +226,7 @@ packages:
name: firebase_analytics_platform_interface name: firebase_analytics_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.3" version: "1.1.0"
firebase_analytics_web: firebase_analytics_web:
dependency: transitive dependency: transitive
description: description:
@ -306,13 +299,13 @@ packages:
name: flutter_highlight name: flutter_highlight
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.0" version: "0.7.0"
flutter_ijkplayer: flutter_ijkplayer:
dependency: "direct main" dependency: "direct main"
description: description:
path: "." path: "."
ref: HEAD ref: HEAD
resolved-ref: c1b7f25e2a3bc67ab7b30561af49a62ae9a8c409 resolved-ref: d4e079404ba8e4f82a7e053ffdc47af787a61c3b
url: "git://github.com/deckerst/flutter_ijkplayer.git" url: "git://github.com/deckerst/flutter_ijkplayer.git"
source: git source: git
version: "0.3.7" version: "0.3.7"
@ -334,7 +327,7 @@ packages:
name: flutter_localized_locales name: flutter_localized_locales
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.2" version: "2.0.1"
flutter_map: flutter_map:
dependency: "direct main" dependency: "direct main"
description: description:
@ -355,21 +348,21 @@ packages:
name: flutter_plugin_android_lifecycle name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.11" version: "2.0.0"
flutter_staggered_animations: flutter_staggered_animations:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_staggered_animations name: flutter_staggered_animations
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.2" version: "1.0.0"
flutter_svg: flutter_svg:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_svg name: flutter_svg
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.19.1" version: "0.19.3"
flutter_test: flutter_test:
dependency: "direct dev" dependency: "direct dev"
description: flutter description: flutter
@ -405,35 +398,35 @@ packages:
name: glob name: glob
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "2.0.0"
google_api_availability: google_api_availability:
dependency: "direct main" dependency: "direct main"
description: description:
name: google_api_availability name: google_api_availability
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.4" version: "3.0.0"
google_maps_flutter: google_maps_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: google_maps_flutter name: google_maps_flutter
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "2.0.1"
google_maps_flutter_platform_interface: google_maps_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: google_maps_flutter_platform_interface name: google_maps_flutter_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "2.0.0"
highlight: highlight:
dependency: transitive dependency: transitive
description: description:
name: highlight name: highlight
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.0" version: "0.7.0"
http: http:
dependency: transitive dependency: transitive
description: description:
@ -447,7 +440,7 @@ packages:
name: http_multi_server name: http_multi_server
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.0" version: "3.0.0"
http_parser: http_parser:
dependency: transitive dependency: transitive
description: description:
@ -468,21 +461,21 @@ packages:
name: intl name: intl
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.16.1" version: "0.17.0"
io: io:
dependency: transitive dependency: transitive
description: description:
name: io name: io
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.5" version: "1.0.0"
js: js:
dependency: transitive dependency: transitive
description: description:
name: js name: js
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.6.3-nullsafety.2" version: "0.6.3"
json_annotation: json_annotation:
dependency: transitive dependency: transitive
description: description:
@ -490,13 +483,6 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.1.1" 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: latlong:
dependency: "direct main" dependency: "direct main"
description: description:
@ -531,21 +517,21 @@ packages:
name: matcher name: matcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.12.10-nullsafety.1" version: "0.12.10"
material_design_icons_flutter: material_design_icons_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: material_design_icons_flutter name: material_design_icons_flutter
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.5855" version: "4.0.5955"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0-nullsafety.3" version: "1.3.0"
mgrs_dart: mgrs_dart:
dependency: transitive dependency: transitive
description: description:
@ -559,7 +545,7 @@ packages:
name: mime name: mime
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.9.7" version: "1.0.0"
motion_sensors: motion_sensors:
dependency: transitive dependency: transitive
description: description:
@ -573,21 +559,7 @@ packages:
name: nested name: nested
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.4" version: "1.0.0"
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"
node_preamble: node_preamble:
dependency: transitive dependency: transitive
description: description:
@ -601,7 +573,7 @@ packages:
name: overlay_support name: overlay_support
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.5" version: "1.2.0-nullsafety.0"
package_config: package_config:
dependency: transitive dependency: transitive
description: description:
@ -615,7 +587,7 @@ packages:
name: package_info name: package_info
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.4.3+4" version: "2.0.0"
palette_generator: palette_generator:
dependency: "direct main" dependency: "direct main"
description: description:
@ -636,7 +608,7 @@ packages:
name: path name: path
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0-nullsafety.1" version: "1.8.0"
path_drawing: path_drawing:
dependency: transitive dependency: transitive
description: description:
@ -657,21 +629,21 @@ packages:
name: path_provider_linux name: path_provider_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.1+2" version: "2.0.0"
path_provider_platform_interface: path_provider_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: path_provider_platform_interface name: path_provider_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "2.0.0"
path_provider_windows: path_provider_windows:
dependency: transitive dependency: transitive
description: description:
name: path_provider_windows name: path_provider_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.4+3" version: "2.0.0"
pdf: pdf:
dependency: "direct main" dependency: "direct main"
description: description:
@ -685,7 +657,7 @@ packages:
name: pedantic name: pedantic
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.10.0-nullsafety.2" version: "1.11.0"
percent_indicator: percent_indicator:
dependency: "direct main" dependency: "direct main"
description: description:
@ -720,7 +692,7 @@ packages:
name: platform name: platform
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "3.0.0-nullsafety.2" version: "3.0.0"
plugin_platform_interface: plugin_platform_interface:
dependency: transitive dependency: transitive
description: description:
@ -734,7 +706,7 @@ packages:
name: pool name: pool
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.5.0-nullsafety.2" version: "1.5.0"
positioned_tap_detector: positioned_tap_detector:
dependency: transitive dependency: transitive
description: description:
@ -755,7 +727,7 @@ packages:
name: process name: process
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.0.0-nullsafety.2" version: "4.0.0"
proj4dart: proj4dart:
dependency: transitive dependency: transitive
description: description:
@ -769,14 +741,14 @@ packages:
name: provider name: provider
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "4.3.3" version: "5.0.0"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
name: pub_semver name: pub_semver
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.4.4" version: "2.0.0"
qr: qr:
dependency: transitive dependency: transitive
description: description:
@ -797,42 +769,42 @@ packages:
name: shared_preferences name: shared_preferences
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.5.12+4" version: "2.0.3"
shared_preferences_linux: shared_preferences_linux:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_linux name: shared_preferences_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.2+4" version: "2.0.0"
shared_preferences_macos: shared_preferences_macos:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_macos name: shared_preferences_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.1+11" version: "2.0.0"
shared_preferences_platform_interface: shared_preferences_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_platform_interface name: shared_preferences_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.4" version: "2.0.0"
shared_preferences_web: shared_preferences_web:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_web name: shared_preferences_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.2+7" version: "2.0.0"
shared_preferences_windows: shared_preferences_windows:
dependency: transitive dependency: transitive
description: description:
name: shared_preferences_windows name: shared_preferences_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.2+3" version: "2.0.0"
shelf: shelf:
dependency: transitive dependency: transitive
description: description:
@ -872,56 +844,56 @@ packages:
name: source_map_stack_trace name: source_map_stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0-nullsafety.3" version: "2.1.0"
source_maps: source_maps:
dependency: transitive dependency: transitive
description: description:
name: source_maps name: source_maps
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.10.10-nullsafety.2" version: "0.10.10"
source_span: source_span:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.0-nullsafety.2" version: "1.8.0"
sqflite: sqflite:
dependency: "direct main" dependency: "direct main"
description: description:
name: sqflite name: sqflite
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.2+3" version: "2.0.0+2"
sqflite_common: sqflite_common:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.3+1" version: "2.0.0+1"
stack_trace: stack_trace:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.10.0-nullsafety.1" version: "1.10.0"
stream_channel: stream_channel:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0-nullsafety.1" version: "2.1.0"
stream_transform: stream_transform:
dependency: transitive dependency: transitive
description: description:
name: stream_transform name: stream_transform
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0" version: "2.0.0"
streams_channel: streams_channel:
dependency: "direct main" dependency: "direct main"
description: description:
@ -935,7 +907,7 @@ packages:
name: string_scanner name: string_scanner
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0-nullsafety.1" version: "1.1.0"
sync_http: sync_http:
dependency: transitive dependency: transitive
description: description:
@ -949,35 +921,35 @@ packages:
name: synchronized name: synchronized
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.0+2" version: "3.0.0"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.2.0-nullsafety.1" version: "1.2.0"
test: test:
dependency: "direct dev" dependency: "direct dev"
description: description:
name: test name: test
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.16.0-nullsafety.5" version: "1.16.5"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.2.19-nullsafety.2" version: "0.2.19"
test_core: test_core:
dependency: transitive dependency: transitive
description: description:
name: test_core name: test_core
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.3.12-nullsafety.5" version: "0.3.15"
transparent_image: transparent_image:
dependency: transitive dependency: transitive
description: description:
@ -998,7 +970,7 @@ packages:
name: typed_data name: typed_data
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0-nullsafety.3" version: "1.3.0"
unicode: unicode:
dependency: transitive dependency: transitive
description: description:
@ -1012,42 +984,42 @@ packages:
name: url_launcher name: url_launcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.7.10" version: "6.0.2"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_linux name: url_launcher_linux
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.1+4" version: "2.0.0"
url_launcher_macos: url_launcher_macos:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_macos name: url_launcher_macos
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.1+9" version: "2.0.0"
url_launcher_platform_interface: url_launcher_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_platform_interface name: url_launcher_platform_interface
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.0.9" version: "2.0.1"
url_launcher_web: url_launcher_web:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_web name: url_launcher_web
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.5+3" version: "2.0.0"
url_launcher_windows: url_launcher_windows:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_windows name: url_launcher_windows
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.0.1+3" version: "2.0.0"
validate: validate:
dependency: transitive dependency: transitive
description: description:
@ -1061,7 +1033,7 @@ packages:
name: vector_math name: vector_math
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0-nullsafety.3" version: "2.1.0"
version: version:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1076,27 +1048,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "5.5.0" 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: watcher:
dependency: transitive dependency: transitive
description: description:
name: watcher name: watcher
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.9.7+15" version: "1.0.0"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
name: web_socket_channel name: web_socket_channel
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.1.0" version: "1.2.0"
webdriver: webdriver:
dependency: transitive dependency: transitive
description: description:
@ -1117,7 +1082,7 @@ packages:
name: win32 name: win32
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.7.4+1" version: "2.0.0"
wkt_parser: wkt_parser:
dependency: transitive dependency: transitive
description: description:
@ -1131,7 +1096,7 @@ packages:
name: xdg_directories name: xdg_directories
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.1.2" version: "0.2.0"
xml: xml:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1145,7 +1110,7 @@ packages:
name: yaml name: yaml
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.2.1" version: "3.1.0"
sdks: sdks:
dart: ">=2.10.2 <2.11.0" dart: ">=2.12.0 <3.0.0"
flutter: ">=1.22.2 <2.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 version: 1.3.5+41
environment: environment:
sdk: ">=2.7.0 <3.0.0" sdk: '>=2.10.0 <3.0.0'
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
flutter_localizations: flutter_localizations:
sdk: flutter 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: collection:
connectivity: connectivity:
country_code: # not null safe, as of 2021/03/09 - unmaintained? # `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:
# `decorated_icon` not null safe, as of 2021/03/09 - https://github.com/benPesso/flutter_decorated_icon/issues/2
decorated_icon:
event_bus: event_bus:
# TODO TLAD merge null safe `expansion_tile_card` to fork # TODO TLAD merge null safe `expansion_tile_card` to fork
expansion_tile_card: expansion_tile_card:
@ -26,43 +29,63 @@ dependencies:
firebase_analytics: firebase_analytics:
firebase_crashlytics: firebase_crashlytics:
# TODO TLAD migrate to basic SnackBar or `another_flushbar` # 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_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 # path: ../flutter_ijkplayer
git: git:
url: git://github.com/deckerst/flutter_ijkplayer.git url: git://github.com/deckerst/flutter_ijkplayer.git
flutter_localized_locales: 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_markdown:
flutter_staggered_animations: flutter_staggered_animations:
flutter_svg: flutter_svg:
# TODO TLAD migrate to `geocoding` (or reimplement) - https://github.com/Baseflow/flutter-geocoding/issues/37 # 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: github:
google_api_availability: google_api_availability:
google_maps_flutter: google_maps_flutter:
intl: 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: 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: package_info:
palette_generator: # not null safe, as of 2021/03/09 - https://github.com/flutter/packages/pull/287 # `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:
# `panorama` not null safe, as of 2021/03/09 - no issue/PR
panorama:
pdf: pdf:
pedantic: pedantic:
percent_indicator: percent_indicator:
permission_handler: 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: provider:
shared_preferences: shared_preferences:
sqflite: 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: tuple:
url_launcher: url_launcher:
version: version:
xml: xml:
dependency_overrides:
# because of `charts_flutter`
intl: '>=0.17.0'
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter 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/main.dart' as app;
import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/enums.dart';
import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/settings/settings.dart';
@ -22,6 +24,7 @@ Future<void> configureAndLaunch() async {
await settings.init(); await settings.init();
settings.keepScreenOn = KeepScreenOn.always; settings.keepScreenOn = KeepScreenOn.always;
settings.hasAcceptedTerms = false; settings.hasAcceptedTerms = false;
settings.locale = Locale('en');
app.main(); app.main();
} }

View file

@ -58,7 +58,8 @@ void agreeToTerms() {
await driver.tap(find.byValueKey('continue-button')); await driver.tap(find.byValueKey('continue-button'));
await driver.waitUntilNoTransientCallbacks(); 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 driver.waitUntilNoTransientCallbacks();
await pressDeviceBackButton(); await pressDeviceBackButton();
await driver.waitUntilNoTransientCallbacks();
}); });
} }
@ -83,6 +85,7 @@ void visitSettings() {
await driver.waitUntilNoTransientCallbacks(); await driver.waitUntilNoTransientCallbacks();
await pressDeviceBackButton(); await pressDeviceBackButton();
await driver.waitUntilNoTransientCallbacks();
}); });
} }
@ -95,6 +98,7 @@ void sortCollection() {
await driver.waitUntilNoTransientCallbacks(); await driver.waitUntilNoTransientCallbacks();
await driver.tap(find.byValueKey(EntrySortFactor.date.toString())); await driver.tap(find.byValueKey(EntrySortFactor.date.toString()));
await driver.waitUntilNoTransientCallbacks();
}); });
} }
@ -107,6 +111,7 @@ void groupCollection() {
await driver.waitUntilNoTransientCallbacks(); await driver.waitUntilNoTransientCallbacks();
await driver.tap(find.byValueKey(EntryGroupFactor.album.toString())); 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.tap(find.byValueKey('search-button'));
await driver.waitUntilNoTransientCallbacks(); 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.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.waitFor(albumChip);
await driver.tap(albumChip); await driver.tap(albumChip);
await driver.waitUntilNoTransientCallbacks();
}); });
} }
@ -210,6 +217,7 @@ void showInfoMetadata() {
print('* back to image'); print('* back to image');
await driver.tap(find.byValueKey('back-button')); await driver.tap(find.byValueKey('back-button'));
await driver.waitUntilNoTransientCallbacks();
}); });
} }

View file

@ -1,2 +1,3 @@
const sourcePicturesDir = 'test_driver/assets/'; const sourcePicturesDir = 'test_driver/assets/';
const targetPicturesDir = '/sdcard/Pictures/Aves Test Driver/'; 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>]' const List<String> adbDeviceParam = []; // '[]', '[-d]', '[-e]', or '[-s, <serial_number>]'
Future<void> runAdb(List<String> args) async { 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 { Future<void> createDirectory(String dir) async {