mirror of
https://github.com/flutter/samples.git
synced 2025-11-13 10:59:04 +00:00
Update desktop_photo_search to use url_launcher's Link (#780)
This commit is contained in:
@@ -128,7 +128,7 @@ class UnsplashHomePage extends StatelessWidget {
|
||||
await photoSearchModel.download(photo: photo);
|
||||
final photoFile = XFile.fromData(fileData,
|
||||
mimeType: 'image/jpeg');
|
||||
photoFile.saveTo(path);
|
||||
await photoFile.saveTo(path);
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
@@ -43,7 +43,7 @@ class _$SearchSerializer implements StructuredSerializer<Search> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'query':
|
||||
result.query = serializers.deserialize(value,
|
||||
@@ -72,12 +72,8 @@ class _$Search extends Search {
|
||||
(new SearchBuilder()..update(updates)).build();
|
||||
|
||||
_$Search._({this.query, this.results}) : super._() {
|
||||
if (query == null) {
|
||||
throw new BuiltValueNullFieldError('Search', 'query');
|
||||
}
|
||||
if (results == null) {
|
||||
throw new BuiltValueNullFieldError('Search', 'results');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(query, 'Search', 'query');
|
||||
BuiltValueNullFieldError.checkNotNull(results, 'Search', 'results');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -122,9 +118,10 @@ class SearchBuilder implements Builder<Search, SearchBuilder> {
|
||||
SearchBuilder();
|
||||
|
||||
SearchBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_query = _$v.query;
|
||||
_results = _$v.results?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_query = $v.query;
|
||||
_results = $v.results.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -132,9 +129,7 @@ class SearchBuilder implements Builder<Search, SearchBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Search other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Search;
|
||||
}
|
||||
|
||||
@@ -147,7 +142,11 @@ class SearchBuilder implements Builder<Search, SearchBuilder> {
|
||||
_$Search build() {
|
||||
_$Search _$result;
|
||||
try {
|
||||
_$result = _$v ?? new _$Search._(query: query, results: results.build());
|
||||
_$result = _$v ??
|
||||
new _$Search._(
|
||||
query: BuiltValueNullFieldError.checkNotNull(
|
||||
query, 'Search', 'query'),
|
||||
results: results.build());
|
||||
} catch (_) {
|
||||
String _$failedField;
|
||||
try {
|
||||
|
||||
@@ -40,7 +40,7 @@ class _$ApiErrorSerializer implements StructuredSerializer<ApiError> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'errors':
|
||||
result.errors.replace(serializers.deserialize(value,
|
||||
@@ -63,9 +63,7 @@ class _$ApiError extends ApiError {
|
||||
(new ApiErrorBuilder()..update(updates)).build();
|
||||
|
||||
_$ApiError._({this.errors}) : super._() {
|
||||
if (errors == null) {
|
||||
throw new BuiltValueNullFieldError('ApiError', 'errors');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(errors, 'ApiError', 'errors');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -104,8 +102,9 @@ class ApiErrorBuilder implements Builder<ApiError, ApiErrorBuilder> {
|
||||
ApiErrorBuilder();
|
||||
|
||||
ApiErrorBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_errors = _$v.errors?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_errors = $v.errors.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -113,9 +112,7 @@ class ApiErrorBuilder implements Builder<ApiError, ApiErrorBuilder> {
|
||||
|
||||
@override
|
||||
void replace(ApiError other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$ApiError;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,22 +31,26 @@ class _$CurrentUserCollectionsSerializer
|
||||
'id',
|
||||
serializers.serialize(object.id, specifiedType: const FullType(int)),
|
||||
];
|
||||
if (object.title != null) {
|
||||
Object value;
|
||||
value = object.title;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('title')
|
||||
..add(serializers.serialize(object.title,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.publishedAt != null) {
|
||||
value = object.publishedAt;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('published_at')
|
||||
..add(serializers.serialize(object.publishedAt,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.updatedAt != null) {
|
||||
value = object.updatedAt;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('updated_at')
|
||||
..add(serializers.serialize(object.updatedAt,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
return result;
|
||||
@@ -62,7 +66,7 @@ class _$CurrentUserCollectionsSerializer
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'id':
|
||||
result.id = serializers.deserialize(value,
|
||||
@@ -104,9 +108,7 @@ class _$CurrentUserCollections extends CurrentUserCollections {
|
||||
_$CurrentUserCollections._(
|
||||
{this.id, this.title, this.publishedAt, this.updatedAt})
|
||||
: super._() {
|
||||
if (id == null) {
|
||||
throw new BuiltValueNullFieldError('CurrentUserCollections', 'id');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(id, 'CurrentUserCollections', 'id');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -169,11 +171,12 @@ class CurrentUserCollectionsBuilder
|
||||
CurrentUserCollectionsBuilder();
|
||||
|
||||
CurrentUserCollectionsBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_id = _$v.id;
|
||||
_title = _$v.title;
|
||||
_publishedAt = _$v.publishedAt;
|
||||
_updatedAt = _$v.updatedAt;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_id = $v.id;
|
||||
_title = $v.title;
|
||||
_publishedAt = $v.publishedAt;
|
||||
_updatedAt = $v.updatedAt;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -181,9 +184,7 @@ class CurrentUserCollectionsBuilder
|
||||
|
||||
@override
|
||||
void replace(CurrentUserCollections other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$CurrentUserCollections;
|
||||
}
|
||||
|
||||
@@ -196,7 +197,8 @@ class CurrentUserCollectionsBuilder
|
||||
_$CurrentUserCollections build() {
|
||||
final _$result = _$v ??
|
||||
new _$CurrentUserCollections._(
|
||||
id: id,
|
||||
id: BuiltValueNullFieldError.checkNotNull(
|
||||
id, 'CurrentUserCollections', 'id'),
|
||||
title: title,
|
||||
publishedAt: publishedAt,
|
||||
updatedAt: updatedAt);
|
||||
|
||||
@@ -22,41 +22,47 @@ class _$ExifSerializer implements StructuredSerializer<Exif> {
|
||||
Iterable<Object> serialize(Serializers serializers, Exif object,
|
||||
{FullType specifiedType = FullType.unspecified}) {
|
||||
final result = <Object>[];
|
||||
if (object.make != null) {
|
||||
Object value;
|
||||
value = object.make;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('make')
|
||||
..add(serializers.serialize(object.make,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.model != null) {
|
||||
value = object.model;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('model')
|
||||
..add(serializers.serialize(object.model,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.exposureTime != null) {
|
||||
value = object.exposureTime;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('exposure_time')
|
||||
..add(serializers.serialize(object.exposureTime,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.aperture != null) {
|
||||
value = object.aperture;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('aperture')
|
||||
..add(serializers.serialize(object.aperture,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.focalLength != null) {
|
||||
value = object.focalLength;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('focal_length')
|
||||
..add(serializers.serialize(object.focalLength,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.iso != null) {
|
||||
value = object.iso;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('iso')
|
||||
..add(serializers.serialize(object.iso,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -70,7 +76,7 @@ class _$ExifSerializer implements StructuredSerializer<Exif> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'make':
|
||||
result.make = serializers.deserialize(value,
|
||||
@@ -203,13 +209,14 @@ class ExifBuilder implements Builder<Exif, ExifBuilder> {
|
||||
ExifBuilder();
|
||||
|
||||
ExifBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_make = _$v.make;
|
||||
_model = _$v.model;
|
||||
_exposureTime = _$v.exposureTime;
|
||||
_aperture = _$v.aperture;
|
||||
_focalLength = _$v.focalLength;
|
||||
_iso = _$v.iso;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_make = $v.make;
|
||||
_model = $v.model;
|
||||
_exposureTime = $v.exposureTime;
|
||||
_aperture = $v.aperture;
|
||||
_focalLength = $v.focalLength;
|
||||
_iso = $v.iso;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -217,9 +224,7 @@ class ExifBuilder implements Builder<Exif, ExifBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Exif other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Exif;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,28 +22,33 @@ class _$LinksSerializer implements StructuredSerializer<Links> {
|
||||
Iterable<Object> serialize(Serializers serializers, Links object,
|
||||
{FullType specifiedType = FullType.unspecified}) {
|
||||
final result = <Object>[];
|
||||
if (object.self != null) {
|
||||
Object value;
|
||||
value = object.self;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('self')
|
||||
..add(serializers.serialize(object.self,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.html != null) {
|
||||
value = object.html;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('html')
|
||||
..add(serializers.serialize(object.html,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.download != null) {
|
||||
value = object.download;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('download')
|
||||
..add(serializers.serialize(object.download,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.downloadLocation != null) {
|
||||
value = object.downloadLocation;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('download_location')
|
||||
..add(serializers.serialize(object.downloadLocation,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
return result;
|
||||
@@ -58,7 +63,7 @@ class _$LinksSerializer implements StructuredSerializer<Links> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'self':
|
||||
result.self = serializers.deserialize(value,
|
||||
@@ -157,11 +162,12 @@ class LinksBuilder implements Builder<Links, LinksBuilder> {
|
||||
LinksBuilder();
|
||||
|
||||
LinksBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_self = _$v.self;
|
||||
_html = _$v.html;
|
||||
_download = _$v.download;
|
||||
_downloadLocation = _$v.downloadLocation;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_self = $v.self;
|
||||
_html = $v.html;
|
||||
_download = $v.download;
|
||||
_downloadLocation = $v.downloadLocation;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -169,9 +175,7 @@ class LinksBuilder implements Builder<Links, LinksBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Links other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Links;
|
||||
}
|
||||
|
||||
|
||||
@@ -22,22 +22,26 @@ class _$LocationSerializer implements StructuredSerializer<Location> {
|
||||
Iterable<Object> serialize(Serializers serializers, Location object,
|
||||
{FullType specifiedType = FullType.unspecified}) {
|
||||
final result = <Object>[];
|
||||
if (object.city != null) {
|
||||
Object value;
|
||||
value = object.city;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('city')
|
||||
..add(serializers.serialize(object.city,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.country != null) {
|
||||
value = object.country;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('country')
|
||||
..add(serializers.serialize(object.country,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.position != null) {
|
||||
value = object.position;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('position')
|
||||
..add(serializers.serialize(object.position,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(Position)));
|
||||
}
|
||||
return result;
|
||||
@@ -52,7 +56,7 @@ class _$LocationSerializer implements StructuredSerializer<Location> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'city':
|
||||
result.city = serializers.deserialize(value,
|
||||
@@ -136,10 +140,11 @@ class LocationBuilder implements Builder<Location, LocationBuilder> {
|
||||
LocationBuilder();
|
||||
|
||||
LocationBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_city = _$v.city;
|
||||
_country = _$v.country;
|
||||
_position = _$v.position?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_city = $v.city;
|
||||
_country = $v.country;
|
||||
_position = $v.position?.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -147,9 +152,7 @@ class LocationBuilder implements Builder<Location, LocationBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Location other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Location;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,103 +25,116 @@ class _$PhotoSerializer implements StructuredSerializer<Photo> {
|
||||
'id',
|
||||
serializers.serialize(object.id, specifiedType: const FullType(String)),
|
||||
];
|
||||
if (object.createdAt != null) {
|
||||
Object value;
|
||||
value = object.createdAt;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('created_at')
|
||||
..add(serializers.serialize(object.createdAt,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.updatedAt != null) {
|
||||
value = object.updatedAt;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('updated_at')
|
||||
..add(serializers.serialize(object.updatedAt,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.width != null) {
|
||||
value = object.width;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('width')
|
||||
..add(serializers.serialize(object.width,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.height != null) {
|
||||
value = object.height;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('height')
|
||||
..add(serializers.serialize(object.height,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.color != null) {
|
||||
value = object.color;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('color')
|
||||
..add(serializers.serialize(object.color,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.downloads != null) {
|
||||
value = object.downloads;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('downloads')
|
||||
..add(serializers.serialize(object.downloads,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.likes != null) {
|
||||
value = object.likes;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('likes')
|
||||
..add(serializers.serialize(object.likes,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.likedByUser != null) {
|
||||
value = object.likedByUser;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('liked_by_user')
|
||||
..add(serializers.serialize(object.likedByUser,
|
||||
specifiedType: const FullType(bool)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(bool)));
|
||||
}
|
||||
if (object.description != null) {
|
||||
value = object.description;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('description')
|
||||
..add(serializers.serialize(object.description,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.exif != null) {
|
||||
value = object.exif;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('exif')
|
||||
..add(serializers.serialize(object.exif,
|
||||
specifiedType: const FullType(Exif)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(Exif)));
|
||||
}
|
||||
if (object.location != null) {
|
||||
value = object.location;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('location')
|
||||
..add(serializers.serialize(object.location,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(Location)));
|
||||
}
|
||||
if (object.tags != null) {
|
||||
value = object.tags;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('tags')
|
||||
..add(serializers.serialize(object.tags,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType:
|
||||
const FullType(BuiltList, const [const FullType(Tags)])));
|
||||
}
|
||||
if (object.currentUserCollections != null) {
|
||||
value = object.currentUserCollections;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('current_user_collections')
|
||||
..add(serializers.serialize(object.currentUserCollections,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(
|
||||
BuiltList, const [const FullType(CurrentUserCollections)])));
|
||||
}
|
||||
if (object.urls != null) {
|
||||
value = object.urls;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('urls')
|
||||
..add(serializers.serialize(object.urls,
|
||||
specifiedType: const FullType(Urls)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(Urls)));
|
||||
}
|
||||
if (object.links != null) {
|
||||
value = object.links;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('links')
|
||||
..add(serializers.serialize(object.links,
|
||||
specifiedType: const FullType(Links)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(Links)));
|
||||
}
|
||||
if (object.user != null) {
|
||||
value = object.user;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('user')
|
||||
..add(serializers.serialize(object.user,
|
||||
specifiedType: const FullType(User)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(User)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -135,7 +148,7 @@ class _$PhotoSerializer implements StructuredSerializer<Photo> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'id':
|
||||
result.id = serializers.deserialize(value,
|
||||
@@ -274,9 +287,7 @@ class _$Photo extends Photo {
|
||||
this.links,
|
||||
this.user})
|
||||
: super._() {
|
||||
if (id == null) {
|
||||
throw new BuiltValueNullFieldError('Photo', 'id');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -453,24 +464,25 @@ class PhotoBuilder implements Builder<Photo, PhotoBuilder> {
|
||||
PhotoBuilder();
|
||||
|
||||
PhotoBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_id = _$v.id;
|
||||
_createdAt = _$v.createdAt;
|
||||
_updatedAt = _$v.updatedAt;
|
||||
_width = _$v.width;
|
||||
_height = _$v.height;
|
||||
_color = _$v.color;
|
||||
_downloads = _$v.downloads;
|
||||
_likes = _$v.likes;
|
||||
_likedByUser = _$v.likedByUser;
|
||||
_description = _$v.description;
|
||||
_exif = _$v.exif?.toBuilder();
|
||||
_location = _$v.location?.toBuilder();
|
||||
_tags = _$v.tags?.toBuilder();
|
||||
_currentUserCollections = _$v.currentUserCollections?.toBuilder();
|
||||
_urls = _$v.urls?.toBuilder();
|
||||
_links = _$v.links?.toBuilder();
|
||||
_user = _$v.user?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_id = $v.id;
|
||||
_createdAt = $v.createdAt;
|
||||
_updatedAt = $v.updatedAt;
|
||||
_width = $v.width;
|
||||
_height = $v.height;
|
||||
_color = $v.color;
|
||||
_downloads = $v.downloads;
|
||||
_likes = $v.likes;
|
||||
_likedByUser = $v.likedByUser;
|
||||
_description = $v.description;
|
||||
_exif = $v.exif?.toBuilder();
|
||||
_location = $v.location?.toBuilder();
|
||||
_tags = $v.tags?.toBuilder();
|
||||
_currentUserCollections = $v.currentUserCollections?.toBuilder();
|
||||
_urls = $v.urls?.toBuilder();
|
||||
_links = $v.links?.toBuilder();
|
||||
_user = $v.user?.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -478,9 +490,7 @@ class PhotoBuilder implements Builder<Photo, PhotoBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Photo other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Photo;
|
||||
}
|
||||
|
||||
@@ -495,7 +505,7 @@ class PhotoBuilder implements Builder<Photo, PhotoBuilder> {
|
||||
try {
|
||||
_$result = _$v ??
|
||||
new _$Photo._(
|
||||
id: id,
|
||||
id: BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id'),
|
||||
createdAt: createdAt,
|
||||
updatedAt: updatedAt,
|
||||
width: width,
|
||||
|
||||
@@ -42,7 +42,7 @@ class _$PositionSerializer implements StructuredSerializer<Position> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'latitude':
|
||||
result.latitude = serializers.deserialize(value,
|
||||
@@ -69,12 +69,8 @@ class _$Position extends Position {
|
||||
(new PositionBuilder()..update(updates)).build();
|
||||
|
||||
_$Position._({this.latitude, this.longitude}) : super._() {
|
||||
if (latitude == null) {
|
||||
throw new BuiltValueNullFieldError('Position', 'latitude');
|
||||
}
|
||||
if (longitude == null) {
|
||||
throw new BuiltValueNullFieldError('Position', 'longitude');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(latitude, 'Position', 'latitude');
|
||||
BuiltValueNullFieldError.checkNotNull(longitude, 'Position', 'longitude');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -120,9 +116,10 @@ class PositionBuilder implements Builder<Position, PositionBuilder> {
|
||||
PositionBuilder();
|
||||
|
||||
PositionBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_latitude = _$v.latitude;
|
||||
_longitude = _$v.longitude;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_latitude = $v.latitude;
|
||||
_longitude = $v.longitude;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -130,9 +127,7 @@ class PositionBuilder implements Builder<Position, PositionBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Position other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Position;
|
||||
}
|
||||
|
||||
@@ -143,8 +138,12 @@ class PositionBuilder implements Builder<Position, PositionBuilder> {
|
||||
|
||||
@override
|
||||
_$Position build() {
|
||||
final _$result =
|
||||
_$v ?? new _$Position._(latitude: latitude, longitude: longitude);
|
||||
final _$result = _$v ??
|
||||
new _$Position._(
|
||||
latitude: BuiltValueNullFieldError.checkNotNull(
|
||||
latitude, 'Position', 'latitude'),
|
||||
longitude: BuiltValueNullFieldError.checkNotNull(
|
||||
longitude, 'Position', 'longitude'));
|
||||
replace(_$result);
|
||||
return _$result;
|
||||
}
|
||||
|
||||
@@ -33,17 +33,18 @@ class _$SearchPhotosResponseSerializer
|
||||
specifiedType:
|
||||
const FullType(BuiltList, const [const FullType(Photo)])),
|
||||
];
|
||||
if (object.total != null) {
|
||||
Object value;
|
||||
value = object.total;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('total')
|
||||
..add(serializers.serialize(object.total,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.totalPages != null) {
|
||||
value = object.totalPages;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('total_pages')
|
||||
..add(serializers.serialize(object.totalPages,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -58,7 +59,7 @@ class _$SearchPhotosResponseSerializer
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'total':
|
||||
result.total = serializers.deserialize(value,
|
||||
@@ -95,9 +96,8 @@ class _$SearchPhotosResponse extends SearchPhotosResponse {
|
||||
|
||||
_$SearchPhotosResponse._({this.total, this.totalPages, this.results})
|
||||
: super._() {
|
||||
if (results == null) {
|
||||
throw new BuiltValueNullFieldError('SearchPhotosResponse', 'results');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(
|
||||
results, 'SearchPhotosResponse', 'results');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -154,10 +154,11 @@ class SearchPhotosResponseBuilder
|
||||
SearchPhotosResponseBuilder();
|
||||
|
||||
SearchPhotosResponseBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_total = _$v.total;
|
||||
_totalPages = _$v.totalPages;
|
||||
_results = _$v.results?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_total = $v.total;
|
||||
_totalPages = $v.totalPages;
|
||||
_results = $v.results.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -165,9 +166,7 @@ class SearchPhotosResponseBuilder
|
||||
|
||||
@override
|
||||
void replace(SearchPhotosResponse other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$SearchPhotosResponse;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ class _$TagsSerializer implements StructuredSerializer<Tags> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'title':
|
||||
result.title = serializers.deserialize(value,
|
||||
@@ -60,9 +60,7 @@ class _$Tags extends Tags {
|
||||
(new TagsBuilder()..update(updates)).build();
|
||||
|
||||
_$Tags._({this.title}) : super._() {
|
||||
if (title == null) {
|
||||
throw new BuiltValueNullFieldError('Tags', 'title');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -100,8 +98,9 @@ class TagsBuilder implements Builder<Tags, TagsBuilder> {
|
||||
TagsBuilder();
|
||||
|
||||
TagsBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_title = _$v.title;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_title = $v.title;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -109,9 +108,7 @@ class TagsBuilder implements Builder<Tags, TagsBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Tags other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Tags;
|
||||
}
|
||||
|
||||
@@ -122,7 +119,10 @@ class TagsBuilder implements Builder<Tags, TagsBuilder> {
|
||||
|
||||
@override
|
||||
_$Tags build() {
|
||||
final _$result = _$v ?? new _$Tags._(title: title);
|
||||
final _$result = _$v ??
|
||||
new _$Tags._(
|
||||
title:
|
||||
BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title'));
|
||||
replace(_$result);
|
||||
return _$result;
|
||||
}
|
||||
|
||||
@@ -86,13 +86,13 @@ class Unsplash {
|
||||
// https://help.unsplash.com/en/articles/2511258-guideline-triggering-a-download
|
||||
|
||||
_log.info('GET ${photo.urls.full}');
|
||||
final futureBytes = http.readBytes(photo.urls.full, headers: {
|
||||
final futureBytes = http.readBytes(Uri.parse(photo.urls.full), headers: {
|
||||
'Accept-Version': 'v1',
|
||||
'Authorization': 'Client-ID $_accessKey',
|
||||
});
|
||||
|
||||
_log.info('GET ${photo.links.downloadLocation}');
|
||||
unawaited(http.get(photo.links.downloadLocation, headers: {
|
||||
unawaited(http.get(Uri.parse(photo.links.downloadLocation), headers: {
|
||||
'Accept-Version': 'v1',
|
||||
'Authorization': 'Client-ID $_accessKey',
|
||||
}));
|
||||
|
||||
@@ -22,34 +22,40 @@ class _$UrlsSerializer implements StructuredSerializer<Urls> {
|
||||
Iterable<Object> serialize(Serializers serializers, Urls object,
|
||||
{FullType specifiedType = FullType.unspecified}) {
|
||||
final result = <Object>[];
|
||||
if (object.raw != null) {
|
||||
Object value;
|
||||
value = object.raw;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('raw')
|
||||
..add(serializers.serialize(object.raw,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.full != null) {
|
||||
value = object.full;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('full')
|
||||
..add(serializers.serialize(object.full,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.regular != null) {
|
||||
value = object.regular;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('regular')
|
||||
..add(serializers.serialize(object.regular,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.small != null) {
|
||||
value = object.small;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('small')
|
||||
..add(serializers.serialize(object.small,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.thumb != null) {
|
||||
value = object.thumb;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('thumb')
|
||||
..add(serializers.serialize(object.thumb,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
return result;
|
||||
@@ -64,7 +70,7 @@ class _$UrlsSerializer implements StructuredSerializer<Urls> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'raw':
|
||||
result.raw = serializers.deserialize(value,
|
||||
@@ -175,12 +181,13 @@ class UrlsBuilder implements Builder<Urls, UrlsBuilder> {
|
||||
UrlsBuilder();
|
||||
|
||||
UrlsBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_raw = _$v.raw;
|
||||
_full = _$v.full;
|
||||
_regular = _$v.regular;
|
||||
_small = _$v.small;
|
||||
_thumb = _$v.thumb;
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_raw = $v.raw;
|
||||
_full = $v.full;
|
||||
_regular = $v.regular;
|
||||
_small = $v.small;
|
||||
_thumb = $v.thumb;
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -188,9 +195,7 @@ class UrlsBuilder implements Builder<Urls, UrlsBuilder> {
|
||||
|
||||
@override
|
||||
void replace(Urls other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$Urls;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,53 +30,59 @@ class _$UserSerializer implements StructuredSerializer<User> {
|
||||
'name',
|
||||
serializers.serialize(object.name, specifiedType: const FullType(String)),
|
||||
];
|
||||
if (object.updatedAt != null) {
|
||||
Object value;
|
||||
value = object.updatedAt;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('updated_at')
|
||||
..add(serializers.serialize(object.updatedAt,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.portfolioUrl != null) {
|
||||
value = object.portfolioUrl;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('portfolio_url')
|
||||
..add(serializers.serialize(object.portfolioUrl,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.bio != null) {
|
||||
value = object.bio;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('bio')
|
||||
..add(serializers.serialize(object.bio,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.location != null) {
|
||||
value = object.location;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('location')
|
||||
..add(serializers.serialize(object.location,
|
||||
..add(serializers.serialize(value,
|
||||
specifiedType: const FullType(String)));
|
||||
}
|
||||
if (object.totalLikes != null) {
|
||||
value = object.totalLikes;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('total_likes')
|
||||
..add(serializers.serialize(object.totalLikes,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.totalPhotos != null) {
|
||||
value = object.totalPhotos;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('total_photos')
|
||||
..add(serializers.serialize(object.totalPhotos,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.totalCollections != null) {
|
||||
value = object.totalCollections;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('total_collections')
|
||||
..add(serializers.serialize(object.totalCollections,
|
||||
specifiedType: const FullType(int)));
|
||||
..add(serializers.serialize(value, specifiedType: const FullType(int)));
|
||||
}
|
||||
if (object.links != null) {
|
||||
value = object.links;
|
||||
if (value != null) {
|
||||
result
|
||||
..add('links')
|
||||
..add(serializers.serialize(object.links,
|
||||
specifiedType: const FullType(Links)));
|
||||
..add(
|
||||
serializers.serialize(value, specifiedType: const FullType(Links)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -90,7 +96,7 @@ class _$UserSerializer implements StructuredSerializer<User> {
|
||||
while (iterator.moveNext()) {
|
||||
final key = iterator.current as String;
|
||||
iterator.moveNext();
|
||||
final dynamic value = iterator.current;
|
||||
final Object value = iterator.current;
|
||||
switch (key) {
|
||||
case 'id':
|
||||
result.id = serializers.deserialize(value,
|
||||
@@ -183,15 +189,9 @@ class _$User extends User {
|
||||
this.totalCollections,
|
||||
this.links})
|
||||
: super._() {
|
||||
if (id == null) {
|
||||
throw new BuiltValueNullFieldError('User', 'id');
|
||||
}
|
||||
if (username == null) {
|
||||
throw new BuiltValueNullFieldError('User', 'username');
|
||||
}
|
||||
if (name == null) {
|
||||
throw new BuiltValueNullFieldError('User', 'name');
|
||||
}
|
||||
BuiltValueNullFieldError.checkNotNull(id, 'User', 'id');
|
||||
BuiltValueNullFieldError.checkNotNull(username, 'User', 'username');
|
||||
BuiltValueNullFieldError.checkNotNull(name, 'User', 'name');
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -311,18 +311,19 @@ class UserBuilder implements Builder<User, UserBuilder> {
|
||||
UserBuilder();
|
||||
|
||||
UserBuilder get _$this {
|
||||
if (_$v != null) {
|
||||
_id = _$v.id;
|
||||
_updatedAt = _$v.updatedAt;
|
||||
_username = _$v.username;
|
||||
_name = _$v.name;
|
||||
_portfolioUrl = _$v.portfolioUrl;
|
||||
_bio = _$v.bio;
|
||||
_location = _$v.location;
|
||||
_totalLikes = _$v.totalLikes;
|
||||
_totalPhotos = _$v.totalPhotos;
|
||||
_totalCollections = _$v.totalCollections;
|
||||
_links = _$v.links?.toBuilder();
|
||||
final $v = _$v;
|
||||
if ($v != null) {
|
||||
_id = $v.id;
|
||||
_updatedAt = $v.updatedAt;
|
||||
_username = $v.username;
|
||||
_name = $v.name;
|
||||
_portfolioUrl = $v.portfolioUrl;
|
||||
_bio = $v.bio;
|
||||
_location = $v.location;
|
||||
_totalLikes = $v.totalLikes;
|
||||
_totalPhotos = $v.totalPhotos;
|
||||
_totalCollections = $v.totalCollections;
|
||||
_links = $v.links?.toBuilder();
|
||||
_$v = null;
|
||||
}
|
||||
return this;
|
||||
@@ -330,9 +331,7 @@ class UserBuilder implements Builder<User, UserBuilder> {
|
||||
|
||||
@override
|
||||
void replace(User other) {
|
||||
if (other == null) {
|
||||
throw new ArgumentError.notNull('other');
|
||||
}
|
||||
ArgumentError.checkNotNull(other, 'other');
|
||||
_$v = other as _$User;
|
||||
}
|
||||
|
||||
@@ -347,10 +346,11 @@ class UserBuilder implements Builder<User, UserBuilder> {
|
||||
try {
|
||||
_$result = _$v ??
|
||||
new _$User._(
|
||||
id: id,
|
||||
id: BuiltValueNullFieldError.checkNotNull(id, 'User', 'id'),
|
||||
updatedAt: updatedAt,
|
||||
username: username,
|
||||
name: name,
|
||||
username: BuiltValueNullFieldError.checkNotNull(
|
||||
username, 'User', 'username'),
|
||||
name: BuiltValueNullFieldError.checkNotNull(name, 'User', 'name'),
|
||||
portfolioUrl: portfolioUrl,
|
||||
bio: bio,
|
||||
location: location,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/gestures.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:transparent_image/transparent_image.dart';
|
||||
import 'package:url_launcher/url_launcher.dart' as url_launcher;
|
||||
import 'package:url_launcher/link.dart';
|
||||
|
||||
import '../../unsplash_access_key.dart';
|
||||
import '../unsplash/photo.dart';
|
||||
|
||||
final _unsplashHomepage = Uri.encodeFull(
|
||||
final _unsplashHomepage = Uri.parse(
|
||||
'https://unsplash.com/?utm_source=$unsplashAppName&utm_medium=referral');
|
||||
|
||||
typedef PhotoDetailsPhotoSaveCallback = void Function(Photo);
|
||||
@@ -31,43 +30,26 @@ class PhotoDetails extends StatefulWidget {
|
||||
class _PhotoDetailsState extends State<PhotoDetails>
|
||||
with TickerProviderStateMixin {
|
||||
Widget _buildPhotoAttribution(BuildContext context) {
|
||||
return Expanded(
|
||||
child: RichText(
|
||||
overflow: TextOverflow.fade,
|
||||
text: TextSpan(
|
||||
style: Theme.of(context).textTheme.bodyText2,
|
||||
return Row(
|
||||
children: [
|
||||
const TextSpan(text: 'Photo by '),
|
||||
TextSpan(
|
||||
text: widget.photo.user.name,
|
||||
style: const TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
Text('Photo by '),
|
||||
Link(
|
||||
uri: Uri.parse(
|
||||
'https://unsplash.com/@${widget.photo.user.username}?utm_source=$unsplashAppName&utm_medium=referral'),
|
||||
builder: (context, followLink) => TextButton(
|
||||
onPressed: followLink,
|
||||
child: Text(widget.photo.user.name),
|
||||
),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () async {
|
||||
final url = Uri.encodeFull(
|
||||
'https://unsplash.com/@${widget.photo.user.username}?utm_source=$unsplashAppName&utm_medium=referral');
|
||||
if (await url_launcher.canLaunch(url)) {
|
||||
await url_launcher.launch(url);
|
||||
}
|
||||
},
|
||||
),
|
||||
const TextSpan(text: ' on '),
|
||||
TextSpan(
|
||||
text: 'Unsplash',
|
||||
style: const TextStyle(
|
||||
decoration: TextDecoration.underline,
|
||||
Text(' on '),
|
||||
Link(
|
||||
uri: _unsplashHomepage,
|
||||
builder: (context, followLink) => TextButton(
|
||||
onPressed: followLink,
|
||||
child: Text('Unsplash'),
|
||||
),
|
||||
recognizer: TapGestureRecognizer()
|
||||
..onTap = () async {
|
||||
if (await url_launcher.canLaunch(_unsplashHomepage)) {
|
||||
await url_launcher.launch(_unsplashHomepage);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,74 +9,32 @@ project 'Runner', {
|
||||
'Release' => :release,
|
||||
}
|
||||
|
||||
def parse_KV_file(file, separator='=')
|
||||
file_abs_path = File.expand_path(file)
|
||||
if !File.exists? file_abs_path
|
||||
return [];
|
||||
end
|
||||
pods_ary = []
|
||||
skip_line_start_symbols = ["#", "/"]
|
||||
File.foreach(file_abs_path) { |line|
|
||||
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
|
||||
plugin = line.split(pattern=separator)
|
||||
if plugin.length == 2
|
||||
podname = plugin[0].strip()
|
||||
path = plugin[1].strip()
|
||||
podpath = File.expand_path("#{path}", file_abs_path)
|
||||
pods_ary.push({:name => podname, :path => podpath});
|
||||
else
|
||||
puts "Invalid plugin specification: #{line}"
|
||||
end
|
||||
}
|
||||
return pods_ary
|
||||
def flutter_root
|
||||
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
|
||||
unless File.exist?(generated_xcode_build_settings_path)
|
||||
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
|
||||
end
|
||||
|
||||
def pubspec_supports_macos(file)
|
||||
file_abs_path = File.expand_path(file)
|
||||
if !File.exists? file_abs_path
|
||||
return false;
|
||||
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||
return matches[1].strip if matches
|
||||
end
|
||||
File.foreach(file_abs_path) { |line|
|
||||
return true if line =~ /^\s*macos:/
|
||||
}
|
||||
return false
|
||||
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
|
||||
end
|
||||
|
||||
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||
|
||||
flutter_macos_podfile_setup
|
||||
|
||||
target 'Runner' do
|
||||
use_frameworks!
|
||||
use_modular_headers!
|
||||
|
||||
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
||||
# referring to absolute paths on developers' machines.
|
||||
ephemeral_dir = File.join('Flutter', 'ephemeral')
|
||||
symlink_dir = File.join(ephemeral_dir, '.symlinks')
|
||||
symlink_plugins_dir = File.join(symlink_dir, 'plugins')
|
||||
system("rm -rf #{symlink_dir}")
|
||||
system("mkdir -p #{symlink_plugins_dir}")
|
||||
|
||||
# Flutter Pods
|
||||
generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig'))
|
||||
if generated_xcconfig.empty?
|
||||
puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first."
|
||||
end
|
||||
generated_xcconfig.map { |p|
|
||||
if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
|
||||
symlink = File.join(symlink_dir, 'flutter')
|
||||
File.symlink(File.dirname(p[:path]), symlink)
|
||||
pod 'FlutterMacOS', :path => File.join(symlink, File.basename(p[:path]))
|
||||
end
|
||||
}
|
||||
|
||||
# Plugin Pods
|
||||
plugin_pods = parse_KV_file('../.flutter-plugins')
|
||||
plugin_pods.map { |p|
|
||||
symlink = File.join(symlink_plugins_dir, p[:name])
|
||||
File.symlink(p[:path], symlink)
|
||||
if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml'))
|
||||
pod p[:name], :path => File.join(symlink, 'macos')
|
||||
end
|
||||
}
|
||||
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
|
||||
end
|
||||
|
||||
# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
|
||||
install! 'cocoapods', :disable_input_output_paths => true
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
flutter_additional_macos_build_settings(target)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,36 +4,31 @@ PODS:
|
||||
- FlutterMacOS (1.0.0)
|
||||
- menubar (0.0.2):
|
||||
- FlutterMacOS
|
||||
- url_launcher (0.0.1)
|
||||
- url_launcher_macos (0.0.1):
|
||||
- FlutterMacOS
|
||||
|
||||
DEPENDENCIES:
|
||||
- file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`)
|
||||
- FlutterMacOS (from `Flutter/ephemeral/.symlinks/flutter/darwin-x64`)
|
||||
- FlutterMacOS (from `Flutter/ephemeral`)
|
||||
- menubar (from `Flutter/ephemeral/.symlinks/plugins/menubar/macos`)
|
||||
- url_launcher (from `Flutter/ephemeral/.symlinks/plugins/url_launcher/macos`)
|
||||
- url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
file_selector_macos:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos
|
||||
FlutterMacOS:
|
||||
:path: Flutter/ephemeral/.symlinks/flutter/darwin-x64
|
||||
:path: Flutter/ephemeral
|
||||
menubar:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/menubar/macos
|
||||
url_launcher:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher/macos
|
||||
url_launcher_macos:
|
||||
:path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
file_selector_macos: ff6dc948d4ddd34e8602a1f60b7d0b4cc6051a47
|
||||
FlutterMacOS: 15bea8a44d2fa024068daa0140371c020b4b6ff9
|
||||
FlutterMacOS: 57701585bf7de1b3fc2bb61f6378d73bbdea8424
|
||||
menubar: 4e3d461d62d775540277ce6639acafe2a111a231
|
||||
url_launcher: af78307ef9bafff91273b34f1c6c0c86a0004fd7
|
||||
url_launcher_macos: 45af3d61de06997666568a7149c1be98b41c95d4
|
||||
|
||||
PODFILE CHECKSUM: d8ba9b3e9e93c62c74a660b46c6fcb09f03991a7
|
||||
PODFILE CHECKSUM: 6eac6b3292e5142cfc23bdeb71848a40ec51c14c
|
||||
|
||||
COCOAPODS: 1.10.0
|
||||
|
||||
@@ -26,11 +26,7 @@
|
||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; };
|
||||
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
CB0B59C99242536310F74F61 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D99F26E68F5EBE039D3C364 /* Pods_Runner.framework */; };
|
||||
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; };
|
||||
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -50,8 +46,6 @@
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */,
|
||||
33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */,
|
||||
);
|
||||
name = "Bundle Framework";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -71,7 +65,6 @@
|
||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
|
||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
|
||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
|
||||
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; };
|
||||
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
||||
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
||||
@@ -79,7 +72,6 @@
|
||||
4D99F26E68F5EBE039D3C364 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||
D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; };
|
||||
F4698A353FF15CC75800DADA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@@ -88,8 +80,6 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D73912F022F37F9E000D13A0 /* App.framework in Frameworks */,
|
||||
33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */,
|
||||
CB0B59C99242536310F74F61 /* Pods_Runner.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -145,8 +135,6 @@
|
||||
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
|
||||
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
|
||||
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
|
||||
D73912EF22F37F9E000D13A0 /* App.framework */,
|
||||
33D1A10322148B71006C7A3E /* FlutterMacOS.framework */,
|
||||
);
|
||||
path = Flutter;
|
||||
sourceTree = "<group>";
|
||||
@@ -280,7 +268,7 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n";
|
||||
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
|
||||
};
|
||||
33CC111E2044C6BF0003C045 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
@@ -308,9 +296,16 @@
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
|
||||
"${BUILT_PRODUCTS_DIR}/file_selector_macos/file_selector_macos.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/menubar/menubar.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/url_launcher_macos/url_launcher_macos.framework",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_selector_macos.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/menubar.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_macos.framework",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
|
||||
@@ -7,21 +7,14 @@ packages:
|
||||
name: _fe_analyzer_shared
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
analysis_server_lib:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analysis_server_lib
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.10"
|
||||
version: "14.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.39.17"
|
||||
version: "0.41.2"
|
||||
ansicolor:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -42,91 +35,91 @@ packages:
|
||||
name: async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.5.0-nullsafety.3"
|
||||
version: "2.5.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0"
|
||||
build:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: build
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.6.2"
|
||||
build_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_config
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.4.2"
|
||||
version: "0.4.5"
|
||||
build_daemon:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "2.1.10"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_resolvers
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.11"
|
||||
version: "1.5.3"
|
||||
build_runner:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: build_runner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.2"
|
||||
version: "1.11.1"
|
||||
build_runner_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_runner_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "6.0.1"
|
||||
version: "6.1.7"
|
||||
built_collection:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: built_collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.3.2"
|
||||
version: "5.0.0"
|
||||
built_value:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: built_value
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.1.0"
|
||||
version: "8.0.3"
|
||||
built_value_generator:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: built_value_generator
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "7.1.0"
|
||||
version: "8.0.3"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.5"
|
||||
version: "1.1.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: charcode
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.3"
|
||||
version: "1.2.0"
|
||||
checked_yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -147,77 +140,70 @@ packages:
|
||||
name: clock
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0"
|
||||
code_builder:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: code_builder
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.5.0"
|
||||
version: "3.7.0"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.15.0-nullsafety.5"
|
||||
version: "1.15.0"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: convert
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "3.0.0"
|
||||
coverage:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: coverage
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.14.2"
|
||||
version: "0.15.2"
|
||||
cross_file:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cross_file
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
version: "0.3.1+1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
csslib:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: csslib
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.16.2"
|
||||
version: "3.0.0"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cupertino_icons
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.3"
|
||||
version: "1.0.2"
|
||||
dart_style:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.6"
|
||||
version: "1.3.12"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.3"
|
||||
version: "1.2.0"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -231,42 +217,49 @@ packages:
|
||||
name: file_selector
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.7.0+2"
|
||||
version: "0.8.2"
|
||||
file_selector_linux:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_selector_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1"
|
||||
version: "0.0.2"
|
||||
file_selector_macos:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_selector_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1"
|
||||
version: "0.0.4"
|
||||
file_selector_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.2"
|
||||
version: "2.0.2"
|
||||
file_selector_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file_selector_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.8.1"
|
||||
file_selector_windows:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_selector_windows
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1"
|
||||
version: "0.0.2"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fixnum
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.10.11"
|
||||
version: "1.0.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@@ -310,20 +303,13 @@ packages:
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.8.6"
|
||||
html:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: html
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.14.0+4"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: http
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.2"
|
||||
version: "0.13.0"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -337,7 +323,7 @@ packages:
|
||||
name: http_parser
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.4"
|
||||
version: "4.0.0"
|
||||
intl:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -351,21 +337,21 @@ packages:
|
||||
name: io
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.4"
|
||||
version: "0.3.5"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.6.3-nullsafety.3"
|
||||
version: "0.6.3"
|
||||
json_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: json_annotation
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "3.1.1"
|
||||
version: "4.0.0"
|
||||
logging:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@@ -379,13 +365,13 @@ packages:
|
||||
name: matcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.12.10-nullsafety.3"
|
||||
version: "0.12.10"
|
||||
menubar:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "plugins/menubar"
|
||||
ref: HEAD
|
||||
resolved-ref: ff9c2aebbbf673f9726f5c8052f6a21099fa51fd
|
||||
resolved-ref: "7812516a5c1fc8ef379e244106953a2b534432b9"
|
||||
url: "https://github.com/google/flutter-desktop-embedding.git"
|
||||
source: git
|
||||
version: "0.1.0"
|
||||
@@ -395,28 +381,28 @@ packages:
|
||||
name: meta
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.6"
|
||||
version: "1.3.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: mime
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.9.7"
|
||||
version: "1.0.0"
|
||||
msix:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: msix
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.10"
|
||||
version: "0.1.19"
|
||||
nested:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: nested
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.4"
|
||||
version: "1.0.0"
|
||||
node_interop:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -437,7 +423,7 @@ packages:
|
||||
name: node_preamble
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.12"
|
||||
version: "1.4.13"
|
||||
package_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -451,84 +437,84 @@ packages:
|
||||
name: path
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.3"
|
||||
version: "1.8.0"
|
||||
pedantic:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pedantic
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.3"
|
||||
version: "1.11.0"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.3"
|
||||
version: "2.0.0"
|
||||
pool:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pool
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.5.0-nullsafety.3"
|
||||
version: "1.5.0"
|
||||
provider:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: provider
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "4.3.2+3"
|
||||
version: "5.0.0"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.4.4"
|
||||
version: "2.0.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.7"
|
||||
version: "0.1.8"
|
||||
quiver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: quiver
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "3.0.0"
|
||||
shelf:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.7.9"
|
||||
version: "1.1.0"
|
||||
shelf_packages_handler:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_packages_handler
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "3.0.0"
|
||||
shelf_static:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_static
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.9+1"
|
||||
version: "1.0.0"
|
||||
shelf_web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_web_socket
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.3"
|
||||
version: "0.2.4+1"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@@ -540,84 +526,84 @@ packages:
|
||||
name: source_gen
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.9.7+1"
|
||||
version: "0.9.10+3"
|
||||
source_map_stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_map_stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.4"
|
||||
version: "2.1.0"
|
||||
source_maps:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_maps
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.10.10-nullsafety.3"
|
||||
version: "0.10.10"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.8.0-nullsafety.4"
|
||||
version: "1.8.0"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.10.0-nullsafety.6"
|
||||
version: "1.10.0"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.3"
|
||||
version: "2.1.0"
|
||||
stream_transform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_transform
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "2.0.0"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0-nullsafety.3"
|
||||
version: "1.1.0"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.2.0-nullsafety.3"
|
||||
version: "1.2.0"
|
||||
test:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: test
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.16.0-nullsafety.13"
|
||||
version: "1.16.5"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.2.19-nullsafety.6"
|
||||
version: "0.2.19"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.12-nullsafety.12"
|
||||
version: "0.3.15"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -631,105 +617,98 @@ packages:
|
||||
name: transparent_image
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
tuneup:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: tuneup
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.3.7"
|
||||
version: "2.0.0"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.3.0-nullsafety.5"
|
||||
version: "1.3.0"
|
||||
url_launcher:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: url_launcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.7.10"
|
||||
version: "6.0.2"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_linux
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+4"
|
||||
version: "2.0.0"
|
||||
url_launcher_macos:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_macos
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+9"
|
||||
version: "2.0.0"
|
||||
url_launcher_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_platform_interface
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.0.9"
|
||||
version: "2.0.2"
|
||||
url_launcher_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.1.5+1"
|
||||
version: "2.0.0"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_windows
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.0.1+3"
|
||||
version: "2.0.0"
|
||||
uuid:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: uuid
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "3.0.1"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "2.1.0-nullsafety.5"
|
||||
version: "2.1.0"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "5.5.0"
|
||||
version: "6.1.0+1"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: watcher
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.9.7+15"
|
||||
version: "1.0.0"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.2.0"
|
||||
webkit_inspection_protocol:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webkit_inspection_protocol
|
||||
url: "https://pub.dartlang.org"
|
||||
source: hosted
|
||||
version: "0.7.4"
|
||||
version: "0.7.5"
|
||||
yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -738,5 +717,5 @@ packages:
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
sdks:
|
||||
dart: ">=2.12.0-0.0 <3.0.0"
|
||||
flutter: ">=1.22.0"
|
||||
dart: ">=2.12.0 <3.0.0"
|
||||
flutter: ">=2.0.0"
|
||||
|
||||
@@ -4,20 +4,20 @@ version: 1.0.0+1
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: ^2.9.0-11.0.dev
|
||||
flutter: ^1.19.0-3.0.pre
|
||||
sdk: ^2.11.0
|
||||
flutter: ^2.0.0
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
built_collection: ^4.3.0
|
||||
built_value: ^7.0.0
|
||||
cupertino_icons: ^0.1.3
|
||||
file_selector: ^0.7.0
|
||||
built_collection: ^5.0.0
|
||||
built_value: ^8.0.3
|
||||
cupertino_icons: ^1.0.2
|
||||
file_selector: ^0.8.2
|
||||
file_selector_linux: ^0.0.1
|
||||
file_selector_macos: ^0.0.1
|
||||
file_selector_windows: ^0.0.1
|
||||
http: ^0.12.2
|
||||
http: ^0.13.0
|
||||
logging: ^0.11.3+2
|
||||
flutter_simple_treeview: ^2.0.1
|
||||
menubar:
|
||||
@@ -26,23 +26,22 @@ dependencies:
|
||||
path: plugins/menubar
|
||||
meta: ^1.1.8
|
||||
pedantic: ^1.9.0
|
||||
provider: ^4.1.0
|
||||
transparent_image: ^1.0.0
|
||||
uuid: ^2.0.4
|
||||
url_launcher: ^5.4.0
|
||||
provider: ^5.0.0
|
||||
transparent_image: ^2.0.0
|
||||
uuid: ^3.0.1
|
||||
url_launcher: ^6.0.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
async: ^2.4.0
|
||||
build: ^1.2.2
|
||||
build_runner: ^1.7.2
|
||||
built_value_generator: ^7.0.0
|
||||
build_runner: ^1.10.4
|
||||
built_value_generator: ^8.0.3
|
||||
grinder: ^0.8.3
|
||||
msix: ^0.1.5
|
||||
source_gen: ^0.9.4
|
||||
test: ^1.9.4
|
||||
tuneup: ^0.3.6
|
||||
|
||||
flutter:
|
||||
uses-material-design: true
|
||||
|
||||
@@ -43,7 +43,7 @@ Future<void> watch() async => _logProcessOutput(
|
||||
Future<void> analyzeSource() async => _logProcessOutput(
|
||||
Process.start(
|
||||
'flutter',
|
||||
['pub', 'run', 'tuneup'],
|
||||
['analyze'],
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user