upgraded flutter to stable v2.2.0, minSdk 19 -> 20, null safety streams_channel
This commit is contained in:
parent
47b9c1f893
commit
fa0782262d
27 changed files with 186 additions and 137 deletions
4
.github/workflows/check.yml
vendored
4
.github/workflows/check.yml
vendored
|
@ -14,8 +14,8 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: subosito/flutter-action@v1
|
- uses: subosito/flutter-action@v1
|
||||||
with:
|
with:
|
||||||
channel: beta
|
channel: stable
|
||||||
flutter-version: '2.2.0-10.2.pre'
|
flutter-version: '2.2.0'
|
||||||
|
|
||||||
- name: Clone the repository.
|
- name: Clone the repository.
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
|
@ -16,8 +16,8 @@ jobs:
|
||||||
|
|
||||||
- uses: subosito/flutter-action@v1
|
- uses: subosito/flutter-action@v1
|
||||||
with:
|
with:
|
||||||
channel: beta
|
channel: stable
|
||||||
flutter-version: '2.2.0-10.2.pre'
|
flutter-version: '2.2.0'
|
||||||
|
|
||||||
# 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_2.2.0-10.2.pre.sksl.json
|
flutter build apk --bundle-sksl-path shaders_2.2.0.sksl.json
|
||||||
flutter build appbundle --bundle-sksl-path shaders_2.2.0-10.2.pre.sksl.json
|
flutter build appbundle --bundle-sksl-path shaders_2.2.0.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
|
||||||
|
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -40,5 +40,7 @@ app.*.symbols
|
||||||
# Obfuscation related
|
# Obfuscation related
|
||||||
app.*.map.json
|
app.*.map.json
|
||||||
|
|
||||||
# Exceptions to above rules.
|
# Android Studio will place build artifacts here
|
||||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
/android/app/debug
|
||||||
|
/android/app/profile
|
||||||
|
/android/app/release
|
||||||
|
|
|
@ -3,7 +3,10 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
### Changed
|
### Changed
|
||||||
- Upgraded Flutter to beta v2.2.0-10.2.pre
|
- Upgraded Flutter to stable v2.2.0
|
||||||
|
|
||||||
|
### Removed
|
||||||
|
- no support for Android KitKat (API 19), unsupported by Google Maps package
|
||||||
|
|
||||||
## [v1.4.1] - 2021-04-29
|
## [v1.4.1] - 2021-04-29
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -21,7 +21,7 @@ Aves is a gallery and metadata explorer app. It is built for Android, with Flutt
|
||||||
- search and filter by country, place, XMP tag, type (animated, raster, vector…)
|
- search and filter by country, place, XMP tag, type (animated, raster, vector…)
|
||||||
- favorites
|
- favorites
|
||||||
- statistics
|
- statistics
|
||||||
- support Android API 19 ~ 30 (KitKat ~ R)
|
- support Android API 20 ~ 30 (Lollipop ~ R)
|
||||||
- Android integration (app shortcuts, handle view/pick intents)
|
- Android integration (app shortcuts, handle view/pick intents)
|
||||||
|
|
||||||
## Known Issues
|
## Known Issues
|
||||||
|
|
|
@ -53,8 +53,8 @@ android {
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "deckers.thibault.aves"
|
applicationId "deckers.thibault.aves"
|
||||||
minSdkVersion 19
|
minSdkVersion 20
|
||||||
targetSdkVersion 30 // same as compileSdkVersion
|
targetSdkVersion 30
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
manifestPlaceholders = [googleApiKey: keystoreProperties['googleApiKey']]
|
manifestPlaceholders = [googleApiKey: keystoreProperties['googleApiKey']]
|
||||||
|
@ -100,14 +100,14 @@ flutter {
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
maven { url 'https://jitpack.io' }
|
maven { url 'https://jitpack.io' }
|
||||||
maven { url "https://s3.amazonaws.com/repo.commonsware.com" }
|
maven { url 'https://s3.amazonaws.com/repo.commonsware.com' }
|
||||||
}
|
}
|
||||||
|
|
||||||
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-rc02' // v1.5.0-alpha02+ for ShortcutManagerCompat.setDynamicShortcuts
|
implementation 'androidx.core:core-ktx:1.5.0'
|
||||||
implementation 'androidx.exifinterface:exifinterface:1.3.2'
|
implementation 'androidx.exifinterface:exifinterface:1.3.2'
|
||||||
implementation "androidx.multidex:multidex:2.0.1"
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
implementation 'com.commonsware.cwac:document:0.4.1'
|
implementation 'com.commonsware.cwac:document:0.4.1'
|
||||||
implementation 'com.drewnoakes:metadata-extractor:2.16.0'
|
implementation 'com.drewnoakes:metadata-extractor:2.16.0'
|
||||||
implementation 'com.github.deckerst:Android-TiffBitmapFactory:876e53870a' // forked, built by JitPack
|
implementation 'com.github.deckerst:Android-TiffBitmapFactory:876e53870a' // forked, built by JitPack
|
||||||
|
|
|
@ -6,11 +6,10 @@ buildscript {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.2.0'
|
classpath 'com.android.tools.build:gradle:4.2.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
// google-services:4.3.6 is broken, cf https://github.com/google/play-services-plugins/issues/176
|
classpath 'com.google.gms:google-services:4.3.8'
|
||||||
classpath 'com.google.gms:google-services:4.3.5'
|
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.1'
|
||||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.6.0'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +28,6 @@ allprojects {
|
||||||
rootProject.buildDir = '../build'
|
rootProject.buildDir = '../build'
|
||||||
subprojects {
|
subprojects {
|
||||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||||
}
|
|
||||||
subprojects {
|
|
||||||
project.evaluationDependsOn(':app')
|
project.evaluationDependsOn(':app')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,23 @@
|
||||||
import 'package:aves/model/settings/settings.dart';
|
import 'package:aves/model/settings/settings.dart';
|
||||||
import 'package:aves/theme/durations.dart';
|
import 'package:aves/theme/durations.dart';
|
||||||
import 'package:connectivity/connectivity.dart';
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:github/github.dart';
|
import 'package:github/github.dart';
|
||||||
import 'package:google_api_availability/google_api_availability.dart';
|
import 'package:google_api_availability/google_api_availability.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
import 'package:version/version.dart';
|
import 'package:version/version.dart';
|
||||||
|
|
||||||
abstract class AvesAvailability {
|
abstract class AvesAvailability {
|
||||||
void onResume();
|
void onResume();
|
||||||
|
|
||||||
Future<bool > get isConnected;
|
Future<bool> get isConnected;
|
||||||
|
|
||||||
Future<bool > get hasPlayServices;
|
Future<bool> get hasPlayServices;
|
||||||
|
|
||||||
Future<bool> get canLocatePlaces;
|
Future<bool> get canLocatePlaces;
|
||||||
|
|
||||||
Future<bool > get isNewVersionAvailable;
|
Future<bool> get isNewVersionAvailable;
|
||||||
}
|
}
|
||||||
|
|
||||||
class LiveAvesAvailability implements AvesAvailability {
|
class LiveAvesAvailability implements AvesAvailability {
|
||||||
|
@ -31,7 +31,7 @@ class LiveAvesAvailability implements AvesAvailability {
|
||||||
void onResume() => _isConnected = null;
|
void onResume() => _isConnected = null;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool > get isConnected async {
|
Future<bool> get isConnected async {
|
||||||
if (_isConnected != null) return SynchronousFuture(_isConnected!);
|
if (_isConnected != null) return SynchronousFuture(_isConnected!);
|
||||||
final result = await (Connectivity().checkConnectivity());
|
final result = await (Connectivity().checkConnectivity());
|
||||||
_updateConnectivityFromResult(result);
|
_updateConnectivityFromResult(result);
|
||||||
|
@ -47,7 +47,7 @@ class LiveAvesAvailability implements AvesAvailability {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool > get hasPlayServices async {
|
Future<bool> get hasPlayServices async {
|
||||||
if (_hasPlayServices != null) return SynchronousFuture(_hasPlayServices!);
|
if (_hasPlayServices != null) return SynchronousFuture(_hasPlayServices!);
|
||||||
final result = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability();
|
final result = await GoogleApiAvailability.instance.checkGooglePlayServicesAvailability();
|
||||||
_hasPlayServices = result == GooglePlayServicesAvailability.success;
|
_hasPlayServices = result == GooglePlayServicesAvailability.success;
|
||||||
|
@ -60,7 +60,7 @@ class LiveAvesAvailability implements AvesAvailability {
|
||||||
Future<bool> get canLocatePlaces => Future.wait<bool>([isConnected, hasPlayServices]).then((results) => results.every((result) => result));
|
Future<bool> get canLocatePlaces => Future.wait<bool>([isConnected, hasPlayServices]).then((results) => results.every((result) => result));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<bool > get isNewVersionAvailable async {
|
Future<bool> get isNewVersionAvailable async {
|
||||||
if (_isNewVersionAvailable != null) return SynchronousFuture(_isNewVersionAvailable!);
|
if (_isNewVersionAvailable != null) return SynchronousFuture(_isNewVersionAvailable!);
|
||||||
|
|
||||||
final now = DateTime.now();
|
final now = DateTime.now();
|
||||||
|
|
|
@ -52,7 +52,7 @@ class AlbumFilter extends CollectionFilter {
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Color > color(BuildContext context) {
|
Future<Color> color(BuildContext context) {
|
||||||
// do not use async/await and rely on `SynchronousFuture`
|
// do not use async/await and rely on `SynchronousFuture`
|
||||||
// to prevent rebuilding of the `FutureBuilder` listening on this future
|
// to prevent rebuilding of the `FutureBuilder` listening on this future
|
||||||
if (androidFileUtils.getAlbumType(album) == AlbumType.app) {
|
if (androidFileUtils.getAlbumType(album) == AlbumType.app) {
|
||||||
|
|
|
@ -18,7 +18,7 @@ import 'enums.dart';
|
||||||
|
|
||||||
class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
||||||
final CollectionSource source;
|
final CollectionSource source;
|
||||||
final Set<CollectionFilter > filters;
|
final Set<CollectionFilter> filters;
|
||||||
EntryGroupFactor groupFactor;
|
EntryGroupFactor groupFactor;
|
||||||
EntrySortFactor sortFactor;
|
EntrySortFactor sortFactor;
|
||||||
final AChangeNotifier filterChangeNotifier = AChangeNotifier(), sortGroupChangeNotifier = AChangeNotifier();
|
final AChangeNotifier filterChangeNotifier = AChangeNotifier(), sortGroupChangeNotifier = AChangeNotifier();
|
||||||
|
@ -28,7 +28,7 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
||||||
|
|
||||||
List<AvesEntry> _filteredSortedEntries = [];
|
List<AvesEntry> _filteredSortedEntries = [];
|
||||||
|
|
||||||
Map<SectionKey, List<AvesEntry> > sections = Map.unmodifiable({});
|
Map<SectionKey, List<AvesEntry>> sections = Map.unmodifiable({});
|
||||||
|
|
||||||
CollectionLens({
|
CollectionLens({
|
||||||
required this.source,
|
required this.source,
|
||||||
|
@ -37,7 +37,7 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
||||||
EntrySortFactor? sortFactor,
|
EntrySortFactor? sortFactor,
|
||||||
this.id,
|
this.id,
|
||||||
this.listenToSource = true,
|
this.listenToSource = true,
|
||||||
}) : filters = (filters ?? {}).where((f) => f != null).cast<CollectionFilter >().toSet(),
|
}) : filters = (filters ?? {}).where((f) => f != null).cast<CollectionFilter>().toSet(),
|
||||||
groupFactor = groupFactor ?? settings.collectionGroupFactor,
|
groupFactor = groupFactor ?? settings.collectionGroupFactor,
|
||||||
sortFactor = sortFactor ?? settings.collectionSortFactor {
|
sortFactor = sortFactor ?? settings.collectionSortFactor {
|
||||||
id ??= hashCode;
|
id ??= hashCode;
|
||||||
|
@ -69,9 +69,9 @@ class CollectionLens with ChangeNotifier, CollectionActivityMixin {
|
||||||
int get entryCount => _filteredSortedEntries.length;
|
int get entryCount => _filteredSortedEntries.length;
|
||||||
|
|
||||||
// sorted as displayed to the user, i.e. sorted then grouped, not an absolute order on all entries
|
// sorted as displayed to the user, i.e. sorted then grouped, not an absolute order on all entries
|
||||||
List<AvesEntry >? _sortedEntries;
|
List<AvesEntry>? _sortedEntries;
|
||||||
|
|
||||||
List<AvesEntry > get sortedEntries {
|
List<AvesEntry> get sortedEntries {
|
||||||
_sortedEntries ??= List.of(sections.entries.expand((kv) => kv.value));
|
_sortedEntries ??= List.of(sections.entries.expand((kv) => kv.value));
|
||||||
return _sortedEntries!;
|
return _sortedEntries!;
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,8 +203,8 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await metadataDb.saveEntries(movedEntries);
|
await metadataDb.saveEntries(movedEntries);
|
||||||
await metadataDb.saveMetadata(movedEntries.map((entry) => entry.catalogMetadata).where((v) => v != null).cast<CatalogMetadata >().toSet());
|
await metadataDb.saveMetadata(movedEntries.map((entry) => entry.catalogMetadata).where((v) => v != null).cast<CatalogMetadata>().toSet());
|
||||||
await metadataDb.saveAddresses(movedEntries.map((entry) => entry.addressDetails).where((v) => v != null).cast<AddressDetails >().toSet());
|
await metadataDb.saveAddresses(movedEntries.map((entry) => entry.addressDetails).where((v) => v != null).cast<AddressDetails>().toSet());
|
||||||
} else {
|
} else {
|
||||||
await Future.forEach<MoveOpEvent>(movedOps, (movedOp) async {
|
await Future.forEach<MoveOpEvent>(movedOps, (movedOp) async {
|
||||||
final newFields = movedOp.newFields;
|
final newFields = movedOp.newFields;
|
||||||
|
|
|
@ -45,7 +45,7 @@ mixin LocationMixin on SourceBase {
|
||||||
|
|
||||||
// final stopwatch = Stopwatch()..start();
|
// final stopwatch = Stopwatch()..start();
|
||||||
final countryCodeMap = await countryTopology.countryCodeMap(todo.map((entry) => entry.latLng!).toSet());
|
final countryCodeMap = await countryTopology.countryCodeMap(todo.map((entry) => entry.latLng!).toSet());
|
||||||
final newAddresses = <AddressDetails >[];
|
final newAddresses = <AddressDetails>[];
|
||||||
todo.forEach((entry) {
|
todo.forEach((entry) {
|
||||||
final position = entry.latLng;
|
final position = entry.latLng;
|
||||||
final countryCode = countryCodeMap.entries.firstWhereOrNull((kv) => kv.value.contains(position))?.key;
|
final countryCode = countryCodeMap.entries.firstWhereOrNull((kv) => kv.value.contains(position))?.key;
|
||||||
|
@ -98,7 +98,7 @@ mixin LocationMixin on SourceBase {
|
||||||
final progressTotal = todo.length;
|
final progressTotal = todo.length;
|
||||||
setProgress(done: progressDone, total: progressTotal);
|
setProgress(done: progressDone, total: progressTotal);
|
||||||
|
|
||||||
final newAddresses = <AddressDetails >[];
|
final newAddresses = <AddressDetails>[];
|
||||||
await Future.forEach<AvesEntry>(todo, (entry) async {
|
await Future.forEach<AvesEntry>(todo, (entry) async {
|
||||||
final latLng = approximateLatLng(entry);
|
final latLng = approximateLatLng(entry);
|
||||||
if (knownLocations.containsKey(latLng)) {
|
if (knownLocations.containsKey(latLng)) {
|
||||||
|
@ -132,7 +132,7 @@ mixin LocationMixin on SourceBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateLocations() {
|
void updateLocations() {
|
||||||
final locations = visibleEntries.where((entry) => entry.hasAddress).map((entry) => entry.addressDetails).cast<AddressDetails >().toList();
|
final locations = visibleEntries.where((entry) => entry.hasAddress).map((entry) => entry.addressDetails).cast<AddressDetails>().toList();
|
||||||
final updatedPlaces = locations.map((address) => address.place).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase as int Function(String?, String?)?);
|
final updatedPlaces = locations.map((address) => address.place).where((s) => s != null && s.isNotEmpty).toSet().toList()..sort(compareAsciiUpperCase as int Function(String?, String?)?);
|
||||||
if (!listEquals(updatedPlaces, sortedPlaces)) {
|
if (!listEquals(updatedPlaces, sortedPlaces)) {
|
||||||
sortedPlaces = List.unmodifiable(updatedPlaces);
|
sortedPlaces = List.unmodifiable(updatedPlaces);
|
||||||
|
@ -163,7 +163,7 @@ mixin LocationMixin on SourceBase {
|
||||||
_filterEntryCountMap.clear();
|
_filterEntryCountMap.clear();
|
||||||
_filterRecentEntryMap.clear();
|
_filterRecentEntryMap.clear();
|
||||||
} else {
|
} else {
|
||||||
countryCodes = entries.where((entry) => entry.hasAddress).map((entry) => entry.addressDetails!.countryCode).where((v) => v != null).cast<String >().toSet();
|
countryCodes = entries.where((entry) => entry.hasAddress).map((entry) => entry.addressDetails!.countryCode).where((v) => v != null).cast<String>().toSet();
|
||||||
countryCodes.forEach(_filterEntryCountMap.remove);
|
countryCodes.forEach(_filterEntryCountMap.remove);
|
||||||
}
|
}
|
||||||
eventBus.fire(CountrySummaryInvalidatedEvent(countryCodes));
|
eventBus.fire(CountrySummaryInvalidatedEvent(countryCodes));
|
||||||
|
|
|
@ -10,7 +10,6 @@ import 'package:aves/services/service_policy.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
|
||||||
// ignore: import_of_legacy_library_into_null_safe
|
// ignore: import_of_legacy_library_into_null_safe
|
||||||
import 'package:streams_channel/streams_channel.dart';
|
import 'package:streams_channel/streams_channel.dart';
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ class Constants {
|
||||||
sourceUrl: 'https://android.googlesource.com/platform/frameworks/support/+/androidx-main/exifinterface/exifinterface',
|
sourceUrl: 'https://android.googlesource.com/platform/frameworks/support/+/androidx-main/exifinterface/exifinterface',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Android-TiffBitmapFactory',
|
name: 'Android-TiffBitmapFactory (Aves fork)',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
licenseUrl: 'https://github.com/deckerst/Android-TiffBitmapFactory/blob/master/license.txt',
|
licenseUrl: 'https://github.com/deckerst/Android-TiffBitmapFactory/blob/master/license.txt',
|
||||||
sourceUrl: 'https://github.com/deckerst/Android-TiffBitmapFactory',
|
sourceUrl: 'https://github.com/deckerst/Android-TiffBitmapFactory',
|
||||||
|
@ -67,10 +67,10 @@ class Constants {
|
||||||
|
|
||||||
static const List<Dependency> flutterPlugins = [
|
static const List<Dependency> flutterPlugins = [
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Connectivity',
|
name: 'Connectivity Plus',
|
||||||
license: 'BSD 3-Clause',
|
license: 'BSD 3-Clause',
|
||||||
licenseUrl: 'https://github.com/flutter/plugins/blob/master/packages/connectivity/connectivity/LICENSE',
|
licenseUrl: 'https://github.com/fluttercommunity/plus_plugins/blob/main/packages/connectivity_plus/LICENSE',
|
||||||
sourceUrl: 'https://github.com/flutter/plugins/blob/master/packages/connectivity/connectivity',
|
sourceUrl: 'https://github.com/fluttercommunity/plus_plugins/tree/main/packages/connectivity_plus',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'FlutterFire (Core, Analytics, Crashlytics)',
|
name: 'FlutterFire (Core, Analytics, Crashlytics)',
|
||||||
|
@ -79,7 +79,7 @@ class Constants {
|
||||||
sourceUrl: 'https://github.com/FirebaseExtended/flutterfire',
|
sourceUrl: 'https://github.com/FirebaseExtended/flutterfire',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'fijkplayer',
|
name: 'fijkplayer (Aves fork)',
|
||||||
license: 'MIT',
|
license: 'MIT',
|
||||||
licenseUrl: 'https://github.com/deckerst/fijkplayer/blob/master/LICENSE',
|
licenseUrl: 'https://github.com/deckerst/fijkplayer/blob/master/LICENSE',
|
||||||
sourceUrl: 'https://github.com/deckerst/fijkplayer',
|
sourceUrl: 'https://github.com/deckerst/fijkplayer',
|
||||||
|
@ -97,10 +97,10 @@ class Constants {
|
||||||
sourceUrl: 'https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/google_maps_flutter',
|
sourceUrl: 'https://github.com/flutter/plugins/blob/master/packages/google_maps_flutter/google_maps_flutter',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Package Info',
|
name: 'Package Info Plus',
|
||||||
license: 'BSD 3-Clause',
|
license: 'BSD 3-Clause',
|
||||||
licenseUrl: 'https://github.com/flutter/plugins/blob/master/packages/package_info/LICENSE',
|
licenseUrl: 'https://github.com/fluttercommunity/plus_plugins/tree/main/packages/package_info_plus/LICENSE',
|
||||||
sourceUrl: 'https://github.com/flutter/plugins/tree/master/packages/package_info',
|
sourceUrl: 'https://github.com/fluttercommunity/plus_plugins/tree/main/packages/package_info_plus',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Permission Handler',
|
name: 'Permission Handler',
|
||||||
|
@ -127,10 +127,10 @@ class Constants {
|
||||||
sourceUrl: 'https://github.com/tekartik/sqflite',
|
sourceUrl: 'https://github.com/tekartik/sqflite',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Streams Channel',
|
name: 'Streams Channel (Aves fork)',
|
||||||
license: 'Apache 2.0',
|
license: 'Apache 2.0',
|
||||||
licenseUrl: 'https://github.com/loup-v/streams_channel/blob/master/LICENSE',
|
licenseUrl: 'https://github.com/deckerst/aves_streams_channel/blob/master/LICENSE',
|
||||||
sourceUrl: 'https://github.com/loup-v/streams_channel',
|
sourceUrl: 'https://github.com/deckerst/aves_streams_channel',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'URL Launcher',
|
name: 'URL Launcher',
|
||||||
|
@ -229,7 +229,7 @@ class Constants {
|
||||||
sourceUrl: 'https://github.com/benPesso/flutter_decorated_icon',
|
sourceUrl: 'https://github.com/benPesso/flutter_decorated_icon',
|
||||||
),
|
),
|
||||||
Dependency(
|
Dependency(
|
||||||
name: 'Expansion Tile Card',
|
name: 'Expansion Tile Card (Aves fork)',
|
||||||
license: 'BSD 3-Clause',
|
license: 'BSD 3-Clause',
|
||||||
licenseUrl: 'https://github.com/deckerst/expansion_tile_card/blob/master/LICENSE',
|
licenseUrl: 'https://github.com/deckerst/expansion_tile_card/blob/master/LICENSE',
|
||||||
sourceUrl: 'https://github.com/deckerst/expansion_tile_card',
|
sourceUrl: 'https://github.com/deckerst/expansion_tile_card',
|
||||||
|
|
|
@ -5,7 +5,7 @@ import 'package:aves/widgets/common/basic/link_chip.dart';
|
||||||
import 'package:aves/widgets/common/extensions/build_context.dart';
|
import 'package:aves/widgets/common/extensions/build_context.dart';
|
||||||
import 'package:aves/widgets/common/identity/aves_logo.dart';
|
import 'package:aves/widgets/common/identity/aves_logo.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:package_info/package_info.dart';
|
import 'package:package_info_plus/package_info_plus.dart';
|
||||||
|
|
||||||
class AppReference extends StatefulWidget {
|
class AppReference extends StatefulWidget {
|
||||||
@override
|
@override
|
||||||
|
|
|
@ -8,7 +8,7 @@ import 'package:flutter/material.dart';
|
||||||
|
|
||||||
mixin PermissionAwareMixin {
|
mixin PermissionAwareMixin {
|
||||||
Future<bool> checkStoragePermission(BuildContext context, Set<AvesEntry> entries) {
|
Future<bool> checkStoragePermission(BuildContext context, Set<AvesEntry> entries) {
|
||||||
return checkStoragePermissionForAlbums(context, entries.where((e) => e.path != null).map((e) => e.directory).cast<String >().toSet());
|
return checkStoragePermissionForAlbums(context, entries.where((e) => e.path != null).map((e) => e.directory).cast<String>().toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> checkStoragePermissionForAlbums(BuildContext context, Set<String> albumPaths) async {
|
Future<bool> checkStoragePermissionForAlbums(BuildContext context, Set<String> albumPaths) async {
|
||||||
|
|
|
@ -15,7 +15,7 @@ import 'package:flutter/widgets.dart';
|
||||||
mixin SizeAwareMixin {
|
mixin SizeAwareMixin {
|
||||||
Future<bool> checkFreeSpaceForMove(
|
Future<bool> checkFreeSpaceForMove(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
Set<AvesEntry > selection,
|
Set<AvesEntry> selection,
|
||||||
String destinationAlbum,
|
String destinationAlbum,
|
||||||
MoveType moveType,
|
MoveType moveType,
|
||||||
) async {
|
) async {
|
||||||
|
|
|
@ -6,7 +6,7 @@ import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class DraggableThumbLabel<T> extends StatelessWidget {
|
class DraggableThumbLabel<T> extends StatelessWidget {
|
||||||
final double offsetY;
|
final double offsetY;
|
||||||
final List<String > Function(BuildContext context, T item) lineBuilder;
|
final List<String> Function(BuildContext context, T item) lineBuilder;
|
||||||
|
|
||||||
const DraggableThumbLabel({
|
const DraggableThumbLabel({
|
||||||
required this.offsetY,
|
required this.offsetY,
|
||||||
|
|
|
@ -145,7 +145,7 @@ abstract class SectionedListLayoutProvider<T> extends StatelessWidget {
|
||||||
|
|
||||||
bool get showHeaders;
|
bool get showHeaders;
|
||||||
|
|
||||||
Map<SectionKey, List<T> > get sections;
|
Map<SectionKey, List<T>> get sections;
|
||||||
|
|
||||||
double getHeaderExtent(BuildContext context, SectionKey sectionKey);
|
double getHeaderExtent(BuildContext context, SectionKey sectionKey);
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ abstract class SectionedListLayoutProvider<T> extends StatelessWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class SectionedListLayout<T> {
|
class SectionedListLayout<T> {
|
||||||
final Map<SectionKey, List<T> > sections;
|
final Map<SectionKey, List<T>> sections;
|
||||||
final bool showHeaders;
|
final bool showHeaders;
|
||||||
final int columnCount;
|
final int columnCount;
|
||||||
final double tileExtent, spacing;
|
final double tileExtent, spacing;
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import 'package:collection/collection.dart';
|
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
import 'package:aves/theme/durations.dart';
|
import 'package:aves/theme/durations.dart';
|
||||||
import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
|
import 'package:aves/widgets/common/providers/media_query_data_provider.dart';
|
||||||
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
import 'package:aves/widgets/common/tile_extent_controller.dart';
|
||||||
|
import 'package:collection/collection.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/rendering.dart';
|
import 'package:flutter/rendering.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
|
@ -302,7 +302,7 @@ enum SearchBody { suggestions, results }
|
||||||
class SearchPageRoute<T> extends PageRoute<T> {
|
class SearchPageRoute<T> extends PageRoute<T> {
|
||||||
SearchPageRoute({
|
SearchPageRoute({
|
||||||
required this.delegate,
|
required this.delegate,
|
||||||
}) : super(settings: RouteSettings(name: SearchPage.routeName)) {
|
}) : super(settings: RouteSettings(name: SearchPage.routeName)) {
|
||||||
assert(
|
assert(
|
||||||
delegate.route == null,
|
delegate.route == null,
|
||||||
'The ${delegate.runtimeType} instance is currently used by another active '
|
'The ${delegate.runtimeType} instance is currently used by another active '
|
||||||
|
|
|
@ -63,7 +63,7 @@ class XmpNamespace {
|
||||||
return extractData(prop) ? null : prop;
|
return extractData(prop) ? null : prop;
|
||||||
})
|
})
|
||||||
.where((v) => v != null)
|
.where((v) => v != null)
|
||||||
.cast<XmpProp >()
|
.cast<XmpProp>()
|
||||||
.toList()
|
.toList()
|
||||||
..sort((a, b) => compareAsciiUpperCaseNatural(a.displayKey, b.displayKey));
|
..sort((a, b) => compareAsciiUpperCaseNatural(a.displayKey, b.displayKey));
|
||||||
|
|
||||||
|
|
|
@ -12,23 +12,26 @@ abstract class XmpGoogleNamespace extends XmpNamespace {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, InfoLinkHandler> linkifyValues(List<XmpProp> props) {
|
Map<String, InfoLinkHandler> linkifyValues(List<XmpProp> props) {
|
||||||
return Map.fromEntries(dataProps.map((t) {
|
return Map.fromEntries(dataProps
|
||||||
final dataPropPath = t.item1;
|
.map((t) {
|
||||||
final mimePropPath = t.item2;
|
final dataPropPath = t.item1;
|
||||||
final dataProp = props.firstWhereOrNull((prop) => prop.path == dataPropPath);
|
final mimePropPath = t.item2;
|
||||||
final mimeProp = props.firstWhereOrNull((prop) => prop.path == mimePropPath);
|
final dataProp = props.firstWhereOrNull((prop) => prop.path == dataPropPath);
|
||||||
return (dataProp != null && mimeProp != null)
|
final mimeProp = props.firstWhereOrNull((prop) => prop.path == mimePropPath);
|
||||||
? MapEntry(
|
return (dataProp != null && mimeProp != null)
|
||||||
dataProp.displayKey,
|
? MapEntry(
|
||||||
InfoLinkHandler(
|
dataProp.displayKey,
|
||||||
linkText: (context) => context.l10n.viewerInfoOpenLinkText,
|
InfoLinkHandler(
|
||||||
onTap: (context) => OpenEmbeddedDataNotification.xmp(
|
linkText: (context) => context.l10n.viewerInfoOpenLinkText,
|
||||||
propPath: dataProp.path,
|
onTap: (context) => OpenEmbeddedDataNotification.xmp(
|
||||||
mimeType: mimeProp.value,
|
propPath: dataProp.path,
|
||||||
).dispatch(context),
|
mimeType: mimeProp.value,
|
||||||
))
|
).dispatch(context),
|
||||||
: null;
|
))
|
||||||
}).where((kv) => kv != null).cast<MapEntry<String, InfoLinkHandler>>());
|
: null;
|
||||||
|
})
|
||||||
|
.where((kv) => kv != null)
|
||||||
|
.cast<MapEntry<String, InfoLinkHandler>>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
141
pubspec.lock
141
pubspec.lock
|
@ -35,7 +35,7 @@ packages:
|
||||||
name: async
|
name: async
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0"
|
version: "2.6.1"
|
||||||
barcode:
|
barcode:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -99,34 +99,48 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.15.0"
|
version: "1.15.0"
|
||||||
connectivity:
|
connectivity_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: connectivity
|
name: connectivity_plus
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "1.0.1"
|
||||||
connectivity_for_web:
|
connectivity_plus_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: connectivity_for_web
|
name: connectivity_plus_linux
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.4.0"
|
version: "1.0.1"
|
||||||
connectivity_macos:
|
connectivity_plus_macos:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: connectivity_macos
|
name: connectivity_plus_macos
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "1.0.1"
|
||||||
connectivity_platform_interface:
|
connectivity_plus_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: connectivity_platform_interface
|
name: connectivity_plus_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "1.0.1"
|
||||||
|
connectivity_plus_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: connectivity_plus_web
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
connectivity_plus_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: connectivity_plus_windows
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
convert:
|
convert:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -154,7 +168,14 @@ packages:
|
||||||
name: crypto
|
name: crypto
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.0"
|
version: "3.0.1"
|
||||||
|
dbus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: dbus
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.5"
|
||||||
decorated_icon:
|
decorated_icon:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -197,10 +218,10 @@ packages:
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: aves
|
ref: aves
|
||||||
resolved-ref: "7bb26e681ceef9d7b311f0b0f51eab99c3590474"
|
resolved-ref: ded83f43a1c3a664d5e9cfcab687c3caab2cbdb0
|
||||||
url: "git://github.com/deckerst/fijkplayer.git"
|
url: "git://github.com/deckerst/fijkplayer.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.8.7"
|
version: "0.8.8"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -221,7 +242,7 @@ packages:
|
||||||
name: firebase_analytics
|
name: firebase_analytics
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.0.4"
|
version: "8.1.0"
|
||||||
firebase_analytics_platform_interface:
|
firebase_analytics_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -242,7 +263,7 @@ packages:
|
||||||
name: firebase_core
|
name: firebase_core
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.2.0"
|
||||||
firebase_core_platform_interface:
|
firebase_core_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -256,21 +277,21 @@ packages:
|
||||||
name: firebase_core_web
|
name: firebase_core_web
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.3"
|
version: "1.1.0"
|
||||||
firebase_crashlytics:
|
firebase_crashlytics:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: firebase_crashlytics
|
name: firebase_crashlytics
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.3"
|
version: "2.0.4"
|
||||||
firebase_crashlytics_platform_interface:
|
firebase_crashlytics_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: firebase_crashlytics_platform_interface
|
name: firebase_crashlytics_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.3"
|
version: "3.0.4"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -295,13 +316,6 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.0"
|
version: "0.7.0"
|
||||||
flutter_image:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: flutter_image
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "3.0.0"
|
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
|
@ -312,10 +326,10 @@ packages:
|
||||||
description:
|
description:
|
||||||
path: "."
|
path: "."
|
||||||
ref: "issues/829-nullsafety"
|
ref: "issues/829-nullsafety"
|
||||||
resolved-ref: "09b306afdfc5d748cdaf3307084e70fcb6a21c6d"
|
resolved-ref: d9674b5c4fec7d759462a417c8acc548a3e720e1
|
||||||
url: "git://github.com/fleaflet/flutter_map.git"
|
url: "git://github.com/fleaflet/flutter_map.git"
|
||||||
source: git
|
source: git
|
||||||
version: "0.12.0"
|
version: "0.13.0"
|
||||||
flutter_markdown:
|
flutter_markdown:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -393,7 +407,7 @@ packages:
|
||||||
name: google_maps_flutter
|
name: google_maps_flutter
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.4"
|
version: "2.0.5"
|
||||||
google_maps_flutter_platform_interface:
|
google_maps_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -562,13 +576,48 @@ packages:
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "2.0.0"
|
||||||
package_info:
|
package_info_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: package_info
|
name: package_info_plus
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "1.0.1"
|
||||||
|
package_info_plus_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_linux
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
package_info_plus_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_macos
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
|
package_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
package_info_plus_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_web
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
|
package_info_plus_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: package_info_plus_windows
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.1"
|
||||||
palette_generator:
|
palette_generator:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -652,14 +701,14 @@ packages:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.1.0"
|
version: "8.0.0+1"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.0"
|
version: "3.5.0"
|
||||||
petitparser:
|
petitparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -878,9 +927,11 @@ packages:
|
||||||
streams_channel:
|
streams_channel:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: streams_channel
|
path: "."
|
||||||
url: "https://pub.dartlang.org"
|
ref: HEAD
|
||||||
source: hosted
|
resolved-ref: d644fedd9cb79a45b1b92788880e81b846a69d9b
|
||||||
|
url: "git://github.com/deckerst/aves_streams_channel.git"
|
||||||
|
source: git
|
||||||
version: "0.3.0"
|
version: "0.3.0"
|
||||||
string_scanner:
|
string_scanner:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
|
@ -965,7 +1016,7 @@ packages:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.0.3"
|
version: "6.0.4"
|
||||||
url_launcher_linux:
|
url_launcher_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -986,7 +1037,7 @@ packages:
|
||||||
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: "2.0.2"
|
version: "2.0.3"
|
||||||
url_launcher_web:
|
url_launcher_web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1021,7 +1072,7 @@ packages:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.0+1"
|
version: "6.2.0"
|
||||||
watcher:
|
watcher:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1056,7 +1107,7 @@ packages:
|
||||||
name: win32
|
name: win32
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.5"
|
version: "2.1.1"
|
||||||
wkt_parser:
|
wkt_parser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1077,7 +1128,7 @@ packages:
|
||||||
name: xml
|
name: xml
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.0"
|
version: "5.1.1"
|
||||||
yaml:
|
yaml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@ -1086,5 +1137,5 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.0"
|
version: "3.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.12.0 <3.0.0"
|
dart: ">=2.13.0 <3.0.0"
|
||||||
flutter: ">=2.0.0"
|
flutter: ">=2.0.0"
|
||||||
|
|
16
pubspec.yaml
16
pubspec.yaml
|
@ -7,17 +7,9 @@ publish_to: none
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.12.0 <3.0.0'
|
sdk: '>=2.12.0 <3.0.0'
|
||||||
|
|
||||||
# TODO TLAD switch to Flutter stable when possible, currently on dev/beta because of the following mess:
|
# not null safe, as of 2021/05/23
|
||||||
# printing >=5.0.1 depends on pdf ^3.0.1, pdf >=3.0.1 depends on crypto ^3.0.0 and archive ^3.1.0
|
|
||||||
# but `flutter_driver` (shipped with Flutter) dependencies are too old in stable v2.0.1
|
|
||||||
# bump `crypto` and others - 2021/02/05 https://github.com/flutter/flutter/commit/bc1cf4945841ba5874f5262b8146d52750e7c11f
|
|
||||||
# bump `archive` from 3.0.0 to 3.1.2 - 2021/03/04 https://github.com/flutter/flutter/commit/ddcb8d7d6d3fcedc906b2f1bf26b73c018d3dc28
|
|
||||||
|
|
||||||
# not null safe, as of 2021/04/28
|
|
||||||
# `charts_flutter` - https://github.com/google/charts/issues/579
|
# `charts_flutter` - https://github.com/google/charts/issues/579
|
||||||
# `fijkplayer` - https://github.com/befovy/fijkplayer/issues/381
|
|
||||||
# `flutter_map` - https://github.com/fleaflet/flutter_map/issues/829
|
# `flutter_map` - https://github.com/fleaflet/flutter_map/issues/829
|
||||||
# `streams_channel` - unmaintained? - no issue/PR
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
|
@ -26,7 +18,7 @@ dependencies:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
charts_flutter:
|
charts_flutter:
|
||||||
collection:
|
collection:
|
||||||
connectivity:
|
connectivity_plus:
|
||||||
country_code:
|
country_code:
|
||||||
decorated_icon:
|
decorated_icon:
|
||||||
event_bus:
|
event_bus:
|
||||||
|
@ -56,7 +48,7 @@ dependencies:
|
||||||
latlong2:
|
latlong2:
|
||||||
material_design_icons_flutter:
|
material_design_icons_flutter:
|
||||||
overlay_support:
|
overlay_support:
|
||||||
package_info:
|
package_info_plus:
|
||||||
palette_generator:
|
palette_generator:
|
||||||
# TODO TLAD upgrade panorama when this is fixed: https://github.com/zesage/panorama/issues/25 (bug in v0.4.1)
|
# TODO TLAD upgrade panorama when this is fixed: https://github.com/zesage/panorama/issues/25 (bug in v0.4.1)
|
||||||
panorama: 0.4.0
|
panorama: 0.4.0
|
||||||
|
@ -69,6 +61,8 @@ dependencies:
|
||||||
shared_preferences:
|
shared_preferences:
|
||||||
sqflite:
|
sqflite:
|
||||||
streams_channel:
|
streams_channel:
|
||||||
|
git:
|
||||||
|
url: git://github.com/deckerst/aves_streams_channel.git
|
||||||
tuple:
|
tuple:
|
||||||
url_launcher:
|
url_launcher:
|
||||||
version:
|
version:
|
||||||
|
|
File diff suppressed because one or more lines are too long
1
shaders_2.2.0.sksl.json
Normal file
1
shaders_2.2.0.sksl.json
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue