Compare commits
	
		
			4 Commits
		
	
	
		
			3.1.0+118
			...
			6558854a7a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6558854a7a | |||
| 892035ab27 | |||
| 87ae8d2ff4 | |||
| 15c2dbaa0d | 
| @@ -1,13 +1,25 @@ | |||||||
| import 'package:freezed_annotation/freezed_annotation.dart'; | import 'package:freezed_annotation/freezed_annotation.dart'; | ||||||
|  | import 'package:island/models/publisher.dart'; | ||||||
|  |  | ||||||
| part 'developer.freezed.dart'; | part 'developer.freezed.dart'; | ||||||
| part 'developer.g.dart'; | part 'developer.g.dart'; | ||||||
|  |  | ||||||
|  | @freezed | ||||||
|  | sealed class SnDeveloper with _$SnDeveloper { | ||||||
|  |   const factory SnDeveloper({ | ||||||
|  |     required String id, | ||||||
|  |     required String publisherId, | ||||||
|  |     SnPublisher? publisher, | ||||||
|  |   }) = _SnDeveloper; | ||||||
|  |  | ||||||
|  |   factory SnDeveloper.fromJson(Map<String, dynamic> json) => | ||||||
|  |       _$SnDeveloperFromJson(json); | ||||||
|  | } | ||||||
|  |  | ||||||
| @freezed | @freezed | ||||||
| sealed class DeveloperStats with _$DeveloperStats { | sealed class DeveloperStats with _$DeveloperStats { | ||||||
|   const factory DeveloperStats({ |   const factory DeveloperStats({@Default(0) int totalCustomApps}) = | ||||||
|     @Default(0) int totalCustomApps, |       _DeveloperStats; | ||||||
|   }) = _DeveloperStats; |  | ||||||
|  |  | ||||||
|   factory DeveloperStats.fromJson(Map<String, dynamic> json) => |   factory DeveloperStats.fromJson(Map<String, dynamic> json) => | ||||||
|       _$DeveloperStatsFromJson(json); |       _$DeveloperStatsFromJson(json); | ||||||
|   | |||||||
| @@ -12,6 +12,293 @@ part of 'developer.dart'; | |||||||
| // dart format off | // dart format off | ||||||
| T _$identity<T>(T value) => value; | T _$identity<T>(T value) => value; | ||||||
|  |  | ||||||
|  | /// @nodoc | ||||||
|  | mixin _$SnDeveloper { | ||||||
|  |  | ||||||
|  |  String get id; String get publisherId; SnPublisher? get publisher; | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @JsonKey(includeFromJson: false, includeToJson: false) | ||||||
|  | @pragma('vm:prefer-inline') | ||||||
|  | $SnDeveloperCopyWith<SnDeveloper> get copyWith => _$SnDeveloperCopyWithImpl<SnDeveloper>(this as SnDeveloper, _$identity); | ||||||
|  |  | ||||||
|  |   /// Serializes this SnDeveloper to a JSON map. | ||||||
|  |   Map<String, dynamic> toJson(); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @override | ||||||
|  | bool operator ==(Object other) { | ||||||
|  |   return identical(this, other) || (other.runtimeType == runtimeType&&other is SnDeveloper&&(identical(other.id, id) || other.id == id)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @JsonKey(includeFromJson: false, includeToJson: false) | ||||||
|  | @override | ||||||
|  | int get hashCode => Object.hash(runtimeType,id,publisherId,publisher); | ||||||
|  |  | ||||||
|  | @override | ||||||
|  | String toString() { | ||||||
|  |   return 'SnDeveloper(id: $id, publisherId: $publisherId, publisher: $publisher)'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// @nodoc | ||||||
|  | abstract mixin class $SnDeveloperCopyWith<$Res>  { | ||||||
|  |   factory $SnDeveloperCopyWith(SnDeveloper value, $Res Function(SnDeveloper) _then) = _$SnDeveloperCopyWithImpl; | ||||||
|  | @useResult | ||||||
|  | $Res call({ | ||||||
|  |  String id, String publisherId, SnPublisher? publisher | ||||||
|  | }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | $SnPublisherCopyWith<$Res>? get publisher; | ||||||
|  |  | ||||||
|  | } | ||||||
|  | /// @nodoc | ||||||
|  | class _$SnDeveloperCopyWithImpl<$Res> | ||||||
|  |     implements $SnDeveloperCopyWith<$Res> { | ||||||
|  |   _$SnDeveloperCopyWithImpl(this._self, this._then); | ||||||
|  |  | ||||||
|  |   final SnDeveloper _self; | ||||||
|  |   final $Res Function(SnDeveloper) _then; | ||||||
|  |  | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? publisherId = null,Object? publisher = freezed,}) { | ||||||
|  |   return _then(_self.copyWith( | ||||||
|  | id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable | ||||||
|  | as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable | ||||||
|  | as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable | ||||||
|  | as SnPublisher?, | ||||||
|  |   )); | ||||||
|  | } | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @override | ||||||
|  | @pragma('vm:prefer-inline') | ||||||
|  | $SnPublisherCopyWith<$Res>? get publisher { | ||||||
|  |     if (_self.publisher == null) { | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return $SnPublisherCopyWith<$Res>(_self.publisher!, (value) { | ||||||
|  |     return _then(_self.copyWith(publisher: value)); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /// Adds pattern-matching-related methods to [SnDeveloper]. | ||||||
|  | extension SnDeveloperPatterns on SnDeveloper { | ||||||
|  | /// A variant of `map` that fallback to returning `orElse`. | ||||||
|  | /// | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case final Subclass value: | ||||||
|  | ///     return ...; | ||||||
|  | ///   case _: | ||||||
|  | ///     return orElse(); | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnDeveloper value)?  $default,{required TResult orElse(),}){ | ||||||
|  | final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper() when $default != null: | ||||||
|  | return $default(_that);case _: | ||||||
|  |   return orElse(); | ||||||
|  |  | ||||||
|  | } | ||||||
|  | } | ||||||
|  | /// A `switch`-like method, using callbacks. | ||||||
|  | /// | ||||||
|  | /// Callbacks receives the raw object, upcasted. | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case final Subclass value: | ||||||
|  | ///     return ...; | ||||||
|  | ///   case final Subclass2 value: | ||||||
|  | ///     return ...; | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnDeveloper value)  $default,){ | ||||||
|  | final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper(): | ||||||
|  | return $default(_that);} | ||||||
|  | } | ||||||
|  | /// A variant of `map` that fallback to returning `null`. | ||||||
|  | /// | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case final Subclass value: | ||||||
|  | ///     return ...; | ||||||
|  | ///   case _: | ||||||
|  | ///     return null; | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnDeveloper value)?  $default,){ | ||||||
|  | final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper() when $default != null: | ||||||
|  | return $default(_that);case _: | ||||||
|  |   return null; | ||||||
|  |  | ||||||
|  | } | ||||||
|  | } | ||||||
|  | /// A variant of `when` that fallback to an `orElse` callback. | ||||||
|  | /// | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case Subclass(:final field): | ||||||
|  | ///     return ...; | ||||||
|  | ///   case _: | ||||||
|  | ///     return orElse(); | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String publisherId,  SnPublisher? publisher)?  $default,{required TResult orElse(),}) {final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper() when $default != null: | ||||||
|  | return $default(_that.id,_that.publisherId,_that.publisher);case _: | ||||||
|  |   return orElse(); | ||||||
|  |  | ||||||
|  | } | ||||||
|  | } | ||||||
|  | /// A `switch`-like method, using callbacks. | ||||||
|  | /// | ||||||
|  | /// As opposed to `map`, this offers destructuring. | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case Subclass(:final field): | ||||||
|  | ///     return ...; | ||||||
|  | ///   case Subclass2(:final field2): | ||||||
|  | ///     return ...; | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String publisherId,  SnPublisher? publisher)  $default,) {final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper(): | ||||||
|  | return $default(_that.id,_that.publisherId,_that.publisher);} | ||||||
|  | } | ||||||
|  | /// A variant of `when` that fallback to returning `null` | ||||||
|  | /// | ||||||
|  | /// It is equivalent to doing: | ||||||
|  | /// ```dart | ||||||
|  | /// switch (sealedClass) { | ||||||
|  | ///   case Subclass(:final field): | ||||||
|  | ///     return ...; | ||||||
|  | ///   case _: | ||||||
|  | ///     return null; | ||||||
|  | /// } | ||||||
|  | /// ``` | ||||||
|  |  | ||||||
|  | @optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String publisherId,  SnPublisher? publisher)?  $default,) {final _that = this; | ||||||
|  | switch (_that) { | ||||||
|  | case _SnDeveloper() when $default != null: | ||||||
|  | return $default(_that.id,_that.publisherId,_that.publisher);case _: | ||||||
|  |   return null; | ||||||
|  |  | ||||||
|  | } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// @nodoc | ||||||
|  | @JsonSerializable() | ||||||
|  |  | ||||||
|  | class _SnDeveloper implements SnDeveloper { | ||||||
|  |   const _SnDeveloper({required this.id, required this.publisherId, this.publisher}); | ||||||
|  |   factory _SnDeveloper.fromJson(Map<String, dynamic> json) => _$SnDeveloperFromJson(json); | ||||||
|  |  | ||||||
|  | @override final  String id; | ||||||
|  | @override final  String publisherId; | ||||||
|  | @override final  SnPublisher? publisher; | ||||||
|  |  | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @override @JsonKey(includeFromJson: false, includeToJson: false) | ||||||
|  | @pragma('vm:prefer-inline') | ||||||
|  | _$SnDeveloperCopyWith<_SnDeveloper> get copyWith => __$SnDeveloperCopyWithImpl<_SnDeveloper>(this, _$identity); | ||||||
|  |  | ||||||
|  | @override | ||||||
|  | Map<String, dynamic> toJson() { | ||||||
|  |   return _$SnDeveloperToJson(this, ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @override | ||||||
|  | bool operator ==(Object other) { | ||||||
|  |   return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnDeveloper&&(identical(other.id, id) || other.id == id)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @JsonKey(includeFromJson: false, includeToJson: false) | ||||||
|  | @override | ||||||
|  | int get hashCode => Object.hash(runtimeType,id,publisherId,publisher); | ||||||
|  |  | ||||||
|  | @override | ||||||
|  | String toString() { | ||||||
|  |   return 'SnDeveloper(id: $id, publisherId: $publisherId, publisher: $publisher)'; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// @nodoc | ||||||
|  | abstract mixin class _$SnDeveloperCopyWith<$Res> implements $SnDeveloperCopyWith<$Res> { | ||||||
|  |   factory _$SnDeveloperCopyWith(_SnDeveloper value, $Res Function(_SnDeveloper) _then) = __$SnDeveloperCopyWithImpl; | ||||||
|  | @override @useResult | ||||||
|  | $Res call({ | ||||||
|  |  String id, String publisherId, SnPublisher? publisher | ||||||
|  | }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @override $SnPublisherCopyWith<$Res>? get publisher; | ||||||
|  |  | ||||||
|  | } | ||||||
|  | /// @nodoc | ||||||
|  | class __$SnDeveloperCopyWithImpl<$Res> | ||||||
|  |     implements _$SnDeveloperCopyWith<$Res> { | ||||||
|  |   __$SnDeveloperCopyWithImpl(this._self, this._then); | ||||||
|  |  | ||||||
|  |   final _SnDeveloper _self; | ||||||
|  |   final $Res Function(_SnDeveloper) _then; | ||||||
|  |  | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? publisherId = null,Object? publisher = freezed,}) { | ||||||
|  |   return _then(_SnDeveloper( | ||||||
|  | id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable | ||||||
|  | as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable | ||||||
|  | as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable | ||||||
|  | as SnPublisher?, | ||||||
|  |   )); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /// Create a copy of SnDeveloper | ||||||
|  | /// with the given fields replaced by the non-null parameter values. | ||||||
|  | @override | ||||||
|  | @pragma('vm:prefer-inline') | ||||||
|  | $SnPublisherCopyWith<$Res>? get publisher { | ||||||
|  |     if (_self.publisher == null) { | ||||||
|  |     return null; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return $SnPublisherCopyWith<$Res>(_self.publisher!, (value) { | ||||||
|  |     return _then(_self.copyWith(publisher: value)); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| /// @nodoc | /// @nodoc | ||||||
| mixin _$DeveloperStats { | mixin _$DeveloperStats { | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,6 +6,22 @@ part of 'developer.dart'; | |||||||
| // JsonSerializableGenerator | // JsonSerializableGenerator | ||||||
| // ************************************************************************** | // ************************************************************************** | ||||||
|  |  | ||||||
|  | _SnDeveloper _$SnDeveloperFromJson(Map<String, dynamic> json) => _SnDeveloper( | ||||||
|  |   id: json['id'] as String, | ||||||
|  |   publisherId: json['publisher_id'] as String, | ||||||
|  |   publisher: | ||||||
|  |       json['publisher'] == null | ||||||
|  |           ? null | ||||||
|  |           : SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>), | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | Map<String, dynamic> _$SnDeveloperToJson(_SnDeveloper instance) => | ||||||
|  |     <String, dynamic>{ | ||||||
|  |       'id': instance.id, | ||||||
|  |       'publisher_id': instance.publisherId, | ||||||
|  |       'publisher': instance.publisher?.toJson(), | ||||||
|  |     }; | ||||||
|  |  | ||||||
| _DeveloperStats _$DeveloperStatsFromJson(Map<String, dynamic> json) => | _DeveloperStats _$DeveloperStatsFromJson(Map<String, dynamic> json) => | ||||||
|     _DeveloperStats( |     _DeveloperStats( | ||||||
|       totalCustomApps: (json['total_custom_apps'] as num?)?.toInt() ?? 0, |       totalCustomApps: (json['total_custom_apps'] as num?)?.toInt() ?? 0, | ||||||
|   | |||||||
| @@ -30,12 +30,12 @@ Future<DeveloperStats?> developerStats(Ref ref, String? uname) async { | |||||||
| } | } | ||||||
|  |  | ||||||
| @riverpod | @riverpod | ||||||
| Future<List<SnPublisher>> developers(Ref ref) async { | Future<List<SnDeveloper>> developers(Ref ref) async { | ||||||
|   final client = ref.watch(apiClientProvider); |   final client = ref.watch(apiClientProvider); | ||||||
|   final resp = await client.get('/develop/developers'); |   final resp = await client.get('/develop/developers'); | ||||||
|   return resp.data |   return resp.data | ||||||
|       .map((e) => SnPublisher.fromJson(e)) |       .map((e) => SnDeveloper.fromJson(e)) | ||||||
|       .cast<SnPublisher>() |       .cast<SnDeveloper>() | ||||||
|       .toList(); |       .toList(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -74,25 +74,25 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     final developers = ref.watch(developersProvider); |     final developers = ref.watch(developersProvider); | ||||||
|     final currentDeveloper = useState<SnPublisher?>( |     final currentDeveloper = useState<SnDeveloper?>( | ||||||
|       developers.value?.firstOrNull, |       developers.value?.firstOrNull, | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     final List<DropdownMenuItem<SnPublisher>> developersMenu = developers.when( |     final List<DropdownMenuItem<SnDeveloper>> developersMenu = developers.when( | ||||||
|       data: |       data: | ||||||
|           (data) => |           (data) => | ||||||
|               data |               data | ||||||
|                   .map( |                   .map( | ||||||
|                     (item) => DropdownMenuItem<SnPublisher>( |                     (item) => DropdownMenuItem<SnDeveloper>( | ||||||
|                       value: item, |                       value: item, | ||||||
|                       child: ListTile( |                       child: ListTile( | ||||||
|                         minTileHeight: 48, |                         minTileHeight: 48, | ||||||
|                         leading: ProfilePictureWidget( |                         leading: ProfilePictureWidget( | ||||||
|                           radius: 16, |                           radius: 16, | ||||||
|                           fileId: item.picture?.id, |                           fileId: item.publisher?.picture?.id, | ||||||
|                         ), |                         ), | ||||||
|                         title: Text(item.nick), |                         title: Text(item.publisher!.nick), | ||||||
|                         subtitle: Text('@${item.name}'), |                         subtitle: Text('@${item.publisher!.name}'), | ||||||
|                         trailing: |                         trailing: | ||||||
|                             currentDeveloper.value?.id == item.id |                             currentDeveloper.value?.id == item.id | ||||||
|                                 ? const Icon(Icons.check) |                                 ? const Icon(Icons.check) | ||||||
| @@ -107,7 +107,7 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     final developerStats = ref.watch( |     final developerStats = ref.watch( | ||||||
|       developerStatsProvider(currentDeveloper.value?.name), |       developerStatsProvider(currentDeveloper.value?.publisher?.name), | ||||||
|     ); |     ); | ||||||
|  |  | ||||||
|     return AppScaffold( |     return AppScaffold( | ||||||
| @@ -117,7 +117,7 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|         title: Text('developerHub').tr(), |         title: Text('developerHub').tr(), | ||||||
|         actions: [ |         actions: [ | ||||||
|           DropdownButtonHideUnderline( |           DropdownButtonHideUnderline( | ||||||
|             child: DropdownButton2<SnPublisher>( |             child: DropdownButton2<SnDeveloper>( | ||||||
|               alignment: Alignment.centerRight, |               alignment: Alignment.centerRight, | ||||||
|               value: currentDeveloper.value, |               value: currentDeveloper.value, | ||||||
|               hint: CircleAvatar( |               hint: CircleAvatar( | ||||||
| @@ -139,7 +139,7 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|                   ...developersMenu.map( |                   ...developersMenu.map( | ||||||
|                     (e) => ProfilePictureWidget( |                     (e) => ProfilePictureWidget( | ||||||
|                       radius: 16, |                       radius: 16, | ||||||
|                       fileId: e.value?.picture?.id, |                       fileId: e.value?.publisher?.picture?.id, | ||||||
|                     ).center().padding(right: 8), |                     ).center().padding(right: 8), | ||||||
|                   ), |                   ), | ||||||
|                 ]; |                 ]; | ||||||
| @@ -193,10 +193,12 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|                           ...(developers.value?.map( |                           ...(developers.value?.map( | ||||||
|                                 (developer) => ListTile( |                                 (developer) => ListTile( | ||||||
|                                   leading: ProfilePictureWidget( |                                   leading: ProfilePictureWidget( | ||||||
|                                     file: developer.picture, |                                     file: developer.publisher?.picture, | ||||||
|  |                                   ), | ||||||
|  |                                   title: Text(developer.publisher!.nick), | ||||||
|  |                                   subtitle: Text( | ||||||
|  |                                     '@${developer.publisher!.name}', | ||||||
|                                   ), |                                   ), | ||||||
|                                   title: Text(developer.nick), |  | ||||||
|                                   subtitle: Text('@${developer.name}'), |  | ||||||
|                                   onTap: () { |                                   onTap: () { | ||||||
|                                     currentDeveloper.value = developer; |                                     currentDeveloper.value = developer; | ||||||
|                                   }, |                                   }, | ||||||
| @@ -243,7 +245,8 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|                               context.pushNamed( |                               context.pushNamed( | ||||||
|                                 'developerApps', |                                 'developerApps', | ||||||
|                                 pathParameters: { |                                 pathParameters: { | ||||||
|                                   'name': currentDeveloper.value!.name, |                                   'name': | ||||||
|  |                                       currentDeveloper.value!.publisher!.name, | ||||||
|                                 }, |                                 }, | ||||||
|                               ); |                               ); | ||||||
|                             }, |                             }, | ||||||
| @@ -257,7 +260,9 @@ class DeveloperHubScreen extends HookConsumerWidget { | |||||||
|               error: err, |               error: err, | ||||||
|               onRetry: () { |               onRetry: () { | ||||||
|                 ref.invalidate( |                 ref.invalidate( | ||||||
|                   developerStatsProvider(currentDeveloper.value?.name), |                   developerStatsProvider( | ||||||
|  |                     currentDeveloper.value?.publisher!.name, | ||||||
|  |                   ), | ||||||
|                 ); |                 ); | ||||||
|               }, |               }, | ||||||
|             ), |             ), | ||||||
| @@ -354,7 +359,7 @@ class _DeveloperEnrollmentSheet extends HookConsumerWidget { | |||||||
|                     ? Center( |                     ? Center( | ||||||
|                       child: |                       child: | ||||||
|                           Text( |                           Text( | ||||||
|                             'noPublishersToEnroll', |                             'noDevelopersToEnroll', | ||||||
|                             textAlign: TextAlign.center, |                             textAlign: TextAlign.center, | ||||||
|                           ).tr(), |                           ).tr(), | ||||||
|                     ) |                     ) | ||||||
|   | |||||||
| @@ -149,12 +149,12 @@ class _DeveloperStatsProviderElement | |||||||
|   String? get uname => (origin as DeveloperStatsProvider).uname; |   String? get uname => (origin as DeveloperStatsProvider).uname; | ||||||
| } | } | ||||||
|  |  | ||||||
| String _$developersHash() => r'04f25db31f511f651a5add128d56631236ed0b39'; | String _$developersHash() => r'252341098617ac398ce133994453f318dd3edbd2'; | ||||||
|  |  | ||||||
| /// See also [developers]. | /// See also [developers]. | ||||||
| @ProviderFor(developers) | @ProviderFor(developers) | ||||||
| final developersProvider = | final developersProvider = | ||||||
|     AutoDisposeFutureProvider<List<SnPublisher>>.internal( |     AutoDisposeFutureProvider<List<SnDeveloper>>.internal( | ||||||
|       developers, |       developers, | ||||||
|       name: r'developersProvider', |       name: r'developersProvider', | ||||||
|       debugGetCreateSourceHash: |       debugGetCreateSourceHash: | ||||||
| @@ -167,6 +167,6 @@ final developersProvider = | |||||||
|  |  | ||||||
| @Deprecated('Will be removed in 3.0. Use Ref instead') | @Deprecated('Will be removed in 3.0. Use Ref instead') | ||||||
| // ignore: unused_element | // ignore: unused_element | ||||||
| typedef DevelopersRef = AutoDisposeFutureProviderRef<List<SnPublisher>>; | typedef DevelopersRef = AutoDisposeFutureProviderRef<List<SnDeveloper>>; | ||||||
| // ignore_for_file: type=lint | // ignore_for_file: type=lint | ||||||
| // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package | // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package | ||||||
|   | |||||||
| @@ -331,7 +331,7 @@ class _WebSocketIndicator extends HookConsumerWidget { | |||||||
|     final user = ref.watch(userInfoProvider); |     final user = ref.watch(userInfoProvider); | ||||||
|     final websocketState = ref.watch(websocketStateProvider); |     final websocketState = ref.watch(websocketStateProvider); | ||||||
|     final indicatorHeight = |     final indicatorHeight = | ||||||
|         MediaQuery.of(context).padding.top + (isDesktop ? 27.5 : 20); |         MediaQuery.of(context).padding.top + (isDesktop ? 27.5 : 25); | ||||||
|  |  | ||||||
|     Color indicatorColor; |     Color indicatorColor; | ||||||
|     String indicatorText; |     String indicatorText; | ||||||
|   | |||||||
| @@ -142,7 +142,7 @@ class CloudVideoWidget extends HookConsumerWidget { | |||||||
|               mainAxisAlignment: MainAxisAlignment.end, |               mainAxisAlignment: MainAxisAlignment.end, | ||||||
|               crossAxisAlignment: CrossAxisAlignment.stretch, |               crossAxisAlignment: CrossAxisAlignment.stretch, | ||||||
|               children: [ |               children: [ | ||||||
|                 Row( |                 Wrap( | ||||||
|                   spacing: 8, |                   spacing: 8, | ||||||
|                   children: [ |                   children: [ | ||||||
|                     if (item.fileMeta?['duration'] != null) |                     if (item.fileMeta?['duration'] != null) | ||||||
| @@ -199,8 +199,8 @@ class CloudVideoWidget extends HookConsumerWidget { | |||||||
|                   ), |                   ), | ||||||
|                 ), |                 ), | ||||||
|               ], |               ], | ||||||
|             ), |  | ||||||
|             ).padding(horizontal: 16, bottom: 12), |             ).padding(horizontal: 16, bottom: 12), | ||||||
|  |           ), | ||||||
|         ], |         ], | ||||||
|       ), |       ), | ||||||
|       onTap: () { |       onTap: () { | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -73,22 +73,6 @@ packages: | |||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.13.0" |     version: "2.13.0" | ||||||
|   auto_route: |  | ||||||
|     dependency: transitive |  | ||||||
|     description: |  | ||||||
|       name: auto_route |  | ||||||
|       sha256: b8c036fa613a98a759cf0fdcba26e62f4985dcbff01a5e760ab411e8554bbaf0 |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "10.1.0+1" |  | ||||||
|   auto_route_generator: |  | ||||||
|     dependency: "direct dev" |  | ||||||
|     description: |  | ||||||
|       name: auto_route_generator |  | ||||||
|       sha256: "9e3846fcbeacba5c362557328dd8c8fbc953b6a0cbc3395365e8d8f92eea29c4" |  | ||||||
|       url: "https://pub.dev" |  | ||||||
|     source: hosted |  | ||||||
|     version: "10.1.0" |  | ||||||
|   avatar_stack: |   avatar_stack: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -205,10 +189,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: built_value |       name: built_value | ||||||
|       sha256: "0b1b12a0a549605e5f04476031cd0bc91ead1d7c8e830773a18ee54179b3cb62" |       sha256: ba95c961bafcd8686d1cf63be864eb59447e795e124d98d6a27d91fcd13602fb | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "8.11.0" |     version: "8.11.1" | ||||||
|   cached_network_image: |   cached_network_image: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -453,10 +437,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: dio |       name: dio | ||||||
|       sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9" |       sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "5.8.0+1" |     version: "5.9.0" | ||||||
|   dio_web_adapter: |   dio_web_adapter: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -573,10 +557,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: file_picker |       name: file_picker | ||||||
|       sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8" |       sha256: "8f9f429998f9232d65bc4757af74475ce44fc80f10704ff5dfa8b1d14fc429b9" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "10.2.1" |     version: "10.2.3" | ||||||
|   file_selector_linux: |   file_selector_linux: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -911,10 +895,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: flutter_plugin_android_lifecycle |       name: flutter_plugin_android_lifecycle | ||||||
|       sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e |       sha256: "6382ce712ff69b0f719640ce957559dde459e55ecd433c767e06d139ddf16cab" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.0.28" |     version: "2.0.29" | ||||||
|   flutter_popup_card: |   flutter_popup_card: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -1033,10 +1017,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: font_awesome_flutter |       name: font_awesome_flutter | ||||||
|       sha256: d3a89184101baec7f4600d58840a764d2ef760fe1c5a20ef9e6b0e9b24a07a3a |       sha256: f50ce90dbe26d977415b9540400d6778bef00894aced6358ae578abd92b14b10 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "10.8.0" |     version: "10.9.0" | ||||||
|   freezed: |   freezed: | ||||||
|     dependency: "direct dev" |     dependency: "direct dev" | ||||||
|     description: |     description: | ||||||
| @@ -1089,10 +1073,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: go_router |       name: go_router | ||||||
|       sha256: c489908a54ce2131f1d1b7cc631af9c1a06fac5ca7c449e959192089f9489431 |       sha256: "8b1f37dfaf6e958c6b872322db06f946509433bec3de753c3491a42ae9ec2b48" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "16.0.0" |     version: "16.1.0" | ||||||
|   google_fonts: |   google_fonts: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -1153,10 +1137,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: http |       name: http | ||||||
|       sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b" |       sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.4.0" |     version: "1.5.0" | ||||||
|   http_multi_server: |   http_multi_server: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1193,10 +1177,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: image_picker_android |       name: image_picker_android | ||||||
|       sha256: "6fae381e6af2bbe0365a5e4ce1db3959462fa0c4d234facf070746024bb80c8d" |       sha256: b08e9a04d0f8d91f4a6e767a745b9871bfbc585410205c311d0492de20a7ccd6 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.8.12+24" |     version: "0.8.12+25" | ||||||
|   image_picker_for_web: |   image_picker_for_web: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1361,18 +1345,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: local_auth_android |       name: local_auth_android | ||||||
|       sha256: "82b2bdeee2199a510d3b7716121e96a6609da86693bb0863edd8566355406b79" |       sha256: "316503f6772dea9c0c038bb7aac4f68ab00112d707d258c770f7fc3c250a2d88" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.0.50" |     version: "1.0.51" | ||||||
|   local_auth_darwin: |   local_auth_darwin: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: local_auth_darwin |       name: local_auth_darwin | ||||||
|       sha256: "25163ce60a5a6c468cf7a0e3dc8a165f824cabc2aa9e39a5e9fc5c2311b7686f" |       sha256: "0e9706a8543a4a2eee60346294d6a633dd7c3ee60fae6b752570457c4ff32055" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.5.0" |     version: "1.6.0" | ||||||
|   local_auth_platform_interface: |   local_auth_platform_interface: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -2033,10 +2017,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: shared_preferences_android |       name: shared_preferences_android | ||||||
|       sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac" |       sha256: "5bcf0772a761b04f8c6bf814721713de6f3e5d9d89caf8d3fe031b02a342379e" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.4.10" |     version: "2.4.11" | ||||||
|   shared_preferences_foundation: |   shared_preferences_foundation: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -2206,18 +2190,18 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: sqlite3 |       name: sqlite3 | ||||||
|       sha256: dd806fff004a0aeb01e208b858dbc649bc72104670d425a81a6dd17698535f6e |       sha256: f393d92c71bdcc118d6203d07c991b9be0f84b1a6f89dd4f7eed348131329924 | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "2.8.0" |     version: "2.9.0" | ||||||
|   sqlite3_flutter_libs: |   sqlite3_flutter_libs: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: sqlite3_flutter_libs |       name: sqlite3_flutter_libs | ||||||
|       sha256: fd996da5515a73aacd0a04ae7063db5fe8df42670d974df4c3ee538c652eef2e |       sha256: "2b03273e71867a8a4d030861fc21706200debe5c5858a4b9e58f4a1c129586a4" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "0.5.38" |     version: "0.5.39" | ||||||
|   sqlparser: |   sqlparser: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -2424,10 +2408,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: url_launcher_android |       name: url_launcher_android | ||||||
|       sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79" |       sha256: "0aedad096a85b49df2e4725fa32118f9fa580f3b14af7a2d2221896a02cd5656" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.3.16" |     version: "6.3.17" | ||||||
|   url_launcher_ios: |   url_launcher_ios: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								pubspec.yaml
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								pubspec.yaml
									
									
									
									
									
								
							| @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev | |||||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||||
| # In Windows, build-name is used as the major, minor, and patch parts | # In Windows, build-name is used as the major, minor, and patch parts | ||||||
| # of the product and file versions while build-number is used as the build suffix. | # of the product and file versions while build-number is used as the build suffix. | ||||||
| version: 3.1.0+118 | version: 3.1.0+120 | ||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ^3.7.2 |   sdk: ^3.7.2 | ||||||
| @@ -39,12 +39,12 @@ dependencies: | |||||||
|   flutter_hooks: ^0.21.2 |   flutter_hooks: ^0.21.2 | ||||||
|   hooks_riverpod: ^2.6.1 |   hooks_riverpod: ^2.6.1 | ||||||
|   bitsdojo_window: ^0.1.6 |   bitsdojo_window: ^0.1.6 | ||||||
|   go_router: ^16.0.0 |   go_router: ^16.1.0 | ||||||
|   styled_widget: ^0.4.1 |   styled_widget: ^0.4.1 | ||||||
|   shared_preferences: ^2.5.3 |   shared_preferences: ^2.5.3 | ||||||
|   flutter_riverpod: ^2.6.1 |   flutter_riverpod: ^2.6.1 | ||||||
|   path_provider: ^2.1.5 |   path_provider: ^2.1.5 | ||||||
|   dio: ^5.8.0+1 |   dio: ^5.9.0 | ||||||
|   very_good_infinite_list: ^0.9.0 |   very_good_infinite_list: ^0.9.0 | ||||||
|   freezed_annotation: ^3.1.0 |   freezed_annotation: ^3.1.0 | ||||||
|   json_annotation: ^4.9.0 |   json_annotation: ^4.9.0 | ||||||
| @@ -73,10 +73,10 @@ dependencies: | |||||||
|     git: https://github.com/LittleSheep2Code/tus_client.git |     git: https://github.com/LittleSheep2Code/tus_client.git | ||||||
|   cross_file: ^0.3.4+2 |   cross_file: ^0.3.4+2 | ||||||
|   image_picker: ^1.1.2 |   image_picker: ^1.1.2 | ||||||
|   file_picker: ^10.2.1 |   file_picker: ^10.2.3 | ||||||
|   riverpod_annotation: ^2.6.1 |   riverpod_annotation: ^2.6.1 | ||||||
|   image_picker_platform_interface: ^2.10.1 |   image_picker_platform_interface: ^2.10.1 | ||||||
|   image_picker_android: ^0.8.12+24 |   image_picker_android: ^0.8.12+25 | ||||||
|   super_context_menu: ^0.9.1 |   super_context_menu: ^0.9.1 | ||||||
|   modal_bottom_sheet: ^3.0.0 |   modal_bottom_sheet: ^3.0.0 | ||||||
|   firebase_messaging: ^16.0.0 |   firebase_messaging: ^16.0.0 | ||||||
| @@ -144,7 +144,6 @@ dev_dependencies: | |||||||
|   # package. See that file for information about deactivating specific lint |   # package. See that file for information about deactivating specific lint | ||||||
|   # rules and activating additional ones. |   # rules and activating additional ones. | ||||||
|   flutter_lints: ^6.0.0 |   flutter_lints: ^6.0.0 | ||||||
|   auto_route_generator: ^10.1.0 |  | ||||||
|   build_runner: ^2.5.4 |   build_runner: ^2.5.4 | ||||||
|   freezed: ^3.1.0 |   freezed: ^3.1.0 | ||||||
|   json_serializable: ^6.9.5 |   json_serializable: ^6.9.5 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user