✨ Pages management in site detail
This commit is contained in:
25
lib/models/site_file.dart
Normal file
25
lib/models/site_file.dart
Normal file
@@ -0,0 +1,25 @@
|
||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||
|
||||
part 'site_file.freezed.dart';
|
||||
part 'site_file.g.dart';
|
||||
|
||||
@freezed
|
||||
sealed class SnSiteFileEntry with _$SnSiteFileEntry {
|
||||
const factory SnSiteFileEntry({
|
||||
required bool isDirectory,
|
||||
required String relativePath,
|
||||
required int size, // Size in bytes (0 for directories)
|
||||
required DateTime modified, // ISO 8601 timestamp
|
||||
}) = _SnSiteFileEntry;
|
||||
|
||||
factory SnSiteFileEntry.fromJson(Map<String, dynamic> json) =>
|
||||
_$SnSiteFileEntryFromJson(json);
|
||||
}
|
||||
|
||||
@freezed
|
||||
sealed class SnFileContent with _$SnFileContent {
|
||||
const factory SnFileContent({required String content}) = _SnFileContent;
|
||||
|
||||
factory SnFileContent.fromJson(Map<String, dynamic> json) =>
|
||||
_$SnFileContentFromJson(json);
|
||||
}
|
||||
539
lib/models/site_file.freezed.dart
Normal file
539
lib/models/site_file.freezed.dart
Normal file
@@ -0,0 +1,539 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// coverage:ignore-file
|
||||
// ignore_for_file: type=lint
|
||||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
|
||||
|
||||
part of 'site_file.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// FreezedGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// dart format off
|
||||
T _$identity<T>(T value) => value;
|
||||
|
||||
/// @nodoc
|
||||
mixin _$SnSiteFileEntry {
|
||||
|
||||
bool get isDirectory; String get relativePath; int get size;// Size in bytes (0 for directories)
|
||||
DateTime get modified;
|
||||
/// Create a copy of SnSiteFileEntry
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$SnSiteFileEntryCopyWith<SnSiteFileEntry> get copyWith => _$SnSiteFileEntryCopyWithImpl<SnSiteFileEntry>(this as SnSiteFileEntry, _$identity);
|
||||
|
||||
/// Serializes this SnSiteFileEntry to a JSON map.
|
||||
Map<String, dynamic> toJson();
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnSiteFileEntry&&(identical(other.isDirectory, isDirectory) || other.isDirectory == isDirectory)&&(identical(other.relativePath, relativePath) || other.relativePath == relativePath)&&(identical(other.size, size) || other.size == size)&&(identical(other.modified, modified) || other.modified == modified));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,isDirectory,relativePath,size,modified);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SnSiteFileEntry(isDirectory: $isDirectory, relativePath: $relativePath, size: $size, modified: $modified)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $SnSiteFileEntryCopyWith<$Res> {
|
||||
factory $SnSiteFileEntryCopyWith(SnSiteFileEntry value, $Res Function(SnSiteFileEntry) _then) = _$SnSiteFileEntryCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
bool isDirectory, String relativePath, int size, DateTime modified
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$SnSiteFileEntryCopyWithImpl<$Res>
|
||||
implements $SnSiteFileEntryCopyWith<$Res> {
|
||||
_$SnSiteFileEntryCopyWithImpl(this._self, this._then);
|
||||
|
||||
final SnSiteFileEntry _self;
|
||||
final $Res Function(SnSiteFileEntry) _then;
|
||||
|
||||
/// Create a copy of SnSiteFileEntry
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? isDirectory = null,Object? relativePath = null,Object? size = null,Object? modified = null,}) {
|
||||
return _then(_self.copyWith(
|
||||
isDirectory: null == isDirectory ? _self.isDirectory : isDirectory // ignore: cast_nullable_to_non_nullable
|
||||
as bool,relativePath: null == relativePath ? _self.relativePath : relativePath // ignore: cast_nullable_to_non_nullable
|
||||
as String,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
|
||||
as int,modified: null == modified ? _self.modified : modified // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [SnSiteFileEntry].
|
||||
extension SnSiteFileEntryPatterns on SnSiteFileEntry {
|
||||
/// 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( _SnSiteFileEntry value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry() 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( _SnSiteFileEntry value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry():
|
||||
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( _SnSiteFileEntry value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry() 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( bool isDirectory, String relativePath, int size, DateTime modified)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry() when $default != null:
|
||||
return $default(_that.isDirectory,_that.relativePath,_that.size,_that.modified);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( bool isDirectory, String relativePath, int size, DateTime modified) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry():
|
||||
return $default(_that.isDirectory,_that.relativePath,_that.size,_that.modified);}
|
||||
}
|
||||
/// 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( bool isDirectory, String relativePath, int size, DateTime modified)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnSiteFileEntry() when $default != null:
|
||||
return $default(_that.isDirectory,_that.relativePath,_that.size,_that.modified);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
@JsonSerializable()
|
||||
|
||||
class _SnSiteFileEntry implements SnSiteFileEntry {
|
||||
const _SnSiteFileEntry({required this.isDirectory, required this.relativePath, required this.size, required this.modified});
|
||||
factory _SnSiteFileEntry.fromJson(Map<String, dynamic> json) => _$SnSiteFileEntryFromJson(json);
|
||||
|
||||
@override final bool isDirectory;
|
||||
@override final String relativePath;
|
||||
@override final int size;
|
||||
// Size in bytes (0 for directories)
|
||||
@override final DateTime modified;
|
||||
|
||||
/// Create a copy of SnSiteFileEntry
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SnSiteFileEntryCopyWith<_SnSiteFileEntry> get copyWith => __$SnSiteFileEntryCopyWithImpl<_SnSiteFileEntry>(this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$SnSiteFileEntryToJson(this, );
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnSiteFileEntry&&(identical(other.isDirectory, isDirectory) || other.isDirectory == isDirectory)&&(identical(other.relativePath, relativePath) || other.relativePath == relativePath)&&(identical(other.size, size) || other.size == size)&&(identical(other.modified, modified) || other.modified == modified));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,isDirectory,relativePath,size,modified);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SnSiteFileEntry(isDirectory: $isDirectory, relativePath: $relativePath, size: $size, modified: $modified)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SnSiteFileEntryCopyWith<$Res> implements $SnSiteFileEntryCopyWith<$Res> {
|
||||
factory _$SnSiteFileEntryCopyWith(_SnSiteFileEntry value, $Res Function(_SnSiteFileEntry) _then) = __$SnSiteFileEntryCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
bool isDirectory, String relativePath, int size, DateTime modified
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SnSiteFileEntryCopyWithImpl<$Res>
|
||||
implements _$SnSiteFileEntryCopyWith<$Res> {
|
||||
__$SnSiteFileEntryCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _SnSiteFileEntry _self;
|
||||
final $Res Function(_SnSiteFileEntry) _then;
|
||||
|
||||
/// Create a copy of SnSiteFileEntry
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? isDirectory = null,Object? relativePath = null,Object? size = null,Object? modified = null,}) {
|
||||
return _then(_SnSiteFileEntry(
|
||||
isDirectory: null == isDirectory ? _self.isDirectory : isDirectory // ignore: cast_nullable_to_non_nullable
|
||||
as bool,relativePath: null == relativePath ? _self.relativePath : relativePath // ignore: cast_nullable_to_non_nullable
|
||||
as String,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
|
||||
as int,modified: null == modified ? _self.modified : modified // ignore: cast_nullable_to_non_nullable
|
||||
as DateTime,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// @nodoc
|
||||
mixin _$SnFileContent {
|
||||
|
||||
String get content;
|
||||
/// Create a copy of SnFileContent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
$SnFileContentCopyWith<SnFileContent> get copyWith => _$SnFileContentCopyWithImpl<SnFileContent>(this as SnFileContent, _$identity);
|
||||
|
||||
/// Serializes this SnFileContent to a JSON map.
|
||||
Map<String, dynamic> toJson();
|
||||
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnFileContent&&(identical(other.content, content) || other.content == content));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,content);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SnFileContent(content: $content)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class $SnFileContentCopyWith<$Res> {
|
||||
factory $SnFileContentCopyWith(SnFileContent value, $Res Function(SnFileContent) _then) = _$SnFileContentCopyWithImpl;
|
||||
@useResult
|
||||
$Res call({
|
||||
String content
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class _$SnFileContentCopyWithImpl<$Res>
|
||||
implements $SnFileContentCopyWith<$Res> {
|
||||
_$SnFileContentCopyWithImpl(this._self, this._then);
|
||||
|
||||
final SnFileContent _self;
|
||||
final $Res Function(SnFileContent) _then;
|
||||
|
||||
/// Create a copy of SnFileContent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline') @override $Res call({Object? content = null,}) {
|
||||
return _then(_self.copyWith(
|
||||
content: null == content ? _self.content : content // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// Adds pattern-matching-related methods to [SnFileContent].
|
||||
extension SnFileContentPatterns on SnFileContent {
|
||||
/// 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( _SnFileContent value)? $default,{required TResult orElse(),}){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent() 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( _SnFileContent value) $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent():
|
||||
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( _SnFileContent value)? $default,){
|
||||
final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent() 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 content)? $default,{required TResult orElse(),}) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent() when $default != null:
|
||||
return $default(_that.content);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 content) $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent():
|
||||
return $default(_that.content);}
|
||||
}
|
||||
/// 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 content)? $default,) {final _that = this;
|
||||
switch (_that) {
|
||||
case _SnFileContent() when $default != null:
|
||||
return $default(_that.content);case _:
|
||||
return null;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
@JsonSerializable()
|
||||
|
||||
class _SnFileContent implements SnFileContent {
|
||||
const _SnFileContent({required this.content});
|
||||
factory _SnFileContent.fromJson(Map<String, dynamic> json) => _$SnFileContentFromJson(json);
|
||||
|
||||
@override final String content;
|
||||
|
||||
/// Create a copy of SnFileContent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@pragma('vm:prefer-inline')
|
||||
_$SnFileContentCopyWith<_SnFileContent> get copyWith => __$SnFileContentCopyWithImpl<_SnFileContent>(this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$SnFileContentToJson(this, );
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnFileContent&&(identical(other.content, content) || other.content == content));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType,content);
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'SnFileContent(content: $content)';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract mixin class _$SnFileContentCopyWith<$Res> implements $SnFileContentCopyWith<$Res> {
|
||||
factory _$SnFileContentCopyWith(_SnFileContent value, $Res Function(_SnFileContent) _then) = __$SnFileContentCopyWithImpl;
|
||||
@override @useResult
|
||||
$Res call({
|
||||
String content
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/// @nodoc
|
||||
class __$SnFileContentCopyWithImpl<$Res>
|
||||
implements _$SnFileContentCopyWith<$Res> {
|
||||
__$SnFileContentCopyWithImpl(this._self, this._then);
|
||||
|
||||
final _SnFileContent _self;
|
||||
final $Res Function(_SnFileContent) _then;
|
||||
|
||||
/// Create a copy of SnFileContent
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override @pragma('vm:prefer-inline') $Res call({Object? content = null,}) {
|
||||
return _then(_SnFileContent(
|
||||
content: null == content ? _self.content : content // ignore: cast_nullable_to_non_nullable
|
||||
as String,
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// dart format on
|
||||
29
lib/models/site_file.g.dart
Normal file
29
lib/models/site_file.g.dart
Normal file
@@ -0,0 +1,29 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'site_file.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
_SnSiteFileEntry _$SnSiteFileEntryFromJson(Map<String, dynamic> json) =>
|
||||
_SnSiteFileEntry(
|
||||
isDirectory: json['is_directory'] as bool,
|
||||
relativePath: json['relative_path'] as String,
|
||||
size: (json['size'] as num).toInt(),
|
||||
modified: DateTime.parse(json['modified'] as String),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$SnSiteFileEntryToJson(_SnSiteFileEntry instance) =>
|
||||
<String, dynamic>{
|
||||
'is_directory': instance.isDirectory,
|
||||
'relative_path': instance.relativePath,
|
||||
'size': instance.size,
|
||||
'modified': instance.modified.toIso8601String(),
|
||||
};
|
||||
|
||||
_SnFileContent _$SnFileContentFromJson(Map<String, dynamic> json) =>
|
||||
_SnFileContent(content: json['content'] as String);
|
||||
|
||||
Map<String, dynamic> _$SnFileContentToJson(_SnFileContent instance) =>
|
||||
<String, dynamic>{'content': instance.content};
|
||||
142
lib/pods/site_files.dart
Normal file
142
lib/pods/site_files.dart
Normal file
@@ -0,0 +1,142 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:http_parser/http_parser.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:island/models/site_file.dart';
|
||||
import 'package:island/pods/network.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'site_files.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<SnSiteFileEntry>> siteFiles(
|
||||
Ref ref, {
|
||||
required String siteId,
|
||||
String? path,
|
||||
}) async {
|
||||
final apiClient = ref.watch(apiClientProvider);
|
||||
final queryParams = path != null ? {'path': path} : null;
|
||||
final resp = await apiClient.get(
|
||||
'/zone/sites/$siteId/files',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
final data = resp.data as List<dynamic>;
|
||||
return data.map((json) => SnSiteFileEntry.fromJson(json)).toList();
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<SnFileContent> siteFileContent(
|
||||
Ref ref, {
|
||||
required String siteId,
|
||||
required String relativePath,
|
||||
}) async {
|
||||
final apiClient = ref.watch(apiClientProvider);
|
||||
final resp = await apiClient.get(
|
||||
'/zone/sites/$siteId/files/content/$relativePath',
|
||||
);
|
||||
return SnFileContent.fromJson(resp.data);
|
||||
}
|
||||
|
||||
class SiteFilesNotifier
|
||||
extends
|
||||
AutoDisposeFamilyAsyncNotifier<
|
||||
List<SnSiteFileEntry>,
|
||||
({String siteId, String? path})
|
||||
> {
|
||||
@override
|
||||
Future<List<SnSiteFileEntry>> build(
|
||||
({String siteId, String? path}) arg,
|
||||
) async {
|
||||
return fetchFiles();
|
||||
}
|
||||
|
||||
Future<List<SnSiteFileEntry>> fetchFiles() async {
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
final queryParams = arg.path != null ? {'path': arg.path} : null;
|
||||
final resp = await apiClient.get(
|
||||
'/zone/sites/${arg.siteId}/files',
|
||||
queryParameters: queryParams,
|
||||
);
|
||||
final data = resp.data as List<dynamic>;
|
||||
return data.map((json) => SnSiteFileEntry.fromJson(json)).toList();
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> uploadFile(File file, String filePath) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
|
||||
// Create multipart form data
|
||||
final formData = FormData.fromMap({
|
||||
'filePath': filePath,
|
||||
'file': await MultipartFile.fromFile(
|
||||
file.path,
|
||||
filename: file.path.split('/').last,
|
||||
contentType: MediaType('application', 'octet-stream'),
|
||||
),
|
||||
});
|
||||
|
||||
await apiClient.post(
|
||||
'/zone/sites/${arg.siteId}/files/upload',
|
||||
data: formData,
|
||||
);
|
||||
|
||||
// Refresh the files list
|
||||
ref.invalidateSelf();
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateFileContent(String relativePath, String newContent) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
await apiClient.put(
|
||||
'/zone/sites/${arg.siteId}/files/edit/$relativePath',
|
||||
data: {'new_content': newContent},
|
||||
);
|
||||
|
||||
// Refresh the files list
|
||||
ref.invalidateSelf();
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> deleteFile(String relativePath) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
await apiClient.delete(
|
||||
'/zone/sites/${arg.siteId}/files/delete/$relativePath',
|
||||
);
|
||||
|
||||
// Refresh the files list
|
||||
ref.invalidateSelf();
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> createDirectory(String directoryPath) async {
|
||||
// For directories, we upload a dummy file first then delete it or create through upload
|
||||
// Actually, according to API docs, directories are created when uploading files to them
|
||||
// So we'll just invalidate to refresh the list
|
||||
ref.invalidateSelf();
|
||||
}
|
||||
}
|
||||
|
||||
final siteFilesNotifierProvider = AsyncNotifierProvider.autoDispose.family<
|
||||
SiteFilesNotifier,
|
||||
List<SnSiteFileEntry>,
|
||||
({String siteId, String? path})
|
||||
>(SiteFilesNotifier.new);
|
||||
304
lib/pods/site_files.g.dart
Normal file
304
lib/pods/site_files.g.dart
Normal file
@@ -0,0 +1,304 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'site_files.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$siteFilesHash() => r'd4029e6c160edcd454eb39ef1c19427b7f95a8d8';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
_SystemHash._();
|
||||
|
||||
static int combine(int hash, int value) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + value);
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
|
||||
return hash ^ (hash >> 6);
|
||||
}
|
||||
|
||||
static int finish(int hash) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
|
||||
// ignore: parameter_assignments
|
||||
hash = hash ^ (hash >> 11);
|
||||
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
|
||||
}
|
||||
}
|
||||
|
||||
/// See also [siteFiles].
|
||||
@ProviderFor(siteFiles)
|
||||
const siteFilesProvider = SiteFilesFamily();
|
||||
|
||||
/// See also [siteFiles].
|
||||
class SiteFilesFamily extends Family<AsyncValue<List<SnSiteFileEntry>>> {
|
||||
/// See also [siteFiles].
|
||||
const SiteFilesFamily();
|
||||
|
||||
/// See also [siteFiles].
|
||||
SiteFilesProvider call({required String siteId, String? path}) {
|
||||
return SiteFilesProvider(siteId: siteId, path: path);
|
||||
}
|
||||
|
||||
@override
|
||||
SiteFilesProvider getProviderOverride(covariant SiteFilesProvider provider) {
|
||||
return call(siteId: provider.siteId, path: provider.path);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'siteFilesProvider';
|
||||
}
|
||||
|
||||
/// See also [siteFiles].
|
||||
class SiteFilesProvider
|
||||
extends AutoDisposeFutureProvider<List<SnSiteFileEntry>> {
|
||||
/// See also [siteFiles].
|
||||
SiteFilesProvider({required String siteId, String? path})
|
||||
: this._internal(
|
||||
(ref) => siteFiles(ref as SiteFilesRef, siteId: siteId, path: path),
|
||||
from: siteFilesProvider,
|
||||
name: r'siteFilesProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$siteFilesHash,
|
||||
dependencies: SiteFilesFamily._dependencies,
|
||||
allTransitiveDependencies: SiteFilesFamily._allTransitiveDependencies,
|
||||
siteId: siteId,
|
||||
path: path,
|
||||
);
|
||||
|
||||
SiteFilesProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.siteId,
|
||||
required this.path,
|
||||
}) : super.internal();
|
||||
|
||||
final String siteId;
|
||||
final String? path;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
FutureOr<List<SnSiteFileEntry>> Function(SiteFilesRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: SiteFilesProvider._internal(
|
||||
(ref) => create(ref as SiteFilesRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
siteId: siteId,
|
||||
path: path,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<List<SnSiteFileEntry>> createElement() {
|
||||
return _SiteFilesProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is SiteFilesProvider &&
|
||||
other.siteId == siteId &&
|
||||
other.path == path;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, siteId.hashCode);
|
||||
hash = _SystemHash.combine(hash, path.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin SiteFilesRef on AutoDisposeFutureProviderRef<List<SnSiteFileEntry>> {
|
||||
/// The parameter `siteId` of this provider.
|
||||
String get siteId;
|
||||
|
||||
/// The parameter `path` of this provider.
|
||||
String? get path;
|
||||
}
|
||||
|
||||
class _SiteFilesProviderElement
|
||||
extends AutoDisposeFutureProviderElement<List<SnSiteFileEntry>>
|
||||
with SiteFilesRef {
|
||||
_SiteFilesProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
String get siteId => (origin as SiteFilesProvider).siteId;
|
||||
@override
|
||||
String? get path => (origin as SiteFilesProvider).path;
|
||||
}
|
||||
|
||||
String _$siteFileContentHash() => r'bb820f0fe5bdca55efb08beee97aa38d09be04a7';
|
||||
|
||||
/// See also [siteFileContent].
|
||||
@ProviderFor(siteFileContent)
|
||||
const siteFileContentProvider = SiteFileContentFamily();
|
||||
|
||||
/// See also [siteFileContent].
|
||||
class SiteFileContentFamily extends Family<AsyncValue<SnFileContent>> {
|
||||
/// See also [siteFileContent].
|
||||
const SiteFileContentFamily();
|
||||
|
||||
/// See also [siteFileContent].
|
||||
SiteFileContentProvider call({
|
||||
required String siteId,
|
||||
required String relativePath,
|
||||
}) {
|
||||
return SiteFileContentProvider(siteId: siteId, relativePath: relativePath);
|
||||
}
|
||||
|
||||
@override
|
||||
SiteFileContentProvider getProviderOverride(
|
||||
covariant SiteFileContentProvider provider,
|
||||
) {
|
||||
return call(siteId: provider.siteId, relativePath: provider.relativePath);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'siteFileContentProvider';
|
||||
}
|
||||
|
||||
/// See also [siteFileContent].
|
||||
class SiteFileContentProvider extends AutoDisposeFutureProvider<SnFileContent> {
|
||||
/// See also [siteFileContent].
|
||||
SiteFileContentProvider({
|
||||
required String siteId,
|
||||
required String relativePath,
|
||||
}) : this._internal(
|
||||
(ref) => siteFileContent(
|
||||
ref as SiteFileContentRef,
|
||||
siteId: siteId,
|
||||
relativePath: relativePath,
|
||||
),
|
||||
from: siteFileContentProvider,
|
||||
name: r'siteFileContentProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$siteFileContentHash,
|
||||
dependencies: SiteFileContentFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
SiteFileContentFamily._allTransitiveDependencies,
|
||||
siteId: siteId,
|
||||
relativePath: relativePath,
|
||||
);
|
||||
|
||||
SiteFileContentProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.siteId,
|
||||
required this.relativePath,
|
||||
}) : super.internal();
|
||||
|
||||
final String siteId;
|
||||
final String relativePath;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
FutureOr<SnFileContent> Function(SiteFileContentRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: SiteFileContentProvider._internal(
|
||||
(ref) => create(ref as SiteFileContentRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
siteId: siteId,
|
||||
relativePath: relativePath,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<SnFileContent> createElement() {
|
||||
return _SiteFileContentProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is SiteFileContentProvider &&
|
||||
other.siteId == siteId &&
|
||||
other.relativePath == relativePath;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, siteId.hashCode);
|
||||
hash = _SystemHash.combine(hash, relativePath.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin SiteFileContentRef on AutoDisposeFutureProviderRef<SnFileContent> {
|
||||
/// The parameter `siteId` of this provider.
|
||||
String get siteId;
|
||||
|
||||
/// The parameter `relativePath` of this provider.
|
||||
String get relativePath;
|
||||
}
|
||||
|
||||
class _SiteFileContentProviderElement
|
||||
extends AutoDisposeFutureProviderElement<SnFileContent>
|
||||
with SiteFileContentRef {
|
||||
_SiteFileContentProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
String get siteId => (origin as SiteFileContentProvider).siteId;
|
||||
@override
|
||||
String get relativePath => (origin as SiteFileContentProvider).relativePath;
|
||||
}
|
||||
|
||||
// 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
|
||||
116
lib/pods/site_pages.dart
Normal file
116
lib/pods/site_pages.dart
Normal file
@@ -0,0 +1,116 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:island/models/publication_site.dart';
|
||||
import 'package:island/pods/network.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'site_pages.g.dart';
|
||||
|
||||
@riverpod
|
||||
Future<List<SnPublicationPage>> sitePages(
|
||||
Ref ref,
|
||||
String pubName,
|
||||
String siteSlug,
|
||||
) async {
|
||||
final apiClient = ref.watch(apiClientProvider);
|
||||
final resp = await apiClient.get('/zone/sites/$pubName/$siteSlug/pages');
|
||||
final data = resp.data as List<dynamic>;
|
||||
return data.map((json) => SnPublicationPage.fromJson(json)).toList();
|
||||
}
|
||||
|
||||
@riverpod
|
||||
Future<SnPublicationPage> sitePage(Ref ref, String pageId) async {
|
||||
final apiClient = ref.watch(apiClientProvider);
|
||||
final resp = await apiClient.get('/zone/sites/pages/$pageId');
|
||||
return SnPublicationPage.fromJson(resp.data);
|
||||
}
|
||||
|
||||
class SitePagesNotifier
|
||||
extends
|
||||
AutoDisposeFamilyAsyncNotifier<
|
||||
List<SnPublicationPage>,
|
||||
({String pubName, String siteSlug})
|
||||
> {
|
||||
@override
|
||||
Future<List<SnPublicationPage>> build(
|
||||
({String pubName, String siteSlug}) arg,
|
||||
) async {
|
||||
return fetchPages();
|
||||
}
|
||||
|
||||
Future<List<SnPublicationPage>> fetchPages() async {
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
final resp = await apiClient.get(
|
||||
'/zone/sites/${arg.pubName}/${arg.siteSlug}/pages',
|
||||
);
|
||||
final data = resp.data as List<dynamic>;
|
||||
return data.map((json) => SnPublicationPage.fromJson(json)).toList();
|
||||
} catch (e) {
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<SnPublicationPage?> createPage(Map<String, dynamic> pageData) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
final resp = await apiClient.post(
|
||||
'/zone/sites/${arg.pubName}/${arg.siteSlug}/pages',
|
||||
data: pageData,
|
||||
);
|
||||
final newPage = SnPublicationPage.fromJson(resp.data);
|
||||
|
||||
// Refresh the pages list
|
||||
ref.invalidateSelf();
|
||||
|
||||
return newPage;
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<SnPublicationPage?> updatePage(
|
||||
String pageId,
|
||||
Map<String, dynamic> pageData,
|
||||
) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
final resp = await apiClient.patch(
|
||||
'/zone/sites/pages/$pageId',
|
||||
data: pageData,
|
||||
);
|
||||
final updatedPage = SnPublicationPage.fromJson(resp.data);
|
||||
|
||||
// Refresh the pages list
|
||||
ref.invalidateSelf();
|
||||
|
||||
return updatedPage;
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> deletePage(String pageId) async {
|
||||
state = const AsyncValue.loading();
|
||||
try {
|
||||
final apiClient = ref.read(apiClientProvider);
|
||||
await apiClient.delete('/zone/sites/pages/$pageId');
|
||||
|
||||
// Refresh the pages list
|
||||
ref.invalidateSelf();
|
||||
} catch (error, stackTrace) {
|
||||
state = AsyncValue.error(error, stackTrace);
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final sitePagesNotifierProvider = AsyncNotifierProvider.autoDispose.family<
|
||||
SitePagesNotifier,
|
||||
List<SnPublicationPage>,
|
||||
({String pubName, String siteSlug})
|
||||
>(SitePagesNotifier.new);
|
||||
280
lib/pods/site_pages.g.dart
Normal file
280
lib/pods/site_pages.g.dart
Normal file
@@ -0,0 +1,280 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'site_pages.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
String _$sitePagesHash() => r'5e084e9694ad665e9b238c6a747c6c6e99c5eb03';
|
||||
|
||||
/// Copied from Dart SDK
|
||||
class _SystemHash {
|
||||
_SystemHash._();
|
||||
|
||||
static int combine(int hash, int value) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + value);
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
|
||||
return hash ^ (hash >> 6);
|
||||
}
|
||||
|
||||
static int finish(int hash) {
|
||||
// ignore: parameter_assignments
|
||||
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
|
||||
// ignore: parameter_assignments
|
||||
hash = hash ^ (hash >> 11);
|
||||
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
|
||||
}
|
||||
}
|
||||
|
||||
/// See also [sitePages].
|
||||
@ProviderFor(sitePages)
|
||||
const sitePagesProvider = SitePagesFamily();
|
||||
|
||||
/// See also [sitePages].
|
||||
class SitePagesFamily extends Family<AsyncValue<List<SnPublicationPage>>> {
|
||||
/// See also [sitePages].
|
||||
const SitePagesFamily();
|
||||
|
||||
/// See also [sitePages].
|
||||
SitePagesProvider call(String pubName, String siteSlug) {
|
||||
return SitePagesProvider(pubName, siteSlug);
|
||||
}
|
||||
|
||||
@override
|
||||
SitePagesProvider getProviderOverride(covariant SitePagesProvider provider) {
|
||||
return call(provider.pubName, provider.siteSlug);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'sitePagesProvider';
|
||||
}
|
||||
|
||||
/// See also [sitePages].
|
||||
class SitePagesProvider
|
||||
extends AutoDisposeFutureProvider<List<SnPublicationPage>> {
|
||||
/// See also [sitePages].
|
||||
SitePagesProvider(String pubName, String siteSlug)
|
||||
: this._internal(
|
||||
(ref) => sitePages(ref as SitePagesRef, pubName, siteSlug),
|
||||
from: sitePagesProvider,
|
||||
name: r'sitePagesProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$sitePagesHash,
|
||||
dependencies: SitePagesFamily._dependencies,
|
||||
allTransitiveDependencies: SitePagesFamily._allTransitiveDependencies,
|
||||
pubName: pubName,
|
||||
siteSlug: siteSlug,
|
||||
);
|
||||
|
||||
SitePagesProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.pubName,
|
||||
required this.siteSlug,
|
||||
}) : super.internal();
|
||||
|
||||
final String pubName;
|
||||
final String siteSlug;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
FutureOr<List<SnPublicationPage>> Function(SitePagesRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: SitePagesProvider._internal(
|
||||
(ref) => create(ref as SitePagesRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
pubName: pubName,
|
||||
siteSlug: siteSlug,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<List<SnPublicationPage>> createElement() {
|
||||
return _SitePagesProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is SitePagesProvider &&
|
||||
other.pubName == pubName &&
|
||||
other.siteSlug == siteSlug;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, pubName.hashCode);
|
||||
hash = _SystemHash.combine(hash, siteSlug.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin SitePagesRef on AutoDisposeFutureProviderRef<List<SnPublicationPage>> {
|
||||
/// The parameter `pubName` of this provider.
|
||||
String get pubName;
|
||||
|
||||
/// The parameter `siteSlug` of this provider.
|
||||
String get siteSlug;
|
||||
}
|
||||
|
||||
class _SitePagesProviderElement
|
||||
extends AutoDisposeFutureProviderElement<List<SnPublicationPage>>
|
||||
with SitePagesRef {
|
||||
_SitePagesProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
String get pubName => (origin as SitePagesProvider).pubName;
|
||||
@override
|
||||
String get siteSlug => (origin as SitePagesProvider).siteSlug;
|
||||
}
|
||||
|
||||
String _$sitePageHash() => r'542f70c5b103fe34d7cf7eb0821d52f017022efc';
|
||||
|
||||
/// See also [sitePage].
|
||||
@ProviderFor(sitePage)
|
||||
const sitePageProvider = SitePageFamily();
|
||||
|
||||
/// See also [sitePage].
|
||||
class SitePageFamily extends Family<AsyncValue<SnPublicationPage>> {
|
||||
/// See also [sitePage].
|
||||
const SitePageFamily();
|
||||
|
||||
/// See also [sitePage].
|
||||
SitePageProvider call(String pageId) {
|
||||
return SitePageProvider(pageId);
|
||||
}
|
||||
|
||||
@override
|
||||
SitePageProvider getProviderOverride(covariant SitePageProvider provider) {
|
||||
return call(provider.pageId);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
||||
|
||||
@override
|
||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
||||
_allTransitiveDependencies;
|
||||
|
||||
@override
|
||||
String? get name => r'sitePageProvider';
|
||||
}
|
||||
|
||||
/// See also [sitePage].
|
||||
class SitePageProvider extends AutoDisposeFutureProvider<SnPublicationPage> {
|
||||
/// See also [sitePage].
|
||||
SitePageProvider(String pageId)
|
||||
: this._internal(
|
||||
(ref) => sitePage(ref as SitePageRef, pageId),
|
||||
from: sitePageProvider,
|
||||
name: r'sitePageProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$sitePageHash,
|
||||
dependencies: SitePageFamily._dependencies,
|
||||
allTransitiveDependencies: SitePageFamily._allTransitiveDependencies,
|
||||
pageId: pageId,
|
||||
);
|
||||
|
||||
SitePageProvider._internal(
|
||||
super._createNotifier, {
|
||||
required super.name,
|
||||
required super.dependencies,
|
||||
required super.allTransitiveDependencies,
|
||||
required super.debugGetCreateSourceHash,
|
||||
required super.from,
|
||||
required this.pageId,
|
||||
}) : super.internal();
|
||||
|
||||
final String pageId;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
FutureOr<SnPublicationPage> Function(SitePageRef provider) create,
|
||||
) {
|
||||
return ProviderOverride(
|
||||
origin: this,
|
||||
override: SitePageProvider._internal(
|
||||
(ref) => create(ref as SitePageRef),
|
||||
from: from,
|
||||
name: null,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
debugGetCreateSourceHash: null,
|
||||
pageId: pageId,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
AutoDisposeFutureProviderElement<SnPublicationPage> createElement() {
|
||||
return _SitePageProviderElement(this);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is SitePageProvider && other.pageId == pageId;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
||||
hash = _SystemHash.combine(hash, pageId.hashCode);
|
||||
|
||||
return _SystemHash.finish(hash);
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
mixin SitePageRef on AutoDisposeFutureProviderRef<SnPublicationPage> {
|
||||
/// The parameter `pageId` of this provider.
|
||||
String get pageId;
|
||||
}
|
||||
|
||||
class _SitePageProviderElement
|
||||
extends AutoDisposeFutureProviderElement<SnPublicationPage>
|
||||
with SitePageRef {
|
||||
_SitePageProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
String get pageId => (origin as SitePageProvider).pageId;
|
||||
}
|
||||
|
||||
// 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
|
||||
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,10 @@ class SheetScaffold extends StatelessWidget {
|
||||
const Spacer(),
|
||||
...actions,
|
||||
IconButton(
|
||||
icon: const Icon(Symbols.close),
|
||||
icon: Icon(
|
||||
Symbols.close,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
),
|
||||
onPressed:
|
||||
() =>
|
||||
onClose != null
|
||||
|
||||
@@ -1302,7 +1302,7 @@ packages:
|
||||
source: hosted
|
||||
version: "3.2.2"
|
||||
http_parser:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
|
||||
@@ -169,6 +169,7 @@ dependencies:
|
||||
convert: ^3.1.2
|
||||
desktop_drop: ^0.7.0
|
||||
flutter_animate: ^4.5.2
|
||||
http_parser: ^4.1.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Reference in New Issue
Block a user