Compare commits

...

4 Commits

175 changed files with 8829 additions and 16016 deletions

View File

@@ -211,7 +211,7 @@ class IslandApp extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final theme = ref.watch(themeProvider);
final settings = ref.watch(appSettingsNotifierProvider);
final settings = ref.watch(appSettingsProvider);
// Convert string theme mode to ThemeMode enum
ThemeMode getThemeMode() {

View File

@@ -330,13 +330,127 @@ class ServerState {
}
}
class ServerStateNotifier extends StateNotifier<ServerState> {
final ActivityRpcServer server;
final Dio apiClient;
class ServerStateNotifier extends Notifier<ServerState> {
late final ActivityRpcServer server;
late final Dio apiClient;
Timer? _renewalTimer;
ServerStateNotifier(this.apiClient, this.server)
: super(ServerState(status: 'Server not started'));
@override
ServerState build() {
apiClient = ref.watch(apiClientProvider);
server = ActivityRpcServer({});
_setupHandlers();
ref.onDispose(() {
_stopRenewal();
server.stop();
});
return ServerState(status: 'Server not started');
}
void _setupHandlers() {
server.updateHandlers({
'connection': (socket) {
final clientId =
socket is _WsSocketWrapper
? socket.clientId
: (socket as IpcSocketWrapper).clientId;
updateStatus('Client connected (ID: $clientId)');
socket.send({
'cmd': 'DISPATCH',
'data': {
'v': 1,
'config': {
'cdn_host': 'fake.cdn',
'api_endpoint': '//fake.api',
'environment': 'dev',
},
'user': {
'id': 'fake_user_id',
'username': 'FakeUser',
'discriminator': '0001',
'avatar': null,
'bot': false,
},
},
'evt': 'READY',
'nonce': '12345',
});
},
'message': (socket, dynamic data) async {
if (data['cmd'] == 'SET_ACTIVITY') {
final activity = data['args']['activity'];
final appId = 'rpc:${socket.clientId}';
final currentId = currentActivityManualId;
if (currentId != null && currentId != appId) {
talker.info(
'Skipped the new SET_ACTIVITY command due to there is one existing...',
);
return;
}
addActivity('Activity: ${activity['details'] ?? 'Untitled'}');
// https://discord.com/developers/docs/topics/rpc#setactivity-set-activity-argument-structure
final type = switch (activity['type']) {
0 => 1, // Discord Playing -> Playing
2 => 2, // Discord Music -> Listening
3 => 2, // Discord Watching -> Listening
_ => 1, // Discord Competing (or null) -> Playing
};
final title = activity['name'] ?? activity['assets']?['small_text'];
final subtitle =
activity['details'] ?? activity['assets']?['large_text'];
var imageSmall = activity['assets']?['small_image'];
var imageLarge = activity['assets']?['large_image'];
if (imageSmall != null && !imageSmall!.contains(':')) {
imageSmall = 'discord:$imageSmall';
}
if (imageLarge != null && !imageLarge!.contains(':')) {
imageLarge = 'discord:$imageLarge';
}
try {
final activityData = {
'type': type,
'manual_id': appId,
'title': title,
'subtitle': subtitle,
'caption': activity['state'],
'title_url': activity['assets']?['small_text_url'],
'subtitle_url': activity['assets']?['large_text_url'],
'small_image': imageSmall,
'large_image': imageLarge,
'meta': activity,
'lease_minutes': kPresenceActivityLease,
};
await apiClient.post('/pass/activities', data: activityData);
setCurrentActivity(appId, activityData);
} catch (e) {
talker.log('Failed to set remote activity status: $e');
}
socket.send({
'cmd': 'SET_ACTIVITY',
'data': data['args']['activity'],
'evt': null,
'nonce': data['nonce'],
});
}
},
'close': (socket) async {
updateStatus('Client disconnected');
final currentId = currentActivityManualId;
try {
await apiClient.delete(
'/pass/activities',
queryParameters: {'manualId': currentId},
);
setCurrentActivity(null, null);
} catch (e) {
talker.log('Failed to unset remote activity status: $e');
}
},
});
}
String? get currentActivityManualId => state.currentActivityManualId;
@@ -408,119 +522,8 @@ class ServerStateNotifier extends StateNotifier<ServerState> {
const kPresenceActivityLease = 5;
// Providers
final rpcServerStateProvider = StateNotifierProvider<
ServerStateNotifier,
ServerState
>((ref) {
final apiClient = ref.watch(apiClientProvider);
final server = ActivityRpcServer({});
final notifier = ServerStateNotifier(apiClient, server);
server.updateHandlers({
'connection': (socket) {
final clientId =
socket is _WsSocketWrapper
? socket.clientId
: (socket as IpcSocketWrapper).clientId;
notifier.updateStatus('Client connected (ID: $clientId)');
socket.send({
'cmd': 'DISPATCH',
'data': {
'v': 1,
'config': {
'cdn_host': 'fake.cdn',
'api_endpoint': '//fake.api',
'environment': 'dev',
},
'user': {
'id': 'fake_user_id',
'username': 'FakeUser',
'discriminator': '0001',
'avatar': null,
'bot': false,
},
},
'evt': 'READY',
'nonce': '12345',
});
},
'message': (socket, dynamic data) async {
if (data['cmd'] == 'SET_ACTIVITY') {
final activity = data['args']['activity'];
final appId = 'rpc:${socket.clientId}';
final currentId = notifier.currentActivityManualId;
if (currentId != null && currentId != appId) {
talker.info(
'Skipped the new SET_ACTIVITY command due to there is one existing...',
);
return;
}
notifier.addActivity('Activity: ${activity['details'] ?? 'Untitled'}');
// https://discord.com/developers/docs/topics/rpc#setactivity-set-activity-argument-structure
final type = switch (activity['type']) {
0 => 1, // Discord Playing -> Playing
2 => 2, // Discord Music -> Listening
3 => 2, // Discord Watching -> Listening
_ => 1, // Discord Competing (or null) -> Playing
};
final title = activity['name'] ?? activity['assets']?['small_text'];
final subtitle =
activity['details'] ?? activity['assets']?['large_text'];
var imageSmall = activity['assets']?['small_image'];
var imageLarge = activity['assets']?['large_image'];
if (imageSmall != null && !imageSmall!.contains(':')) {
imageSmall = 'discord:$imageSmall';
}
if (imageLarge != null && !imageLarge!.contains(':')) {
imageLarge = 'discord:$imageLarge';
}
try {
final apiClient = ref.watch(apiClientProvider);
final activityData = {
'type': type,
'manual_id': appId,
'title': title,
'subtitle': subtitle,
'caption': activity['state'],
'title_url': activity['assets']?['small_text_url'],
'subtitle_url': activity['assets']?['large_text_url'],
'small_image': imageSmall,
'large_image': imageLarge,
'meta': activity,
'lease_minutes': kPresenceActivityLease,
};
await apiClient.post('/pass/activities', data: activityData);
notifier.setCurrentActivity(appId, activityData);
} catch (e) {
talker.log('Failed to set remote activity status: $e');
}
socket.send({
'cmd': 'SET_ACTIVITY',
'data': data['args']['activity'],
'evt': null,
'nonce': data['nonce'],
});
}
},
'close': (socket) async {
notifier.updateStatus('Client disconnected');
final currentId = notifier.currentActivityManualId;
try {
final apiClient = ref.watch(apiClientProvider);
await apiClient.delete(
'/pass/activities',
queryParameters: {'manualId': currentId},
);
notifier.setCurrentActivity(null, null);
} catch (e) {
talker.log('Failed to unset remote activity status: $e');
}
},
});
return notifier;
});
final rpcServerStateProvider =
NotifierProvider<ServerStateNotifier, ServerState>(ServerStateNotifier.new);
final rpcServerProvider = Provider<ActivityRpcServer>((ref) {
final notifier = ref.watch(rpcServerStateProvider.notifier);

View File

@@ -6,152 +6,83 @@ part of 'activity_rpc.dart';
// RiverpodGenerator
// **************************************************************************
String _$presenceActivitiesHash() =>
r'3bfaa638eeb961ecd62a32d6a7760a6a7e7bf6f2';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [presenceActivities].
@ProviderFor(presenceActivities)
const presenceActivitiesProvider = PresenceActivitiesFamily();
const presenceActivitiesProvider = PresenceActivitiesFamily._();
/// See also [presenceActivities].
class PresenceActivitiesFamily
extends Family<AsyncValue<List<SnPresenceActivity>>> {
/// See also [presenceActivities].
const PresenceActivitiesFamily();
/// See also [presenceActivities].
PresenceActivitiesProvider call(String uname) {
return PresenceActivitiesProvider(uname);
}
@override
PresenceActivitiesProvider getProviderOverride(
covariant PresenceActivitiesProvider provider,
) {
return call(provider.uname);
}
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'presenceActivitiesProvider';
}
/// See also [presenceActivities].
class PresenceActivitiesProvider
extends AutoDisposeFutureProvider<List<SnPresenceActivity>> {
/// See also [presenceActivities].
PresenceActivitiesProvider(String uname)
: this._internal(
(ref) => presenceActivities(ref as PresenceActivitiesRef, uname),
from: presenceActivitiesProvider,
final class PresenceActivitiesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnPresenceActivity>>,
List<SnPresenceActivity>,
FutureOr<List<SnPresenceActivity>>
>
with
$FutureModifier<List<SnPresenceActivity>>,
$FutureProvider<List<SnPresenceActivity>> {
const PresenceActivitiesProvider._({
required PresenceActivitiesFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'presenceActivitiesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$presenceActivitiesHash,
dependencies: PresenceActivitiesFamily._dependencies,
allTransitiveDependencies:
PresenceActivitiesFamily._allTransitiveDependencies,
uname: uname,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PresenceActivitiesProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String uname;
@override
Override overrideWith(
FutureOr<List<SnPresenceActivity>> Function(PresenceActivitiesRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: PresenceActivitiesProvider._internal(
(ref) => create(ref as PresenceActivitiesRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$presenceActivitiesHash();
@override
String toString() {
return r'presenceActivitiesProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnPresenceActivity>> createElement() {
return _PresenceActivitiesProviderElement(this);
$FutureProviderElement<List<SnPresenceActivity>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnPresenceActivity>> create(Ref ref) {
final argument = this.argument as String;
return presenceActivities(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PresenceActivitiesProvider && other.uname == uname;
return other is PresenceActivitiesProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PresenceActivitiesRef
on AutoDisposeFutureProviderRef<List<SnPresenceActivity>> {
/// The parameter `uname` of this provider.
String get uname;
}
String _$presenceActivitiesHash() =>
r'3bfaa638eeb961ecd62a32d6a7760a6a7e7bf6f2';
class _PresenceActivitiesProviderElement
extends AutoDisposeFutureProviderElement<List<SnPresenceActivity>>
with PresenceActivitiesRef {
_PresenceActivitiesProviderElement(super.provider);
final class PresenceActivitiesFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<SnPresenceActivity>>, String> {
const PresenceActivitiesFamily._()
: super(
retry: null,
name: r'presenceActivitiesProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PresenceActivitiesProvider call(String uname) =>
PresenceActivitiesProvider._(argument: uname, from: this);
@override
String get uname => (origin as PresenceActivitiesProvider).uname;
String toString() => r'presenceActivitiesProvider';
}
// 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

View File

@@ -6,19 +6,58 @@ part of 'call.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(CallNotifier)
const callProvider = CallNotifierProvider._();
final class CallNotifierProvider
extends $NotifierProvider<CallNotifier, CallState> {
const CallNotifierProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'callProvider',
isAutoDispose: false,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$callNotifierHash();
@$internal
@override
CallNotifier create() => CallNotifier();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(CallState value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<CallState>(value),
);
}
}
String _$callNotifierHash() => r'ef4e3e9c9d411cf9dce1ceb456a3b866b2c87db3';
/// See also [CallNotifier].
@ProviderFor(CallNotifier)
final callNotifierProvider = NotifierProvider<CallNotifier, CallState>.internal(
CallNotifier.new,
name: r'callNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$callNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$CallNotifier = Notifier<CallState>;
// 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
abstract class _$CallNotifier extends $Notifier<CallState> {
CallState build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<CallState, CallState>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<CallState, CallState>,
CallState,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -6,163 +6,97 @@ part of 'chat_online_count.dart';
// RiverpodGenerator
// **************************************************************************
String _$chatOnlineCountNotifierHash() =>
r'19af8fd0e9f62c65e12a68215406776085235fa3';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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));
}
}
abstract class _$ChatOnlineCountNotifier
extends BuildlessAutoDisposeAsyncNotifier<int> {
late final String chatroomId;
FutureOr<int> build(String chatroomId);
}
/// See also [ChatOnlineCountNotifier].
@ProviderFor(ChatOnlineCountNotifier)
const chatOnlineCountNotifierProvider = ChatOnlineCountNotifierFamily();
const chatOnlineCountProvider = ChatOnlineCountNotifierFamily._();
/// See also [ChatOnlineCountNotifier].
class ChatOnlineCountNotifierFamily extends Family<AsyncValue<int>> {
/// See also [ChatOnlineCountNotifier].
const ChatOnlineCountNotifierFamily();
/// See also [ChatOnlineCountNotifier].
ChatOnlineCountNotifierProvider call(String chatroomId) {
return ChatOnlineCountNotifierProvider(chatroomId);
}
@override
ChatOnlineCountNotifierProvider getProviderOverride(
covariant ChatOnlineCountNotifierProvider provider,
) {
return call(provider.chatroomId);
}
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'chatOnlineCountNotifierProvider';
}
/// See also [ChatOnlineCountNotifier].
class ChatOnlineCountNotifierProvider
extends AutoDisposeAsyncNotifierProviderImpl<ChatOnlineCountNotifier, int> {
/// See also [ChatOnlineCountNotifier].
ChatOnlineCountNotifierProvider(String chatroomId)
: this._internal(
() => ChatOnlineCountNotifier()..chatroomId = chatroomId,
from: chatOnlineCountNotifierProvider,
name: r'chatOnlineCountNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatOnlineCountNotifierHash,
dependencies: ChatOnlineCountNotifierFamily._dependencies,
allTransitiveDependencies:
ChatOnlineCountNotifierFamily._allTransitiveDependencies,
chatroomId: chatroomId,
);
ChatOnlineCountNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.chatroomId,
}) : super.internal();
final String chatroomId;
@override
FutureOr<int> runNotifierBuild(covariant ChatOnlineCountNotifier notifier) {
return notifier.build(chatroomId);
}
@override
Override overrideWith(ChatOnlineCountNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ChatOnlineCountNotifierProvider._internal(
() => create()..chatroomId = chatroomId,
from: from,
name: null,
final class ChatOnlineCountNotifierProvider
extends $AsyncNotifierProvider<ChatOnlineCountNotifier, int> {
const ChatOnlineCountNotifierProvider._({
required ChatOnlineCountNotifierFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'chatOnlineCountProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
chatroomId: chatroomId,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeAsyncNotifierProviderElement<ChatOnlineCountNotifier, int>
createElement() {
return _ChatOnlineCountNotifierProviderElement(this);
String debugGetCreateSourceHash() => _$chatOnlineCountNotifierHash();
@override
String toString() {
return r'chatOnlineCountProvider'
''
'($argument)';
}
@$internal
@override
ChatOnlineCountNotifier create() => ChatOnlineCountNotifier();
@override
bool operator ==(Object other) {
return other is ChatOnlineCountNotifierProvider &&
other.chatroomId == chatroomId;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, chatroomId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ChatOnlineCountNotifierRef on AutoDisposeAsyncNotifierProviderRef<int> {
/// The parameter `chatroomId` of this provider.
String get chatroomId;
}
String _$chatOnlineCountNotifierHash() =>
r'19af8fd0e9f62c65e12a68215406776085235fa3';
class _ChatOnlineCountNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<ChatOnlineCountNotifier, int>
with ChatOnlineCountNotifierRef {
_ChatOnlineCountNotifierProviderElement(super.provider);
final class ChatOnlineCountNotifierFamily extends $Family
with
$ClassFamilyOverride<
ChatOnlineCountNotifier,
AsyncValue<int>,
int,
FutureOr<int>,
String
> {
const ChatOnlineCountNotifierFamily._()
: super(
retry: null,
name: r'chatOnlineCountProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ChatOnlineCountNotifierProvider call(String chatroomId) =>
ChatOnlineCountNotifierProvider._(argument: chatroomId, from: this);
@override
String get chatroomId =>
(origin as ChatOnlineCountNotifierProvider).chatroomId;
String toString() => r'chatOnlineCountProvider';
}
// 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
abstract class _$ChatOnlineCountNotifier extends $AsyncNotifier<int> {
late final _$args = ref.$arg as String;
String get chatroomId => _$args;
FutureOr<int> build(String chatroomId);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref = this.ref as $Ref<AsyncValue<int>, int>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<int>, int>,
AsyncValue<int>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -11,9 +11,32 @@ import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'chat_room.g.dart';
final isSyncingProvider = StateProvider.autoDispose<bool>((ref) => false);
final chatSyncingProvider = NotifierProvider<ChatSyncingNotifier, bool>(
ChatSyncingNotifier.new,
);
final flashingMessagesProvider = StateProvider<Set<String>>((ref) => {});
class ChatSyncingNotifier extends Notifier<bool> {
@override
bool build() => false;
void set(bool value) => state = value;
}
final flashingMessagesProvider =
NotifierProvider<FlashingMessagesNotifier, Set<String>>(
FlashingMessagesNotifier.new,
);
class FlashingMessagesNotifier extends Notifier<Set<String>> {
@override
Set<String> build() => {};
void update(Set<String> Function(Set<String>) cb) {
state = cb(state);
}
void clear() => state = {};
}
@riverpod
class ChatRoomJoinedNotifier extends _$ChatRoomJoinedNotifier {

View File

@@ -6,350 +6,277 @@ part of 'chat_room.dart';
// RiverpodGenerator
// **************************************************************************
String _$chatroomInvitesHash() => r'5cd6391b09c5517ede19bacce43b45c8d71dd087';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [chatroomInvites].
@ProviderFor(chatroomInvites)
final chatroomInvitesProvider =
AutoDisposeFutureProvider<List<SnChatMember>>.internal(
chatroomInvites,
name: r'chatroomInvitesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatroomInvitesHash,
@ProviderFor(ChatRoomJoinedNotifier)
const chatRoomJoinedProvider = ChatRoomJoinedNotifierProvider._();
final class ChatRoomJoinedNotifierProvider
extends $AsyncNotifierProvider<ChatRoomJoinedNotifier, List<SnChatRoom>> {
const ChatRoomJoinedNotifierProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'chatRoomJoinedProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ChatroomInvitesRef = AutoDisposeFutureProviderRef<List<SnChatMember>>;
@override
String debugGetCreateSourceHash() => _$chatRoomJoinedNotifierHash();
@$internal
@override
ChatRoomJoinedNotifier create() => ChatRoomJoinedNotifier();
}
String _$chatRoomJoinedNotifierHash() =>
r'c8092225ba0d9c08b2b5bca6f800f1877303b4ff';
/// See also [ChatRoomJoinedNotifier].
@ProviderFor(ChatRoomJoinedNotifier)
final chatRoomJoinedNotifierProvider = AutoDisposeAsyncNotifierProvider<
ChatRoomJoinedNotifier,
List<SnChatRoom>
>.internal(
ChatRoomJoinedNotifier.new,
name: r'chatRoomJoinedNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatRoomJoinedNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ChatRoomJoinedNotifier = AutoDisposeAsyncNotifier<List<SnChatRoom>>;
String _$chatRoomNotifierHash() => r'1e6391e2ab4eeb114fa001aaa6b06ab2bd646f38';
/// 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));
abstract class _$ChatRoomJoinedNotifier
extends $AsyncNotifier<List<SnChatRoom>> {
FutureOr<List<SnChatRoom>> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref =
this.ref as $Ref<AsyncValue<List<SnChatRoom>>, List<SnChatRoom>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<List<SnChatRoom>>, List<SnChatRoom>>,
AsyncValue<List<SnChatRoom>>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
abstract class _$ChatRoomNotifier
extends BuildlessAutoDisposeAsyncNotifier<SnChatRoom?> {
late final String? identifier;
FutureOr<SnChatRoom?> build(String? identifier);
}
/// See also [ChatRoomNotifier].
@ProviderFor(ChatRoomNotifier)
const chatRoomNotifierProvider = ChatRoomNotifierFamily();
const chatRoomProvider = ChatRoomNotifierFamily._();
/// See also [ChatRoomNotifier].
class ChatRoomNotifierFamily extends Family<AsyncValue<SnChatRoom?>> {
/// See also [ChatRoomNotifier].
const ChatRoomNotifierFamily();
/// See also [ChatRoomNotifier].
ChatRoomNotifierProvider call(String? identifier) {
return ChatRoomNotifierProvider(identifier);
}
@override
ChatRoomNotifierProvider getProviderOverride(
covariant ChatRoomNotifierProvider provider,
) {
return call(provider.identifier);
}
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'chatRoomNotifierProvider';
}
/// See also [ChatRoomNotifier].
class ChatRoomNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<ChatRoomNotifier, SnChatRoom?> {
/// See also [ChatRoomNotifier].
ChatRoomNotifierProvider(String? identifier)
: this._internal(
() => ChatRoomNotifier()..identifier = identifier,
from: chatRoomNotifierProvider,
name: r'chatRoomNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatRoomNotifierHash,
dependencies: ChatRoomNotifierFamily._dependencies,
allTransitiveDependencies:
ChatRoomNotifierFamily._allTransitiveDependencies,
identifier: identifier,
);
ChatRoomNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.identifier,
}) : super.internal();
final String? identifier;
@override
FutureOr<SnChatRoom?> runNotifierBuild(covariant ChatRoomNotifier notifier) {
return notifier.build(identifier);
}
@override
Override overrideWith(ChatRoomNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ChatRoomNotifierProvider._internal(
() => create()..identifier = identifier,
from: from,
name: null,
final class ChatRoomNotifierProvider
extends $AsyncNotifierProvider<ChatRoomNotifier, SnChatRoom?> {
const ChatRoomNotifierProvider._({
required ChatRoomNotifierFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'chatRoomProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
identifier: identifier,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeAsyncNotifierProviderElement<ChatRoomNotifier, SnChatRoom?>
createElement() {
return _ChatRoomNotifierProviderElement(this);
String debugGetCreateSourceHash() => _$chatRoomNotifierHash();
@override
String toString() {
return r'chatRoomProvider'
''
'($argument)';
}
@$internal
@override
ChatRoomNotifier create() => ChatRoomNotifier();
@override
bool operator ==(Object other) {
return other is ChatRoomNotifierProvider && other.identifier == identifier;
return other is ChatRoomNotifierProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, identifier.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ChatRoomNotifierRef on AutoDisposeAsyncNotifierProviderRef<SnChatRoom?> {
/// The parameter `identifier` of this provider.
String? get identifier;
}
String _$chatRoomNotifierHash() => r'1e6391e2ab4eeb114fa001aaa6b06ab2bd646f38';
class _ChatRoomNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<ChatRoomNotifier, SnChatRoom?>
with ChatRoomNotifierRef {
_ChatRoomNotifierProviderElement(super.provider);
final class ChatRoomNotifierFamily extends $Family
with
$ClassFamilyOverride<
ChatRoomNotifier,
AsyncValue<SnChatRoom?>,
SnChatRoom?,
FutureOr<SnChatRoom?>,
String?
> {
const ChatRoomNotifierFamily._()
: super(
retry: null,
name: r'chatRoomProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ChatRoomNotifierProvider call(String? identifier) =>
ChatRoomNotifierProvider._(argument: identifier, from: this);
@override
String? get identifier => (origin as ChatRoomNotifierProvider).identifier;
String toString() => r'chatRoomProvider';
}
abstract class _$ChatRoomNotifier extends $AsyncNotifier<SnChatRoom?> {
late final _$args = ref.$arg as String?;
String? get identifier => _$args;
FutureOr<SnChatRoom?> build(String? identifier);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref = this.ref as $Ref<AsyncValue<SnChatRoom?>, SnChatRoom?>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<SnChatRoom?>, SnChatRoom?>,
AsyncValue<SnChatRoom?>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
@ProviderFor(ChatRoomIdentityNotifier)
const chatRoomIdentityProvider = ChatRoomIdentityNotifierFamily._();
final class ChatRoomIdentityNotifierProvider
extends $AsyncNotifierProvider<ChatRoomIdentityNotifier, SnChatMember?> {
const ChatRoomIdentityNotifierProvider._({
required ChatRoomIdentityNotifierFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'chatRoomIdentityProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$chatRoomIdentityNotifierHash();
@override
String toString() {
return r'chatRoomIdentityProvider'
''
'($argument)';
}
@$internal
@override
ChatRoomIdentityNotifier create() => ChatRoomIdentityNotifier();
@override
bool operator ==(Object other) {
return other is ChatRoomIdentityNotifierProvider &&
other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$chatRoomIdentityNotifierHash() =>
r'27c17d55366d39be81d7209837e5c01f80a68a24';
final class ChatRoomIdentityNotifierFamily extends $Family
with
$ClassFamilyOverride<
ChatRoomIdentityNotifier,
AsyncValue<SnChatMember?>,
SnChatMember?,
FutureOr<SnChatMember?>,
String?
> {
const ChatRoomIdentityNotifierFamily._()
: super(
retry: null,
name: r'chatRoomIdentityProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ChatRoomIdentityNotifierProvider call(String? identifier) =>
ChatRoomIdentityNotifierProvider._(argument: identifier, from: this);
@override
String toString() => r'chatRoomIdentityProvider';
}
abstract class _$ChatRoomIdentityNotifier
extends BuildlessAutoDisposeAsyncNotifier<SnChatMember?> {
late final String? identifier;
extends $AsyncNotifier<SnChatMember?> {
late final _$args = ref.$arg as String?;
String? get identifier => _$args;
FutureOr<SnChatMember?> build(String? identifier);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref = this.ref as $Ref<AsyncValue<SnChatMember?>, SnChatMember?>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<SnChatMember?>, SnChatMember?>,
AsyncValue<SnChatMember?>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
/// See also [ChatRoomIdentityNotifier].
@ProviderFor(ChatRoomIdentityNotifier)
const chatRoomIdentityNotifierProvider = ChatRoomIdentityNotifierFamily();
@ProviderFor(chatroomInvites)
const chatroomInvitesProvider = ChatroomInvitesProvider._();
/// See also [ChatRoomIdentityNotifier].
class ChatRoomIdentityNotifierFamily extends Family<AsyncValue<SnChatMember?>> {
/// See also [ChatRoomIdentityNotifier].
const ChatRoomIdentityNotifierFamily();
/// See also [ChatRoomIdentityNotifier].
ChatRoomIdentityNotifierProvider call(String? identifier) {
return ChatRoomIdentityNotifierProvider(identifier);
}
@override
ChatRoomIdentityNotifierProvider getProviderOverride(
covariant ChatRoomIdentityNotifierProvider provider,
) {
return call(provider.identifier);
}
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'chatRoomIdentityNotifierProvider';
}
/// See also [ChatRoomIdentityNotifier].
class ChatRoomIdentityNotifierProvider
final class ChatroomInvitesProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
ChatRoomIdentityNotifier,
SnChatMember?
> {
/// See also [ChatRoomIdentityNotifier].
ChatRoomIdentityNotifierProvider(String? identifier)
: this._internal(
() => ChatRoomIdentityNotifier()..identifier = identifier,
from: chatRoomIdentityNotifierProvider,
name: r'chatRoomIdentityNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatRoomIdentityNotifierHash,
dependencies: ChatRoomIdentityNotifierFamily._dependencies,
allTransitiveDependencies:
ChatRoomIdentityNotifierFamily._allTransitiveDependencies,
identifier: identifier,
);
ChatRoomIdentityNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.identifier,
}) : super.internal();
final String? identifier;
@override
FutureOr<SnChatMember?> runNotifierBuild(
covariant ChatRoomIdentityNotifier notifier,
) {
return notifier.build(identifier);
}
@override
Override overrideWith(ChatRoomIdentityNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ChatRoomIdentityNotifierProvider._internal(
() => create()..identifier = identifier,
from: from,
name: null,
$FunctionalProvider<
AsyncValue<List<SnChatMember>>,
List<SnChatMember>,
FutureOr<List<SnChatMember>>
>
with
$FutureModifier<List<SnChatMember>>,
$FutureProvider<List<SnChatMember>> {
const ChatroomInvitesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'chatroomInvitesProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
identifier: identifier,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
ChatRoomIdentityNotifier,
SnChatMember?
>
createElement() {
return _ChatRoomIdentityNotifierProviderElement(this);
}
String debugGetCreateSourceHash() => _$chatroomInvitesHash();
@$internal
@override
$FutureProviderElement<List<SnChatMember>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
bool operator ==(Object other) {
return other is ChatRoomIdentityNotifierProvider &&
other.identifier == identifier;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, identifier.hashCode);
return _SystemHash.finish(hash);
FutureOr<List<SnChatMember>> create(Ref ref) {
return chatroomInvites(ref);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ChatRoomIdentityNotifierRef
on AutoDisposeAsyncNotifierProviderRef<SnChatMember?> {
/// The parameter `identifier` of this provider.
String? get identifier;
}
class _ChatRoomIdentityNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
ChatRoomIdentityNotifier,
SnChatMember?
>
with ChatRoomIdentityNotifierRef {
_ChatRoomIdentityNotifierProviderElement(super.provider);
@override
String? get identifier =>
(origin as ChatRoomIdentityNotifierProvider).identifier;
}
// 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
String _$chatroomInvitesHash() => r'5cd6391b09c5517ede19bacce43b45c8d71dd087';

View File

@@ -12,7 +12,17 @@ import "package:riverpod_annotation/riverpod_annotation.dart";
part 'chat_subscribe.g.dart';
final currentSubscribedChatIdProvider = StateProvider<String?>((ref) => null);
final currentSubscribedChatIdProvider =
NotifierProvider<CurrentSubscribedChatIdNotifier, String?>(
CurrentSubscribedChatIdNotifier.new,
);
class CurrentSubscribedChatIdNotifier extends Notifier<String?> {
@override
String? build() => null;
void set(String? value) => state = value;
}
@riverpod
class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
@@ -29,11 +39,9 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
@override
List<SnChatMember> build(String roomId) {
final ws = ref.watch(websocketProvider);
final chatRoomAsync = ref.watch(ChatRoomNotifierProvider(roomId));
final chatIdentityAsync = ref.watch(
ChatRoomIdentityNotifierProvider(roomId),
);
_messagesNotifier = ref.watch(messagesNotifierProvider(roomId).notifier);
final chatRoomAsync = ref.watch(chatRoomProvider(roomId));
final chatIdentityAsync = ref.watch(chatRoomIdentityProvider(roomId));
_messagesNotifier = ref.watch(messagesProvider(roomId).notifier);
if (chatRoomAsync.isLoading || chatIdentityAsync.isLoading) {
return [];
@@ -59,7 +67,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
);
Future.microtask(
() => ref.read(currentSubscribedChatIdProvider.notifier).state = roomId,
() => ref.read(currentSubscribedChatIdProvider.notifier).set(roomId),
);
// Send initial read receipt
@@ -130,7 +138,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
// Cleanup on dispose
ref.onDispose(() {
ref.read(currentSubscribedChatIdProvider.notifier).state = null;
ref.read(currentSubscribedChatIdProvider.notifier).set(null);
wsState.sendMessage(
jsonEncode(
WebSocketPacket(

View File

@@ -6,171 +6,104 @@ part of 'chat_subscribe.dart';
// RiverpodGenerator
// **************************************************************************
String _$chatSubscribeNotifierHash() =>
r'beec1ddf2e13f6d5af8a08c2c81eff740ae9b986';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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));
}
}
abstract class _$ChatSubscribeNotifier
extends BuildlessAutoDisposeNotifier<List<SnChatMember>> {
late final String roomId;
List<SnChatMember> build(String roomId);
}
/// See also [ChatSubscribeNotifier].
@ProviderFor(ChatSubscribeNotifier)
const chatSubscribeNotifierProvider = ChatSubscribeNotifierFamily();
const chatSubscribeProvider = ChatSubscribeNotifierFamily._();
/// See also [ChatSubscribeNotifier].
class ChatSubscribeNotifierFamily extends Family<List<SnChatMember>> {
/// See also [ChatSubscribeNotifier].
const ChatSubscribeNotifierFamily();
/// See also [ChatSubscribeNotifier].
ChatSubscribeNotifierProvider call(String roomId) {
return ChatSubscribeNotifierProvider(roomId);
}
@override
ChatSubscribeNotifierProvider getProviderOverride(
covariant ChatSubscribeNotifierProvider provider,
) {
return call(provider.roomId);
}
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'chatSubscribeNotifierProvider';
}
/// See also [ChatSubscribeNotifier].
class ChatSubscribeNotifierProvider
extends
AutoDisposeNotifierProviderImpl<
ChatSubscribeNotifier,
List<SnChatMember>
> {
/// See also [ChatSubscribeNotifier].
ChatSubscribeNotifierProvider(String roomId)
: this._internal(
() => ChatSubscribeNotifier()..roomId = roomId,
from: chatSubscribeNotifierProvider,
name: r'chatSubscribeNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatSubscribeNotifierHash,
dependencies: ChatSubscribeNotifierFamily._dependencies,
allTransitiveDependencies:
ChatSubscribeNotifierFamily._allTransitiveDependencies,
roomId: roomId,
);
ChatSubscribeNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.roomId,
}) : super.internal();
final String roomId;
@override
List<SnChatMember> runNotifierBuild(
covariant ChatSubscribeNotifier notifier,
) {
return notifier.build(roomId);
}
@override
Override overrideWith(ChatSubscribeNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ChatSubscribeNotifierProvider._internal(
() => create()..roomId = roomId,
from: from,
name: null,
final class ChatSubscribeNotifierProvider
extends $NotifierProvider<ChatSubscribeNotifier, List<SnChatMember>> {
const ChatSubscribeNotifierProvider._({
required ChatSubscribeNotifierFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'chatSubscribeProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
roomId: roomId,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeNotifierProviderElement<ChatSubscribeNotifier, List<SnChatMember>>
createElement() {
return _ChatSubscribeNotifierProviderElement(this);
String debugGetCreateSourceHash() => _$chatSubscribeNotifierHash();
@override
String toString() {
return r'chatSubscribeProvider'
''
'($argument)';
}
@$internal
@override
ChatSubscribeNotifier create() => ChatSubscribeNotifier();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(List<SnChatMember> value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<List<SnChatMember>>(value),
);
}
@override
bool operator ==(Object other) {
return other is ChatSubscribeNotifierProvider && other.roomId == roomId;
return other is ChatSubscribeNotifierProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, roomId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ChatSubscribeNotifierRef
on AutoDisposeNotifierProviderRef<List<SnChatMember>> {
/// The parameter `roomId` of this provider.
String get roomId;
}
String _$chatSubscribeNotifierHash() =>
r'2b9fae96eb1f96a514a074985e5efa1c13d10aa4';
class _ChatSubscribeNotifierProviderElement
extends
AutoDisposeNotifierProviderElement<
final class ChatSubscribeNotifierFamily extends $Family
with
$ClassFamilyOverride<
ChatSubscribeNotifier,
List<SnChatMember>
>
with ChatSubscribeNotifierRef {
_ChatSubscribeNotifierProviderElement(super.provider);
List<SnChatMember>,
List<SnChatMember>,
List<SnChatMember>,
String
> {
const ChatSubscribeNotifierFamily._()
: super(
retry: null,
name: r'chatSubscribeProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ChatSubscribeNotifierProvider call(String roomId) =>
ChatSubscribeNotifierProvider._(argument: roomId, from: this);
@override
String get roomId => (origin as ChatSubscribeNotifierProvider).roomId;
String toString() => r'chatSubscribeProvider';
}
// 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
abstract class _$ChatSubscribeNotifier extends $Notifier<List<SnChatMember>> {
late final _$args = ref.$arg as String;
String get roomId => _$args;
List<SnChatMember> build(String roomId);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref = this.ref as $Ref<List<SnChatMember>, List<SnChatMember>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<List<SnChatMember>, List<SnChatMember>>,
List<SnChatMember>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -99,7 +99,7 @@ class ChatSummary extends _$ChatSummary {
final unreadToDecrement = summary.unreadCount;
if (unreadToDecrement > 0) {
ref
.read(chatUnreadCountNotifierProvider.notifier)
.read(chatUnreadCountProvider.notifier)
.decrement(unreadToDecrement);
}

View File

@@ -6,40 +6,105 @@ part of 'chat_summary.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(ChatUnreadCountNotifier)
const chatUnreadCountProvider = ChatUnreadCountNotifierProvider._();
final class ChatUnreadCountNotifierProvider
extends $AsyncNotifierProvider<ChatUnreadCountNotifier, int> {
const ChatUnreadCountNotifierProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'chatUnreadCountProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$chatUnreadCountNotifierHash();
@$internal
@override
ChatUnreadCountNotifier create() => ChatUnreadCountNotifier();
}
String _$chatUnreadCountNotifierHash() =>
r'b8d93589dc37f772d4c3a07d9afd81c37026e57d';
/// See also [ChatUnreadCountNotifier].
@ProviderFor(ChatUnreadCountNotifier)
final chatUnreadCountNotifierProvider =
AutoDisposeAsyncNotifierProvider<ChatUnreadCountNotifier, int>.internal(
ChatUnreadCountNotifier.new,
name: r'chatUnreadCountNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatUnreadCountNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
abstract class _$ChatUnreadCountNotifier extends $AsyncNotifier<int> {
FutureOr<int> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<AsyncValue<int>, int>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<int>, int>,
AsyncValue<int>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}
typedef _$ChatUnreadCountNotifier = AutoDisposeAsyncNotifier<int>;
String _$chatSummaryHash() => r'78d927d40cded9d7adbc20bd6f457fdf3c852632';
/// See also [ChatSummary].
@ProviderFor(ChatSummary)
final chatSummaryProvider =
AsyncNotifierProvider<ChatSummary, Map<String, SnChatSummary>>.internal(
ChatSummary.new,
const chatSummaryProvider = ChatSummaryProvider._();
final class ChatSummaryProvider
extends $AsyncNotifierProvider<ChatSummary, Map<String, SnChatSummary>> {
const ChatSummaryProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'chatSummaryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatSummaryHash,
isAutoDispose: false,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
typedef _$ChatSummary = AsyncNotifier<Map<String, SnChatSummary>>;
// 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
@override
String debugGetCreateSourceHash() => _$chatSummaryHash();
@$internal
@override
ChatSummary create() => ChatSummary();
}
String _$chatSummaryHash() => r'dfa5e487586482ebdafef8d711f74db68ee86f84';
abstract class _$ChatSummary
extends $AsyncNotifier<Map<String, SnChatSummary>> {
FutureOr<Map<String, SnChatSummary>> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref =
this.ref
as $Ref<
AsyncValue<Map<String, SnChatSummary>>,
Map<String, SnChatSummary>
>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<
AsyncValue<Map<String, SnChatSummary>>,
Map<String, SnChatSummary>
>,
AsyncValue<Map<String, SnChatSummary>>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -52,10 +52,8 @@ class MessagesNotifier extends _$MessagesNotifier {
FutureOr<List<LocalChatMessage>> build(String roomId) async {
_apiClient = ref.watch(apiClientProvider);
_database = ref.watch(databaseProvider);
final room = await ref.watch(ChatRoomNotifierProvider(roomId).future);
final identity = await ref.watch(
ChatRoomIdentityNotifierProvider(roomId).future,
);
final room = await ref.watch(chatRoomProvider(roomId).future);
final identity = await ref.watch(chatRoomIdentityProvider(roomId).future);
// Initialize fetch account method for corrupted data recovery
_fetchAccount = (String accountId) async {
@@ -321,7 +319,7 @@ class MessagesNotifier extends _$MessagesNotifier {
_allRemoteMessagesFetched = false;
talker.log('Starting message sync');
Future.microtask(() => ref.read(isSyncingProvider.notifier).state = true);
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
try {
final dbMessages = await _database.getMessagesForRoom(
_room.id,
@@ -397,9 +395,7 @@ class MessagesNotifier extends _$MessagesNotifier {
showErrorAlert(err);
} finally {
talker.log('Finished message sync');
Future.microtask(
() => ref.read(isSyncingProvider.notifier).state = false,
);
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(false));
_isSyncing = false;
}
}
@@ -496,7 +492,7 @@ class MessagesNotifier extends _$MessagesNotifier {
if (!_hasMore || state is AsyncLoading) return;
talker.log('Loading more messages');
Future.microtask(() => ref.read(isSyncingProvider.notifier).state = true);
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
try {
final currentMessages = state.value ?? [];
final offset = currentMessages.length;
@@ -519,9 +515,7 @@ class MessagesNotifier extends _$MessagesNotifier {
);
showErrorAlert(err);
} finally {
Future.microtask(
() => ref.read(isSyncingProvider.notifier).state = false,
);
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(false));
}
}

View File

@@ -6,174 +6,101 @@ part of 'messages_notifier.dart';
// RiverpodGenerator
// **************************************************************************
String _$messagesNotifierHash() => r'd76d799494b06fac2adc42d94b7ecd7b8d68c352';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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));
}
}
abstract class _$MessagesNotifier
extends BuildlessAutoDisposeAsyncNotifier<List<LocalChatMessage>> {
late final String roomId;
FutureOr<List<LocalChatMessage>> build(String roomId);
}
/// See also [MessagesNotifier].
@ProviderFor(MessagesNotifier)
const messagesNotifierProvider = MessagesNotifierFamily();
const messagesProvider = MessagesNotifierFamily._();
/// See also [MessagesNotifier].
class MessagesNotifierFamily
extends Family<AsyncValue<List<LocalChatMessage>>> {
/// See also [MessagesNotifier].
const MessagesNotifierFamily();
/// See also [MessagesNotifier].
MessagesNotifierProvider call(String roomId) {
return MessagesNotifierProvider(roomId);
}
@override
MessagesNotifierProvider getProviderOverride(
covariant MessagesNotifierProvider provider,
) {
return call(provider.roomId);
}
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'messagesNotifierProvider';
}
/// See also [MessagesNotifier].
class MessagesNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
MessagesNotifier,
List<LocalChatMessage>
> {
/// See also [MessagesNotifier].
MessagesNotifierProvider(String roomId)
: this._internal(
() => MessagesNotifier()..roomId = roomId,
from: messagesNotifierProvider,
name: r'messagesNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$messagesNotifierHash,
dependencies: MessagesNotifierFamily._dependencies,
allTransitiveDependencies:
MessagesNotifierFamily._allTransitiveDependencies,
roomId: roomId,
);
MessagesNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.roomId,
}) : super.internal();
final String roomId;
@override
FutureOr<List<LocalChatMessage>> runNotifierBuild(
covariant MessagesNotifier notifier,
) {
return notifier.build(roomId);
}
@override
Override overrideWith(MessagesNotifier Function() create) {
return ProviderOverride(
origin: this,
override: MessagesNotifierProvider._internal(
() => create()..roomId = roomId,
from: from,
name: null,
final class MessagesNotifierProvider
extends $AsyncNotifierProvider<MessagesNotifier, List<LocalChatMessage>> {
const MessagesNotifierProvider._({
required MessagesNotifierFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'messagesProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
roomId: roomId,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
MessagesNotifier,
List<LocalChatMessage>
>
createElement() {
return _MessagesNotifierProviderElement(this);
String debugGetCreateSourceHash() => _$messagesNotifierHash();
@override
String toString() {
return r'messagesProvider'
''
'($argument)';
}
@$internal
@override
MessagesNotifier create() => MessagesNotifier();
@override
bool operator ==(Object other) {
return other is MessagesNotifierProvider && other.roomId == roomId;
return other is MessagesNotifierProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, roomId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MessagesNotifierRef
on AutoDisposeAsyncNotifierProviderRef<List<LocalChatMessage>> {
/// The parameter `roomId` of this provider.
String get roomId;
}
String _$messagesNotifierHash() => r'2f3f19cb99357184e82d66e74a31863fcfc48856';
class _MessagesNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
final class MessagesNotifierFamily extends $Family
with
$ClassFamilyOverride<
MessagesNotifier,
List<LocalChatMessage>
>
with MessagesNotifierRef {
_MessagesNotifierProviderElement(super.provider);
AsyncValue<List<LocalChatMessage>>,
List<LocalChatMessage>,
FutureOr<List<LocalChatMessage>>,
String
> {
const MessagesNotifierFamily._()
: super(
retry: null,
name: r'messagesProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
MessagesNotifierProvider call(String roomId) =>
MessagesNotifierProvider._(argument: roomId, from: this);
@override
String get roomId => (origin as MessagesNotifierProvider).roomId;
String toString() => r'messagesProvider';
}
// 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
abstract class _$MessagesNotifier
extends $AsyncNotifier<List<LocalChatMessage>> {
late final _$args = ref.$arg as String;
String get roomId => _$args;
FutureOr<List<LocalChatMessage>> build(String roomId);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref =
this.ref
as $Ref<AsyncValue<List<LocalChatMessage>>, List<LocalChatMessage>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<
AsyncValue<List<LocalChatMessage>>,
List<LocalChatMessage>
>,
AsyncValue<List<LocalChatMessage>>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -294,12 +294,15 @@ class AppSettingsNotifier extends _$AppSettingsNotifier {
}
final updateInfoProvider =
StateNotifierProvider<UpdateInfoNotifier, (String?, String?)>((ref) {
return UpdateInfoNotifier();
});
NotifierProvider<UpdateInfoNotifier, (String?, String?)>(
UpdateInfoNotifier.new,
);
class UpdateInfoNotifier extends StateNotifier<(String?, String?)> {
UpdateInfoNotifier() : super((null, null));
class UpdateInfoNotifier extends Notifier<(String?, String?)> {
@override
(String?, String?) build() {
return (null, null);
}
void setUpdate(String newVersion, String newChangelog) {
state = (newVersion, newChangelog);

View File

@@ -29,23 +29,59 @@ Map<String, dynamic> _$ThemeColorsToJson(_ThemeColors instance) =>
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(AppSettingsNotifier)
const appSettingsProvider = AppSettingsNotifierProvider._();
final class AppSettingsNotifierProvider
extends $NotifierProvider<AppSettingsNotifier, AppSettings> {
const AppSettingsNotifierProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'appSettingsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$appSettingsNotifierHash();
@$internal
@override
AppSettingsNotifier create() => AppSettingsNotifier();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(AppSettings value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<AppSettings>(value),
);
}
}
String _$appSettingsNotifierHash() =>
r'22b695f2023e3251db3296858acd701f7211d757';
/// See also [AppSettingsNotifier].
@ProviderFor(AppSettingsNotifier)
final appSettingsNotifierProvider =
AutoDisposeNotifierProvider<AppSettingsNotifier, AppSettings>.internal(
AppSettingsNotifier.new,
name: r'appSettingsNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$appSettingsNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$AppSettingsNotifier = AutoDisposeNotifier<AppSettings>;
// 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
abstract class _$AppSettingsNotifier extends $Notifier<AppSettings> {
AppSettings build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<AppSettings, AppSettings>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AppSettings, AppSettings>,
AppSettings,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -1,4 +1,3 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/activity.dart';
import 'package:island/pods/network.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

View File

@@ -6,169 +6,99 @@ part of 'event_calendar.dart';
// RiverpodGenerator
// **************************************************************************
String _$eventCalendarHash() => r'3a33581c28bcd44bc5eb3abdb770171b4d275a5d';
/// 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));
}
}
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
@ProviderFor(eventCalendar)
const eventCalendarProvider = EventCalendarFamily();
const eventCalendarProvider = EventCalendarFamily._();
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
class EventCalendarFamily
extends Family<AsyncValue<List<SnEventCalendarEntry>>> {
final class EventCalendarProvider
extends
$FunctionalProvider<
AsyncValue<List<SnEventCalendarEntry>>,
List<SnEventCalendarEntry>,
FutureOr<List<SnEventCalendarEntry>>
>
with
$FutureModifier<List<SnEventCalendarEntry>>,
$FutureProvider<List<SnEventCalendarEntry>> {
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
const EventCalendarFamily();
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
EventCalendarProvider call(EventCalendarQuery query) {
return EventCalendarProvider(query);
}
@override
EventCalendarProvider getProviderOverride(
covariant EventCalendarProvider provider,
) {
return call(provider.query);
}
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'eventCalendarProvider';
}
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
class EventCalendarProvider
extends AutoDisposeFutureProvider<List<SnEventCalendarEntry>> {
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
///
/// Copied from [eventCalendar].
EventCalendarProvider(EventCalendarQuery query)
: this._internal(
(ref) => eventCalendar(ref as EventCalendarRef, query),
from: eventCalendarProvider,
const EventCalendarProvider._({
required EventCalendarFamily super.from,
required EventCalendarQuery super.argument,
}) : super(
retry: null,
name: r'eventCalendarProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$eventCalendarHash,
dependencies: EventCalendarFamily._dependencies,
allTransitiveDependencies:
EventCalendarFamily._allTransitiveDependencies,
query: query,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
EventCalendarProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.query,
}) : super.internal();
final EventCalendarQuery query;
@override
Override overrideWith(
FutureOr<List<SnEventCalendarEntry>> Function(EventCalendarRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: EventCalendarProvider._internal(
(ref) => create(ref as EventCalendarRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
query: query,
),
);
String debugGetCreateSourceHash() => _$eventCalendarHash();
@override
String toString() {
return r'eventCalendarProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnEventCalendarEntry>> createElement() {
return _EventCalendarProviderElement(this);
$FutureProviderElement<List<SnEventCalendarEntry>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnEventCalendarEntry>> create(Ref ref) {
final argument = this.argument as EventCalendarQuery;
return eventCalendar(ref, argument);
}
@override
bool operator ==(Object other) {
return other is EventCalendarProvider && other.query == query;
return other is EventCalendarProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, query.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin EventCalendarRef
on AutoDisposeFutureProviderRef<List<SnEventCalendarEntry>> {
/// The parameter `query` of this provider.
EventCalendarQuery get query;
}
String _$eventCalendarHash() => r'3a33581c28bcd44bc5eb3abdb770171b4d275a5d';
class _EventCalendarProviderElement
extends AutoDisposeFutureProviderElement<List<SnEventCalendarEntry>>
with EventCalendarRef {
_EventCalendarProviderElement(super.provider);
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
final class EventCalendarFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnEventCalendarEntry>>,
EventCalendarQuery
> {
const EventCalendarFamily._()
: super(
retry: null,
name: r'eventCalendarProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// Provider for fetching event calendar data
/// This can be used anywhere in the app where calendar data is needed
EventCalendarProvider call(EventCalendarQuery query) =>
EventCalendarProvider._(argument: query, from: this);
@override
EventCalendarQuery get query => (origin as EventCalendarProvider).query;
String toString() => r'eventCalendarProvider';
}
// 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

View File

@@ -14,7 +14,7 @@ Future<Map<String, dynamic>?> billingUsage(Ref ref) async {
return response.data;
}
final indexedCloudFileListNotifierProvider = AsyncNotifierProvider(
final indexedCloudFileListProvider = AsyncNotifierProvider(
IndexedCloudFileListNotifier.new,
);
@@ -92,7 +92,7 @@ class IndexedCloudFileListNotifier extends AsyncNotifier<List<FileListItem>>
}
}
final unindexedFileListNotifierProvider = AsyncNotifierProvider(
final unindexedFileListProvider = AsyncNotifierProvider(
UnindexedFileListNotifier.new,
);

View File

@@ -6,43 +6,87 @@ part of 'file_list.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(billingUsage)
const billingUsageProvider = BillingUsageProvider._();
final class BillingUsageProvider
extends
$FunctionalProvider<
AsyncValue<Map<String, dynamic>?>,
Map<String, dynamic>?,
FutureOr<Map<String, dynamic>?>
>
with
$FutureModifier<Map<String, dynamic>?>,
$FutureProvider<Map<String, dynamic>?> {
const BillingUsageProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'billingUsageProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$billingUsageHash();
@$internal
@override
$FutureProviderElement<Map<String, dynamic>?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<Map<String, dynamic>?> create(Ref ref) {
return billingUsage(ref);
}
}
String _$billingUsageHash() => r'58d8bc774868d60781574c85d6b25869a79c57aa';
/// See also [billingUsage].
@ProviderFor(billingUsage)
final billingUsageProvider =
AutoDisposeFutureProvider<Map<String, dynamic>?>.internal(
billingUsage,
name: r'billingUsageProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$billingUsageHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef BillingUsageRef = AutoDisposeFutureProviderRef<Map<String, dynamic>?>;
String _$billingQuotaHash() => r'4ec5d728e439015800abb2d0d673b5a7329cc654';
/// See also [billingQuota].
@ProviderFor(billingQuota)
final billingQuotaProvider =
AutoDisposeFutureProvider<Map<String, dynamic>?>.internal(
billingQuota,
const billingQuotaProvider = BillingQuotaProvider._();
final class BillingQuotaProvider
extends
$FunctionalProvider<
AsyncValue<Map<String, dynamic>?>,
Map<String, dynamic>?,
FutureOr<Map<String, dynamic>?>
>
with
$FutureModifier<Map<String, dynamic>?>,
$FutureProvider<Map<String, dynamic>?> {
const BillingQuotaProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'billingQuotaProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$billingQuotaHash,
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef BillingQuotaRef = AutoDisposeFutureProviderRef<Map<String, dynamic>?>;
// 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
@override
String debugGetCreateSourceHash() => _$billingQuotaHash();
@$internal
@override
$FutureProviderElement<Map<String, dynamic>?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<Map<String, dynamic>?> create(Ref ref) {
return billingQuota(ref);
}
}
String _$billingQuotaHash() => r'4ec5d728e439015800abb2d0d673b5a7329cc654';

View File

@@ -13,7 +13,7 @@ final poolsProvider = FutureProvider<List<SnFilePool>>((ref) async {
});
String? resolveDefaultPoolId(WidgetRef ref, List<SnFilePool> pools) {
final settings = ref.watch(appSettingsNotifierProvider);
final settings = ref.watch(appSettingsProvider);
final configuredId = settings.defaultPoolId;
if (configuredId != null && pools.any((p) => p.id == configuredId)) {

View File

@@ -1,4 +1,3 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:island/models/reference.dart';
import 'package:island/pods/network.dart';

View File

@@ -6,148 +6,80 @@ part of 'file_references.dart';
// RiverpodGenerator
// **************************************************************************
String _$fileReferencesHash() => r'd66c678c221f61978bdb242b98e6dbe31d0c204b';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [fileReferences].
@ProviderFor(fileReferences)
const fileReferencesProvider = FileReferencesFamily();
const fileReferencesProvider = FileReferencesFamily._();
/// See also [fileReferences].
class FileReferencesFamily extends Family<AsyncValue<List<Reference>>> {
/// See also [fileReferences].
const FileReferencesFamily();
/// See also [fileReferences].
FileReferencesProvider call(String fileId) {
return FileReferencesProvider(fileId);
}
@override
FileReferencesProvider getProviderOverride(
covariant FileReferencesProvider provider,
) {
return call(provider.fileId);
}
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'fileReferencesProvider';
}
/// See also [fileReferences].
class FileReferencesProvider
extends AutoDisposeFutureProvider<List<Reference>> {
/// See also [fileReferences].
FileReferencesProvider(String fileId)
: this._internal(
(ref) => fileReferences(ref as FileReferencesRef, fileId),
from: fileReferencesProvider,
final class FileReferencesProvider
extends
$FunctionalProvider<
AsyncValue<List<Reference>>,
List<Reference>,
FutureOr<List<Reference>>
>
with $FutureModifier<List<Reference>>, $FutureProvider<List<Reference>> {
const FileReferencesProvider._({
required FileReferencesFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'fileReferencesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$fileReferencesHash,
dependencies: FileReferencesFamily._dependencies,
allTransitiveDependencies:
FileReferencesFamily._allTransitiveDependencies,
fileId: fileId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
FileReferencesProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.fileId,
}) : super.internal();
final String fileId;
@override
Override overrideWith(
FutureOr<List<Reference>> Function(FileReferencesRef provider) create,
) {
return ProviderOverride(
origin: this,
override: FileReferencesProvider._internal(
(ref) => create(ref as FileReferencesRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
fileId: fileId,
),
);
String debugGetCreateSourceHash() => _$fileReferencesHash();
@override
String toString() {
return r'fileReferencesProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<Reference>> createElement() {
return _FileReferencesProviderElement(this);
$FutureProviderElement<List<Reference>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<Reference>> create(Ref ref) {
final argument = this.argument as String;
return fileReferences(ref, argument);
}
@override
bool operator ==(Object other) {
return other is FileReferencesProvider && other.fileId == fileId;
return other is FileReferencesProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, fileId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin FileReferencesRef on AutoDisposeFutureProviderRef<List<Reference>> {
/// The parameter `fileId` of this provider.
String get fileId;
}
String _$fileReferencesHash() => r'd66c678c221f61978bdb242b98e6dbe31d0c204b';
class _FileReferencesProviderElement
extends AutoDisposeFutureProviderElement<List<Reference>>
with FileReferencesRef {
_FileReferencesProviderElement(super.provider);
final class FileReferencesFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<Reference>>, String> {
const FileReferencesFamily._()
: super(
retry: null,
name: r'fileReferencesProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
FileReferencesProvider call(String fileId) =>
FileReferencesProvider._(argument: fileId, from: this);
@override
String get fileId => (origin as FileReferencesProvider).fileId;
String toString() => r'fileReferencesProvider';
}
// 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

View File

@@ -6,159 +6,95 @@ part of 'link_preview.dart';
// RiverpodGenerator
// **************************************************************************
String _$linkPreviewHash() => r'5130593d3066155cb958d20714ee577df1f940d7';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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));
}
}
abstract class _$LinkPreview
extends BuildlessAutoDisposeAsyncNotifier<SnScrappedLink?> {
late final String url;
FutureOr<SnScrappedLink?> build(String url);
}
/// See also [LinkPreview].
@ProviderFor(LinkPreview)
const linkPreviewProvider = LinkPreviewFamily();
const linkPreviewProvider = LinkPreviewFamily._();
/// See also [LinkPreview].
class LinkPreviewFamily extends Family<AsyncValue<SnScrappedLink?>> {
/// See also [LinkPreview].
const LinkPreviewFamily();
/// See also [LinkPreview].
LinkPreviewProvider call(String url) {
return LinkPreviewProvider(url);
}
@override
LinkPreviewProvider getProviderOverride(
covariant LinkPreviewProvider provider,
) {
return call(provider.url);
}
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'linkPreviewProvider';
}
/// See also [LinkPreview].
class LinkPreviewProvider
extends AutoDisposeAsyncNotifierProviderImpl<LinkPreview, SnScrappedLink?> {
/// See also [LinkPreview].
LinkPreviewProvider(String url)
: this._internal(
() => LinkPreview()..url = url,
from: linkPreviewProvider,
final class LinkPreviewProvider
extends $AsyncNotifierProvider<LinkPreview, SnScrappedLink?> {
const LinkPreviewProvider._({
required LinkPreviewFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'linkPreviewProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$linkPreviewHash,
dependencies: LinkPreviewFamily._dependencies,
allTransitiveDependencies: LinkPreviewFamily._allTransitiveDependencies,
url: url,
);
LinkPreviewProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.url,
}) : super.internal();
final String url;
@override
FutureOr<SnScrappedLink?> runNotifierBuild(covariant LinkPreview notifier) {
return notifier.build(url);
}
@override
Override overrideWith(LinkPreview Function() create) {
return ProviderOverride(
origin: this,
override: LinkPreviewProvider._internal(
() => create()..url = url,
from: from,
name: null,
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
url: url,
),
$allTransitiveDependencies: null,
);
}
@override
AutoDisposeAsyncNotifierProviderElement<LinkPreview, SnScrappedLink?>
createElement() {
return _LinkPreviewProviderElement(this);
String debugGetCreateSourceHash() => _$linkPreviewHash();
@override
String toString() {
return r'linkPreviewProvider'
''
'($argument)';
}
@$internal
@override
LinkPreview create() => LinkPreview();
@override
bool operator ==(Object other) {
return other is LinkPreviewProvider && other.url == url;
return other is LinkPreviewProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, url.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin LinkPreviewRef on AutoDisposeAsyncNotifierProviderRef<SnScrappedLink?> {
/// The parameter `url` of this provider.
String get url;
}
String _$linkPreviewHash() => r'5130593d3066155cb958d20714ee577df1f940d7';
class _LinkPreviewProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<LinkPreview, SnScrappedLink?>
with LinkPreviewRef {
_LinkPreviewProviderElement(super.provider);
final class LinkPreviewFamily extends $Family
with
$ClassFamilyOverride<
LinkPreview,
AsyncValue<SnScrappedLink?>,
SnScrappedLink?,
FutureOr<SnScrappedLink?>,
String
> {
const LinkPreviewFamily._()
: super(
retry: null,
name: r'linkPreviewProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
LinkPreviewProvider call(String url) =>
LinkPreviewProvider._(argument: url, from: this);
@override
String get url => (origin as LinkPreviewProvider).url;
String toString() => r'linkPreviewProvider';
}
// 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
abstract class _$LinkPreview extends $AsyncNotifier<SnScrappedLink?> {
late final _$args = ref.$arg as String;
String get url => _$args;
FutureOr<SnScrappedLink?> build(String url);
@$mustCallSuper
@override
void runBuild() {
final created = build(_$args);
final ref = this.ref as $Ref<AsyncValue<SnScrappedLink?>, SnScrappedLink?>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<SnScrappedLink?>, SnScrappedLink?>,
AsyncValue<SnScrappedLink?>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -27,7 +27,7 @@ mixin AsyncPaginationController<T> on AsyncNotifier<List<T>>
int? totalCount;
@override
int fetchedCount = 0;
int get fetchedCount => state.value?.length ?? 0;
@override
bool get fetchedAll => totalCount != null && fetchedCount >= totalCount!;
@@ -38,14 +38,12 @@ mixin AsyncPaginationController<T> on AsyncNotifier<List<T>>
@override
Future<void> refresh() async {
totalCount = null;
fetchedCount = 0;
state = AsyncData<List<T>>([]);
final newState = await AsyncValue.guard<List<T>>(() async {
return await fetch();
});
state = newState;
fetchedCount = newState.value?.length ?? 0;
}
@override
@@ -56,11 +54,10 @@ mixin AsyncPaginationController<T> on AsyncNotifier<List<T>>
final newState = await AsyncValue.guard<List<T>>(() async {
final elements = await fetch();
return [...?state.valueOrNull, ...elements];
return [...?state.value, ...elements];
});
state = newState;
fetchedCount = newState.value?.length ?? 0;
}
}
@@ -71,10 +68,8 @@ mixin AsyncPaginationFilter<F, T> on AsyncPaginationController<T>
if (currentFilter == filter) return;
// Reset the data
totalCount = null;
fetchedCount = 0;
currentFilter = filter;
state = AsyncData<List<T>>([]);
currentFilter = filter;
final newState = await AsyncValue.guard<List<T>>(() async {
return await fetch();

View File

@@ -55,16 +55,12 @@ Future<String> siteFileContentRaw(
return resp.data is String ? resp.data : resp.data['content'] as String;
}
class SiteFilesNotifier
extends
AutoDisposeFamilyAsyncNotifier<
List<SnSiteFileEntry>,
({String siteId, String? path})
> {
class SiteFilesNotifier extends AsyncNotifier<List<SnSiteFileEntry>> {
final ({String siteId, String? path}) arg;
SiteFilesNotifier(this.arg);
@override
Future<List<SnSiteFileEntry>> build(
({String siteId, String? path}) arg,
) async {
Future<List<SnSiteFileEntry>> build() async {
return fetchFiles();
}
@@ -152,8 +148,6 @@ class SiteFilesNotifier
}
}
final siteFilesNotifierProvider = AsyncNotifierProvider.autoDispose.family<
SiteFilesNotifier,
List<SnSiteFileEntry>,
({String siteId, String? path})
>(SiteFilesNotifier.new);
final siteFilesNotifierProvider = AsyncNotifierProvider.autoDispose.family(
SiteFilesNotifier.new,
);

View File

@@ -6,446 +6,257 @@ part of 'site_files.dart';
// RiverpodGenerator
// **************************************************************************
String _$siteFilesHash() => r'd4029e6c160edcd454eb39ef1c19427b7f95a8d8';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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();
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,
final class SiteFilesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnSiteFileEntry>>,
List<SnSiteFileEntry>,
FutureOr<List<SnSiteFileEntry>>
>
with
$FutureModifier<List<SnSiteFileEntry>>,
$FutureProvider<List<SnSiteFileEntry>> {
const SiteFilesProvider._({
required SiteFilesFamily super.from,
required ({String siteId, String? path}) super.argument,
}) : super(
retry: null,
name: r'siteFilesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$siteFilesHash,
dependencies: SiteFilesFamily._dependencies,
allTransitiveDependencies: SiteFilesFamily._allTransitiveDependencies,
siteId: siteId,
path: path,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
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,
),
);
String debugGetCreateSourceHash() => _$siteFilesHash();
@override
String toString() {
return r'siteFilesProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnSiteFileEntry>> createElement() {
return _SiteFilesProviderElement(this);
$FutureProviderElement<List<SnSiteFileEntry>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnSiteFileEntry>> create(Ref ref) {
final argument = this.argument as ({String siteId, String? path});
return siteFiles(ref, siteId: argument.siteId, path: argument.path);
}
@override
bool operator ==(Object other) {
return other is SiteFilesProvider &&
other.siteId == siteId &&
other.path == path;
return other is SiteFilesProvider && other.argument == argument;
}
@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);
return argument.hashCode;
}
}
@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;
String _$siteFilesHash() => r'd4029e6c160edcd454eb39ef1c19427b7f95a8d8';
/// The parameter `path` of this provider.
String? get path;
final class SiteFilesFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnSiteFileEntry>>,
({String siteId, String? path})
> {
const SiteFilesFamily._()
: super(
retry: null,
name: r'siteFilesProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
SiteFilesProvider call({required String siteId, String? path}) =>
SiteFilesProvider._(argument: (siteId: siteId, path: path), from: this);
@override
String toString() => r'siteFilesProvider';
}
class _SiteFilesProviderElement
extends AutoDisposeFutureProviderElement<List<SnSiteFileEntry>>
with SiteFilesRef {
_SiteFilesProviderElement(super.provider);
@ProviderFor(siteFileContent)
const siteFileContentProvider = SiteFileContentFamily._();
final class SiteFileContentProvider
extends
$FunctionalProvider<
AsyncValue<SnFileContent>,
SnFileContent,
FutureOr<SnFileContent>
>
with $FutureModifier<SnFileContent>, $FutureProvider<SnFileContent> {
const SiteFileContentProvider._({
required SiteFileContentFamily super.from,
required ({String siteId, String relativePath}) super.argument,
}) : super(
retry: null,
name: r'siteFileContentProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String get siteId => (origin as SiteFilesProvider).siteId;
String debugGetCreateSourceHash() => _$siteFileContentHash();
@override
String? get path => (origin as SiteFilesProvider).path;
String toString() {
return r'siteFileContentProvider'
''
'$argument';
}
@$internal
@override
$FutureProviderElement<SnFileContent> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnFileContent> create(Ref ref) {
final argument = this.argument as ({String siteId, String relativePath});
return siteFileContent(
ref,
siteId: argument.siteId,
relativePath: argument.relativePath,
);
}
@override
bool operator ==(Object other) {
return other is SiteFileContentProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$siteFileContentHash() => r'b594ad4f8c54555e742ece94ee001092cb2f83d1';
/// See also [siteFileContent].
@ProviderFor(siteFileContent)
const siteFileContentProvider = SiteFileContentFamily();
final class SiteFileContentFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<SnFileContent>,
({String siteId, String relativePath})
> {
const SiteFileContentFamily._()
: super(
retry: null,
name: r'siteFileContentProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// 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);
}
}) => SiteFileContentProvider._(
argument: (siteId: siteId, relativePath: relativePath),
from: this,
);
@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';
String toString() => 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,
@ProviderFor(siteFileContentRaw)
const siteFileContentRawProvider = SiteFileContentRawFamily._();
final class SiteFileContentRawProvider
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
with $FutureModifier<String>, $FutureProvider<String> {
const SiteFileContentRawProvider._({
required SiteFileContentRawFamily super.from,
required ({String siteId, String relativePath}) super.argument,
}) : super(
retry: null,
name: r'siteFileContentRawProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
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,
),
);
String debugGetCreateSourceHash() => _$siteFileContentRawHash();
@override
String toString() {
return r'siteFileContentRawProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnFileContent> createElement() {
return _SiteFileContentProviderElement(this);
$FutureProviderElement<String> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<String> create(Ref ref) {
final argument = this.argument as ({String siteId, String relativePath});
return siteFileContentRaw(
ref,
siteId: argument.siteId,
relativePath: argument.relativePath,
);
}
@override
bool operator ==(Object other) {
return other is SiteFileContentProvider &&
other.siteId == siteId &&
other.relativePath == relativePath;
return other is SiteFileContentRawProvider && other.argument == argument;
}
@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);
return argument.hashCode;
}
}
@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;
}
String _$siteFileContentRawHash() =>
r'd0331c30698a9f4b90fe9b79273ff5914fa46616';
/// See also [siteFileContentRaw].
@ProviderFor(siteFileContentRaw)
const siteFileContentRawProvider = SiteFileContentRawFamily();
final class SiteFileContentRawFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<String>,
({String siteId, String relativePath})
> {
const SiteFileContentRawFamily._()
: super(
retry: null,
name: r'siteFileContentRawProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// See also [siteFileContentRaw].
class SiteFileContentRawFamily extends Family<AsyncValue<String>> {
/// See also [siteFileContentRaw].
const SiteFileContentRawFamily();
/// See also [siteFileContentRaw].
SiteFileContentRawProvider call({
required String siteId,
required String relativePath,
}) {
return SiteFileContentRawProvider(
siteId: siteId,
relativePath: relativePath,
);
}
@override
SiteFileContentRawProvider getProviderOverride(
covariant SiteFileContentRawProvider 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'siteFileContentRawProvider';
}
/// See also [siteFileContentRaw].
class SiteFileContentRawProvider extends AutoDisposeFutureProvider<String> {
/// See also [siteFileContentRaw].
SiteFileContentRawProvider({
required String siteId,
required String relativePath,
}) : this._internal(
(ref) => siteFileContentRaw(
ref as SiteFileContentRawRef,
siteId: siteId,
relativePath: relativePath,
),
from: siteFileContentRawProvider,
name: r'siteFileContentRawProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$siteFileContentRawHash,
dependencies: SiteFileContentRawFamily._dependencies,
allTransitiveDependencies:
SiteFileContentRawFamily._allTransitiveDependencies,
siteId: siteId,
relativePath: relativePath,
}) => SiteFileContentRawProvider._(
argument: (siteId: siteId, relativePath: relativePath),
from: this,
);
SiteFileContentRawProvider._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<String> Function(SiteFileContentRawRef provider) create,
) {
return ProviderOverride(
origin: this,
override: SiteFileContentRawProvider._internal(
(ref) => create(ref as SiteFileContentRawRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
siteId: siteId,
relativePath: relativePath,
),
);
}
@override
AutoDisposeFutureProviderElement<String> createElement() {
return _SiteFileContentRawProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is SiteFileContentRawProvider &&
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);
}
String toString() => r'siteFileContentRawProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin SiteFileContentRawRef on AutoDisposeFutureProviderRef<String> {
/// The parameter `siteId` of this provider.
String get siteId;
/// The parameter `relativePath` of this provider.
String get relativePath;
}
class _SiteFileContentRawProviderElement
extends AutoDisposeFutureProviderElement<String>
with SiteFileContentRawRef {
_SiteFileContentRawProviderElement(super.provider);
@override
String get siteId => (origin as SiteFileContentRawProvider).siteId;
@override
String get relativePath =>
(origin as SiteFileContentRawProvider).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

View File

@@ -25,16 +25,12 @@ Future<SnPublicationPage> sitePage(Ref ref, String pageId) async {
return SnPublicationPage.fromJson(resp.data);
}
class SitePagesNotifier
extends
AutoDisposeFamilyAsyncNotifier<
List<SnPublicationPage>,
({String pubName, String siteSlug})
> {
class SitePagesNotifier extends AsyncNotifier<List<SnPublicationPage>> {
final ({String pubName, String siteSlug}) arg;
SitePagesNotifier(this.arg);
@override
Future<List<SnPublicationPage>> build(
({String pubName, String siteSlug}) arg,
) async {
Future<List<SnPublicationPage>> build() async {
return fetchPages();
}

View File

@@ -6,275 +6,163 @@ part of 'site_pages.dart';
// RiverpodGenerator
// **************************************************************************
String _$sitePagesHash() => r'5e084e9694ad665e9b238c6a747c6c6e99c5eb03';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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();
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,
final class SitePagesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnPublicationPage>>,
List<SnPublicationPage>,
FutureOr<List<SnPublicationPage>>
>
with
$FutureModifier<List<SnPublicationPage>>,
$FutureProvider<List<SnPublicationPage>> {
const SitePagesProvider._({
required SitePagesFamily super.from,
required (String, String) super.argument,
}) : super(
retry: null,
name: r'sitePagesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$sitePagesHash,
dependencies: SitePagesFamily._dependencies,
allTransitiveDependencies: SitePagesFamily._allTransitiveDependencies,
pubName: pubName,
siteSlug: siteSlug,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
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,
),
);
String debugGetCreateSourceHash() => _$sitePagesHash();
@override
String toString() {
return r'sitePagesProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnPublicationPage>> createElement() {
return _SitePagesProviderElement(this);
$FutureProviderElement<List<SnPublicationPage>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnPublicationPage>> create(Ref ref) {
final argument = this.argument as (String, String);
return sitePages(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is SitePagesProvider &&
other.pubName == pubName &&
other.siteSlug == siteSlug;
return other is SitePagesProvider && other.argument == argument;
}
@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);
return argument.hashCode;
}
}
@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;
String _$sitePagesHash() => r'5e084e9694ad665e9b238c6a747c6c6e99c5eb03';
/// The parameter `siteSlug` of this provider.
String get siteSlug;
final class SitePagesFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnPublicationPage>>,
(String, String)
> {
const SitePagesFamily._()
: super(
retry: null,
name: r'sitePagesProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
SitePagesProvider call(String pubName, String siteSlug) =>
SitePagesProvider._(argument: (pubName, siteSlug), from: this);
@override
String toString() => r'sitePagesProvider';
}
class _SitePagesProviderElement
extends AutoDisposeFutureProviderElement<List<SnPublicationPage>>
with SitePagesRef {
_SitePagesProviderElement(super.provider);
@ProviderFor(sitePage)
const sitePageProvider = SitePageFamily._();
final class SitePageProvider
extends
$FunctionalProvider<
AsyncValue<SnPublicationPage>,
SnPublicationPage,
FutureOr<SnPublicationPage>
>
with
$FutureModifier<SnPublicationPage>,
$FutureProvider<SnPublicationPage> {
const SitePageProvider._({
required SitePageFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'sitePageProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String get pubName => (origin as SitePagesProvider).pubName;
String debugGetCreateSourceHash() => _$sitePageHash();
@override
String get siteSlug => (origin as SitePagesProvider).siteSlug;
String toString() {
return r'sitePageProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnPublicationPage> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublicationPage> create(Ref ref) {
final argument = this.argument as String;
return sitePage(ref, argument);
}
@override
bool operator ==(Object other) {
return other is SitePageProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
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,
final class SitePageFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPublicationPage>, String> {
const SitePageFamily._()
: super(
retry: null,
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,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
SitePageProvider call(String pageId) =>
SitePageProvider._(argument: pageId, from: this);
@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);
}
String toString() => r'sitePageProvider';
}
@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

View File

@@ -4,16 +4,12 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:island/models/publication_site.dart';
import 'package:island/pods/network.dart';
class SiteNotifier
extends
AutoDisposeFamilyAsyncNotifier<
SnPublicationSite,
({String pubName, String? siteId})
> {
class SiteNotifier extends AsyncNotifier<SnPublicationSite> {
final ({String pubName, String? siteId}) arg;
SiteNotifier(this.arg);
@override
FutureOr<SnPublicationSite> build(
({String pubName, String? siteId}) arg,
) async {
FutureOr<SnPublicationSite> build() async {
if (arg.siteId == null || arg.siteId!.isEmpty) {
return SnPublicationSite(
id: '',

View File

@@ -1,13 +1,12 @@
import 'package:flutter/material.dart';
import 'package:island/pods/config.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'theme.g.dart';
@riverpod
ThemeSet theme(Ref ref) {
final settings = ref.watch(appSettingsNotifierProvider);
final settings = ref.watch(appSettingsProvider);
return createAppThemeSet(settings);
}

View File

@@ -6,21 +6,46 @@ part of 'theme.dart';
// RiverpodGenerator
// **************************************************************************
String _$themeHash() => r'a12dbf8b83d75713b7ae4c68e9cdd1a1cc3a35f0';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [theme].
@ProviderFor(theme)
final themeProvider = AutoDisposeProvider<ThemeSet>.internal(
theme,
name: r'themeProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$themeHash,
dependencies: null,
allTransitiveDependencies: null,
);
const themeProvider = ThemeProvider._();
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ThemeRef = AutoDisposeProviderRef<ThemeSet>;
// 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
final class ThemeProvider
extends $FunctionalProvider<ThemeSet, ThemeSet, ThemeSet>
with $Provider<ThemeSet> {
const ThemeProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'themeProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$themeHash();
@$internal
@override
$ProviderElement<ThemeSet> $createElement($ProviderPointer pointer) =>
$ProviderElement(pointer);
@override
ThemeSet create(Ref ref) {
return theme(ref);
}
/// {@macro riverpod.override_with_value}
Override overrideWithValue(ThemeSet value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<ThemeSet>(value),
);
}
}
String _$themeHash() => r'5b41b68e2fc59431bb195ff75f63383982f7730f';

View File

@@ -4,7 +4,7 @@ import 'package:island/models/activity.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
final activityListNotifierProvider =
final activityListProvider =
AsyncNotifierProvider<ActivityListNotifier, List<SnTimelineEvent>>(
ActivityListNotifier.new,
);
@@ -22,8 +22,7 @@ class ActivityListNotifier extends AsyncNotifier<List<SnTimelineEvent>>
Future<List<SnTimelineEvent>> fetch() async {
final client = ref.read(apiClientProvider);
final cursor =
state.valueOrNull?.lastOrNull?.createdAt.toUtc().toIso8601String();
final cursor = state.value?.lastOrNull?.createdAt.toUtc().toIso8601String();
final queryParameters = {
if (cursor != null) 'cursor': cursor,
@@ -46,15 +45,13 @@ class ActivityListNotifier extends AsyncNotifier<List<SnTimelineEvent>>
final hasMore = (items.firstOrNull?.type ?? 'empty') != 'empty';
totalCount =
(state.valueOrNull?.length ?? 0) +
items.length +
(hasMore ? pageSize : 0);
(state.value?.length ?? 0) + items.length + (hasMore ? pageSize : 0);
return items;
}
void updateOne(int index, SnTimelineEvent activity) {
final currentState = state.valueOrNull;
final currentState = state.value;
if (currentState == null) return;
final updatedItems = [...currentState];

View File

@@ -1,7 +1,6 @@
import 'dart:convert';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/pods/network.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

View File

@@ -6,269 +6,152 @@ part of 'translate.dart';
// RiverpodGenerator
// **************************************************************************
String _$translateStringHash() => r'51d638cf07cbf3ffa9469298f5bd9c667bc0ccb7';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [translateString].
@ProviderFor(translateString)
const translateStringProvider = TranslateStringFamily();
const translateStringProvider = TranslateStringFamily._();
/// See also [translateString].
class TranslateStringFamily extends Family<AsyncValue<String>> {
/// See also [translateString].
const TranslateStringFamily();
/// See also [translateString].
TranslateStringProvider call(TranslateQuery query) {
return TranslateStringProvider(query);
}
@override
TranslateStringProvider getProviderOverride(
covariant TranslateStringProvider provider,
) {
return call(provider.query);
}
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'translateStringProvider';
}
/// See also [translateString].
class TranslateStringProvider extends AutoDisposeFutureProvider<String> {
/// See also [translateString].
TranslateStringProvider(TranslateQuery query)
: this._internal(
(ref) => translateString(ref as TranslateStringRef, query),
from: translateStringProvider,
final class TranslateStringProvider
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
with $FutureModifier<String>, $FutureProvider<String> {
const TranslateStringProvider._({
required TranslateStringFamily super.from,
required TranslateQuery super.argument,
}) : super(
retry: null,
name: r'translateStringProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$translateStringHash,
dependencies: TranslateStringFamily._dependencies,
allTransitiveDependencies:
TranslateStringFamily._allTransitiveDependencies,
query: query,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
TranslateStringProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.query,
}) : super.internal();
final TranslateQuery query;
@override
Override overrideWith(
FutureOr<String> Function(TranslateStringRef provider) create,
) {
return ProviderOverride(
origin: this,
override: TranslateStringProvider._internal(
(ref) => create(ref as TranslateStringRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
query: query,
),
);
String debugGetCreateSourceHash() => _$translateStringHash();
@override
String toString() {
return r'translateStringProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<String> createElement() {
return _TranslateStringProviderElement(this);
$FutureProviderElement<String> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<String> create(Ref ref) {
final argument = this.argument as TranslateQuery;
return translateString(ref, argument);
}
@override
bool operator ==(Object other) {
return other is TranslateStringProvider && other.query == query;
return other is TranslateStringProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, query.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin TranslateStringRef on AutoDisposeFutureProviderRef<String> {
/// The parameter `query` of this provider.
TranslateQuery get query;
}
String _$translateStringHash() => r'51d638cf07cbf3ffa9469298f5bd9c667bc0ccb7';
class _TranslateStringProviderElement
extends AutoDisposeFutureProviderElement<String>
with TranslateStringRef {
_TranslateStringProviderElement(super.provider);
final class TranslateStringFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<String>, TranslateQuery> {
const TranslateStringFamily._()
: super(
retry: null,
name: r'translateStringProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
TranslateStringProvider call(TranslateQuery query) =>
TranslateStringProvider._(argument: query, from: this);
@override
TranslateQuery get query => (origin as TranslateStringProvider).query;
String toString() => r'translateStringProvider';
}
@ProviderFor(detectStringLanguage)
const detectStringLanguageProvider = DetectStringLanguageFamily._();
final class DetectStringLanguageProvider
extends $FunctionalProvider<String?, String?, String?>
with $Provider<String?> {
const DetectStringLanguageProvider._({
required DetectStringLanguageFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'detectStringLanguageProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$detectStringLanguageHash();
@override
String toString() {
return r'detectStringLanguageProvider'
''
'($argument)';
}
@$internal
@override
$ProviderElement<String?> $createElement($ProviderPointer pointer) =>
$ProviderElement(pointer);
@override
String? create(Ref ref) {
final argument = this.argument as String;
return detectStringLanguage(ref, argument);
}
/// {@macro riverpod.override_with_value}
Override overrideWithValue(String? value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<String?>(value),
);
}
@override
bool operator ==(Object other) {
return other is DetectStringLanguageProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$detectStringLanguageHash() =>
r'24fbf52edbbffcc8dc4f09f7206f82d69728e703';
/// See also [detectStringLanguage].
@ProviderFor(detectStringLanguage)
const detectStringLanguageProvider = DetectStringLanguageFamily();
/// See also [detectStringLanguage].
class DetectStringLanguageFamily extends Family<String?> {
/// See also [detectStringLanguage].
const DetectStringLanguageFamily();
/// See also [detectStringLanguage].
DetectStringLanguageProvider call(String text) {
return DetectStringLanguageProvider(text);
}
@override
DetectStringLanguageProvider getProviderOverride(
covariant DetectStringLanguageProvider provider,
) {
return call(provider.text);
}
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'detectStringLanguageProvider';
}
/// See also [detectStringLanguage].
class DetectStringLanguageProvider extends AutoDisposeProvider<String?> {
/// See also [detectStringLanguage].
DetectStringLanguageProvider(String text)
: this._internal(
(ref) => detectStringLanguage(ref as DetectStringLanguageRef, text),
from: detectStringLanguageProvider,
final class DetectStringLanguageFamily extends $Family
with $FunctionalFamilyOverride<String?, String> {
const DetectStringLanguageFamily._()
: super(
retry: null,
name: r'detectStringLanguageProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$detectStringLanguageHash,
dependencies: DetectStringLanguageFamily._dependencies,
allTransitiveDependencies:
DetectStringLanguageFamily._allTransitiveDependencies,
text: text,
);
DetectStringLanguageProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.text,
}) : super.internal();
final String text;
@override
Override overrideWith(
String? Function(DetectStringLanguageRef provider) create,
) {
return ProviderOverride(
origin: this,
override: DetectStringLanguageProvider._internal(
(ref) => create(ref as DetectStringLanguageRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
text: text,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
DetectStringLanguageProvider call(String text) =>
DetectStringLanguageProvider._(argument: text, from: this);
@override
AutoDisposeProviderElement<String?> createElement() {
return _DetectStringLanguageProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is DetectStringLanguageProvider && other.text == text;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, text.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'detectStringLanguageProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin DetectStringLanguageRef on AutoDisposeProviderRef<String?> {
/// The parameter `text` of this provider.
String get text;
}
class _DetectStringLanguageProviderElement
extends AutoDisposeProviderElement<String?>
with DetectStringLanguageRef {
_DetectStringLanguageProviderElement(super.provider);
@override
String get text => (origin as DetectStringLanguageProvider).text;
}
// 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

View File

@@ -9,18 +9,16 @@ import 'package:island/pods/websocket.dart';
import 'package:island/services/file_uploader.dart';
import 'package:island/talker.dart';
final uploadTasksProvider =
StateNotifierProvider<UploadTasksNotifier, List<DriveTask>>(
(ref) => UploadTasksNotifier(ref),
);
final uploadTasksProvider = NotifierProvider(UploadTasksNotifier.new);
class UploadTasksNotifier extends StateNotifier<List<DriveTask>> {
final Ref ref;
class UploadTasksNotifier extends Notifier<List<DriveTask>> {
StreamSubscription? _websocketSubscription;
final Map<String, Map<String, dynamic>> _pendingUploads = {};
UploadTasksNotifier(this.ref) : super([]) {
@override
List<DriveTask> build() {
_listenToWebSocket();
return [];
}
void _listenToWebSocket() {
@@ -334,10 +332,8 @@ class UploadTasksNotifier extends StateNotifier<List<DriveTask>> {
return taskId;
}
@override
void dispose() {
_websocketSubscription?.cancel();
super.dispose();
}
}

View File

@@ -14,26 +14,27 @@ import 'package:island/pods/config.dart';
import 'package:island/pods/network.dart';
import 'package:island/talker.dart';
class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
final Ref _ref;
UserInfoNotifier(this._ref) : super(const AsyncValue.data(null));
Future<void> fetchUser() async {
final token = _ref.watch(tokenProvider);
class UserInfoNotifier extends AsyncNotifier<SnAccount?> {
@override
Future<SnAccount?> build() async {
final token = ref.watch(tokenProvider);
if (token == null) {
talker.info('[UserInfo] No token found, not going to fetch...');
return;
return null;
}
return _fetchUser();
}
Future<SnAccount?> _fetchUser() async {
try {
final client = _ref.read(apiClientProvider);
final client = ref.read(apiClientProvider);
final response = await client.get('/pass/accounts/me');
final user = SnAccount.fromJson(response.data);
state = AsyncValue.data(user);
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
FirebaseAnalytics.instance.setUserId(id: user.id);
}
return user;
} catch (error, stackTrace) {
if (!kIsWeb) {
if (error is DioException) {
@@ -69,10 +70,10 @@ class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
),
).then((value) {
if (value == true) {
fetchUser();
ref.invalidateSelf();
}
});
}
} else {
showOverlayDialog<bool>(
builder:
(context, close) => AlertDialog(
@@ -96,31 +97,36 @@ class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
),
).then((value) {
if (value == true) {
fetchUser();
ref.invalidateSelf();
}
});
}
}
talker.error(
"[UserInfo] Failed to fetch user info...",
error,
stackTrace,
);
state = AsyncValue.data(null);
return null;
}
}
Future<void> fetchUser() async {
ref.invalidateSelf();
await future;
}
Future<void> logOut() async {
state = const AsyncValue.data(null);
final prefs = _ref.read(sharedPreferencesProvider);
final prefs = ref.read(sharedPreferencesProvider);
await prefs.remove(kTokenPairStoreKey);
_ref.invalidate(tokenProvider);
ref.invalidate(tokenProvider);
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
FirebaseAnalytics.instance.setUserId(id: null);
}
}
}
final userInfoProvider =
StateNotifierProvider<UserInfoNotifier, AsyncValue<SnAccount?>>(
(ref) => UserInfoNotifier(ref),
);
final userInfoProvider = AsyncNotifierProvider<UserInfoNotifier, SnAccount?>(
UserInfoNotifier.new,
);

View File

@@ -22,10 +22,14 @@ class WebAuthServerState {
}
}
class WebAuthServerNotifier extends StateNotifier<WebAuthServerState> {
final WebAuthServer _server;
class WebAuthServerNotifier extends Notifier<WebAuthServerState> {
late final WebAuthServer _server;
WebAuthServerNotifier(this._server) : super(WebAuthServerState());
@override
WebAuthServerState build() {
_server = ref.watch(webAuthServerProvider);
return WebAuthServerState();
}
Future<void> start() async {
try {
@@ -47,7 +51,6 @@ final webAuthServerProvider = Provider<WebAuthServer>((ref) {
});
final webAuthServerStateProvider =
StateNotifierProvider<WebAuthServerNotifier, WebAuthServerState>((ref) {
final server = ref.watch(webAuthServerProvider);
return WebAuthServerNotifier(server);
});
NotifierProvider<WebAuthServerNotifier, WebAuthServerState>(
WebAuthServerNotifier.new,
);

View File

@@ -16,14 +16,12 @@ final webFeedListProvider = FutureProvider.family<List<SnWebFeed>, String>((
.toList();
});
class WebFeedNotifier
extends
AutoDisposeFamilyAsyncNotifier<
SnWebFeed,
({String pubName, String? feedId})
> {
class WebFeedNotifier extends AsyncNotifier<SnWebFeed> {
final ({String pubName, String? feedId}) arg;
WebFeedNotifier(this.arg);
@override
FutureOr<SnWebFeed> build(({String pubName, String? feedId}) arg) async {
FutureOr<SnWebFeed> build() async {
if (arg.feedId == null || arg.feedId!.isEmpty) {
return SnWebFeed(
id: '',

View File

@@ -100,12 +100,16 @@ class WebSocketService {
}
},
onDone: () {
talker.info('[WebSocket] Connection closed, attempting to reconnect...');
talker.info(
'[WebSocket] Connection closed, attempting to reconnect...',
);
_scheduleReconnect();
_statusStreamController.sink.add(WebSocketState.disconnected());
},
onError: (error) {
talker.error('[WebSocket] Error occurred: $error, attempting to reconnect...');
talker.error(
'[WebSocket] Error occurred: $error, attempting to reconnect...',
);
_scheduleReconnect();
_statusStreamController.sink.add(
WebSocketState.error(error.toString()),
@@ -152,15 +156,20 @@ class WebSocketService {
}
final websocketStateProvider =
StateNotifierProvider<WebSocketStateNotifier, WebSocketState>(
(ref) => WebSocketStateNotifier(ref),
NotifierProvider<WebSocketStateNotifier, WebSocketState>(
WebSocketStateNotifier.new,
);
class WebSocketStateNotifier extends StateNotifier<WebSocketState> {
final Ref ref;
class WebSocketStateNotifier extends Notifier<WebSocketState> {
Timer? _reconnectTimer;
WebSocketStateNotifier(this.ref) : super(const WebSocketState.disconnected());
@override
WebSocketState build() {
ref.onDispose(() {
_reconnectTimer?.cancel();
});
return const WebSocketState.disconnected();
}
Future<void> connect() async {
state = const WebSocketState.connecting();
@@ -169,7 +178,7 @@ class WebSocketStateNotifier extends StateNotifier<WebSocketState> {
await service.connect(ref);
state = const WebSocketState.connected();
service.statusStream.listen((event) {
if (mounted) state = event;
state = event;
});
} catch (err) {
state = WebSocketState.error('Failed to connect: $err');

View File

@@ -57,9 +57,7 @@ class AccountScreen extends HookConsumerWidget {
}
final user = ref.watch(userInfoProvider);
final notificationUnreadCount = ref.watch(
notificationUnreadCountNotifierProvider,
);
final notificationUnreadCount = ref.watch(notificationUnreadCountProvider);
if (user.value == null || user.value == null) {
return _UnauthorizedAccountScreen();

View File

@@ -6,23 +6,38 @@ part of 'credits.dart';
// RiverpodGenerator
// **************************************************************************
String _$socialCreditsHash() => r'a0284583e94bc97285c689ac2bc018536932da69';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [socialCredits].
@ProviderFor(socialCredits)
final socialCreditsProvider = AutoDisposeFutureProvider<double>.internal(
socialCredits,
name: r'socialCreditsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$socialCreditsHash,
dependencies: null,
allTransitiveDependencies: null,
);
const socialCreditsProvider = SocialCreditsProvider._();
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef SocialCreditsRef = AutoDisposeFutureProviderRef<double>;
// 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
final class SocialCreditsProvider
extends $FunctionalProvider<AsyncValue<double>, double, FutureOr<double>>
with $FutureModifier<double>, $FutureProvider<double> {
const SocialCreditsProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'socialCreditsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$socialCreditsHash();
@$internal
@override
$FutureProviderElement<double> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<double> create(Ref ref) {
return socialCredits(ref);
}
}
String _$socialCreditsHash() => r'a0284583e94bc97285c689ac2bc018536932da69';

View File

@@ -6,64 +6,129 @@ part of 'account_settings.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(authFactors)
const authFactorsProvider = AuthFactorsProvider._();
final class AuthFactorsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnAuthFactor>>,
List<SnAuthFactor>,
FutureOr<List<SnAuthFactor>>
>
with
$FutureModifier<List<SnAuthFactor>>,
$FutureProvider<List<SnAuthFactor>> {
const AuthFactorsProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'authFactorsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$authFactorsHash();
@$internal
@override
$FutureProviderElement<List<SnAuthFactor>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnAuthFactor>> create(Ref ref) {
return authFactors(ref);
}
}
String _$authFactorsHash() => r'ed87d7dbd421fef0a5620416727c3dc598c97ef5';
/// See also [authFactors].
@ProviderFor(authFactors)
final authFactorsProvider =
AutoDisposeFutureProvider<List<SnAuthFactor>>.internal(
authFactors,
name: r'authFactorsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$authFactorsHash,
@ProviderFor(contactMethods)
const contactMethodsProvider = ContactMethodsProvider._();
final class ContactMethodsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnContactMethod>>,
List<SnContactMethod>,
FutureOr<List<SnContactMethod>>
>
with
$FutureModifier<List<SnContactMethod>>,
$FutureProvider<List<SnContactMethod>> {
const ContactMethodsProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'contactMethodsProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef AuthFactorsRef = AutoDisposeFutureProviderRef<List<SnAuthFactor>>;
@override
String debugGetCreateSourceHash() => _$contactMethodsHash();
@$internal
@override
$FutureProviderElement<List<SnContactMethod>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnContactMethod>> create(Ref ref) {
return contactMethods(ref);
}
}
String _$contactMethodsHash() => r'1d3d03e9ffbf36126236558ead22cb7d88bb9cb2';
/// See also [contactMethods].
@ProviderFor(contactMethods)
final contactMethodsProvider =
AutoDisposeFutureProvider<List<SnContactMethod>>.internal(
contactMethods,
name: r'contactMethodsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$contactMethodsHash,
@ProviderFor(accountConnections)
const accountConnectionsProvider = AccountConnectionsProvider._();
final class AccountConnectionsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnAccountConnection>>,
List<SnAccountConnection>,
FutureOr<List<SnAccountConnection>>
>
with
$FutureModifier<List<SnAccountConnection>>,
$FutureProvider<List<SnAccountConnection>> {
const AccountConnectionsProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'accountConnectionsProvider',
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef ContactMethodsRef = AutoDisposeFutureProviderRef<List<SnContactMethod>>;
@override
String debugGetCreateSourceHash() => _$accountConnectionsHash();
@$internal
@override
$FutureProviderElement<List<SnAccountConnection>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnAccountConnection>> create(Ref ref) {
return accountConnections(ref);
}
}
String _$accountConnectionsHash() =>
r'33c10b98962ede6c428d4028c0d5f2f12ff0eb22';
/// See also [accountConnections].
@ProviderFor(accountConnections)
final accountConnectionsProvider =
AutoDisposeFutureProvider<List<SnAccountConnection>>.internal(
accountConnections,
name: r'accountConnectionsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$accountConnectionsHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef AccountConnectionsRef =
AutoDisposeFutureProviderRef<List<SnAccountConnection>>;
// 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

View File

@@ -3,16 +3,17 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/pods/paging.dart';
import 'package:island/pods/userinfo.dart';
import 'package:island/widgets/account/account_pfc.dart';
import 'package:island/widgets/account/account_picker.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:relative_time/relative_time.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:island/models/relationship.dart';
import 'package:island/pods/network.dart';
@@ -28,39 +29,31 @@ Future<List<SnRelationship>> sentFriendRequest(Ref ref) async {
.toList();
}
@riverpod
class RelationshipListNotifier extends _$RelationshipListNotifier
with CursorPagingNotifierMixin<SnRelationship> {
@override
Future<CursorPagingData<SnRelationship>> build() => fetch(cursor: null);
final relationshipListNotifierProvider = AsyncNotifierProvider(
RelationshipListNotifier.new,
);
class RelationshipListNotifier extends AsyncNotifier<List<SnRelationship>>
with AsyncPaginationController<SnRelationship> {
@override
Future<CursorPagingData<SnRelationship>> fetch({
required String? cursor,
}) async {
Future<List<SnRelationship>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final take = 20;
final response = await client.get(
'/pass/relationships',
queryParameters: {'offset': offset, 'take': take},
queryParameters: {'offset': fetchedCount.toString(), 'take': take},
);
final List<SnRelationship> items =
(response.data as List)
.map((e) => SnRelationship.fromJson(e as Map<String, dynamic>))
.cast<SnRelationship>()
.toList();
final total = int.tryParse(response.headers['x-total']?.first ?? '') ?? 0;
final hasMore = offset + items.length < total;
final nextCursor = hasMore ? (offset + items.length).toString() : null;
totalCount = int.tryParse(response.headers['x-total']?.first ?? '') ?? 0;
return CursorPagingData(
items: items,
hasMore: hasMore,
nextCursor: nextCursor,
);
return items;
}
}
@@ -242,7 +235,7 @@ class RelationshipScreen extends HookConsumerWidget {
await client.post(
'/pass/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
);
relationshipNotifier.forceRefresh();
relationshipNotifier.refresh();
if (!context.mounted) return;
if (isAccept) {
showSnackBar(
@@ -270,7 +263,7 @@ class RelationshipScreen extends HookConsumerWidget {
'/pass/relationships/${relationship.accountId}',
data: {'status': newStatus},
);
relationshipNotifier.forceRefresh();
relationshipNotifier.refresh();
}
final user = ref.watch(userInfoProvider);
@@ -305,26 +298,15 @@ class RelationshipScreen extends HookConsumerWidget {
),
const Divider(height: 1),
Expanded(
child: PagingHelperView(
child: PaginationList(
provider: relationshipListNotifierProvider,
futureRefreshable: relationshipListNotifierProvider.future,
notifierRefreshable: relationshipListNotifierProvider.notifier,
contentBuilder:
(data, widgetCount, endItemView) => ListView.builder(
padding: EdgeInsets.zero,
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final relationship = data.items[index];
notifier: relationshipListNotifierProvider.notifier,
itemBuilder: (context, index, relationship) {
return RelationshipListTile(
relationship: relationship,
submitting: submitting.value,
onAccept: () => handleFriendRequest(relationship, true),
onDecline:
() => handleFriendRequest(relationship, false),
onDecline: () => handleFriendRequest(relationship, false),
currentUserId: user.value?.id,
showRelatedAccount: false,
onUpdateStatus: updateRelationship,
@@ -332,7 +314,6 @@ class RelationshipScreen extends HookConsumerWidget {
},
),
),
),
],
),
);

View File

@@ -6,46 +6,46 @@ part of 'relationship.dart';
// RiverpodGenerator
// **************************************************************************
String _$sentFriendRequestHash() => r'0c52813eb6f86c05f6e0b1e4e840d0d9c350aa9e';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [sentFriendRequest].
@ProviderFor(sentFriendRequest)
final sentFriendRequestProvider =
AutoDisposeFutureProvider<List<SnRelationship>>.internal(
sentFriendRequest,
const sentFriendRequestProvider = SentFriendRequestProvider._();
final class SentFriendRequestProvider
extends
$FunctionalProvider<
AsyncValue<List<SnRelationship>>,
List<SnRelationship>,
FutureOr<List<SnRelationship>>
>
with
$FutureModifier<List<SnRelationship>>,
$FutureProvider<List<SnRelationship>> {
const SentFriendRequestProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'sentFriendRequestProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$sentFriendRequestHash,
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef SentFriendRequestRef =
AutoDisposeFutureProviderRef<List<SnRelationship>>;
String _$relationshipListNotifierHash() =>
r'fc46920256f7c48445c00652165e879890f2c9a3';
@override
String debugGetCreateSourceHash() => _$sentFriendRequestHash();
/// See also [RelationshipListNotifier].
@ProviderFor(RelationshipListNotifier)
final relationshipListNotifierProvider = AutoDisposeAsyncNotifierProvider<
RelationshipListNotifier,
CursorPagingData<SnRelationship>
>.internal(
RelationshipListNotifier.new,
name: r'relationshipListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$relationshipListNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
@$internal
@override
$FutureProviderElement<List<SnRelationship>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
typedef _$RelationshipListNotifier =
AutoDisposeAsyncNotifier<CursorPagingData<SnRelationship>>;
// 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
@override
FutureOr<List<SnRelationship>> create(Ref ref) {
return sentFriendRequest(ref);
}
}
String _$sentFriendRequestHash() => r'0c52813eb6f86c05f6e0b1e4e840d0d9c350aa9e';

View File

@@ -1,4 +1,3 @@
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/pods/network.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';

View File

@@ -6,21 +6,38 @@ part of 'captcha.config.dart';
// RiverpodGenerator
// **************************************************************************
String _$captchaUrlHash() => r'5d59de4f26a0544bf4fbd5209943f0b111959ce6';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [captchaUrl].
@ProviderFor(captchaUrl)
final captchaUrlProvider = AutoDisposeFutureProvider<String>.internal(
captchaUrl,
name: r'captchaUrlProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$captchaUrlHash,
dependencies: null,
allTransitiveDependencies: null,
);
const captchaUrlProvider = CaptchaUrlProvider._();
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef CaptchaUrlRef = AutoDisposeFutureProviderRef<String>;
// 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
final class CaptchaUrlProvider
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
with $FutureModifier<String>, $FutureProvider<String> {
const CaptchaUrlProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'captchaUrlProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$captchaUrlHash();
@$internal
@override
$FutureProviderElement<String> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<String> create(Ref ref) {
return captchaUrl(ref);
}
}
String _$captchaUrlHash() => r'5d59de4f26a0544bf4fbd5209943f0b111959ce6';

View File

@@ -22,8 +22,8 @@ class CallScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final ongoingCall = ref.watch(ongoingCallProvider(room.id));
final callState = ref.watch(callNotifierProvider);
final callNotifier = ref.watch(callNotifierProvider.notifier);
final callState = ref.watch(callProvider);
final callNotifier = ref.watch(callProvider.notifier);
useEffect(() {
talker.info('[Call] Joining the call...');

View File

@@ -191,7 +191,7 @@ class ChatListBodyWidget extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final chats = ref.watch(chatRoomJoinedNotifierProvider);
final chats = ref.watch(chatRoomJoinedProvider);
Widget bodyWidget = Column(
children: [
@@ -214,7 +214,7 @@ class ChatListBodyWidget extends HookConsumerWidget {
(items) => RefreshIndicator(
onRefresh:
() => Future.sync(() {
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
}),
child: SuperListView.builder(
padding: EdgeInsets.only(bottom: 96),
@@ -264,7 +264,7 @@ class ChatListBodyWidget extends HookConsumerWidget {
(error, stack) => ResponseErrorWidget(
error: error,
onRetry: () {
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
},
),
),
@@ -341,7 +341,7 @@ class ChatListScreen extends HookConsumerWidget {
// Listen for chat rooms refresh events
final subscription = eventBus.on<ChatRoomsRefreshEvent>().listen((event) {
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
});
return () {
@@ -353,13 +353,14 @@ class ChatListScreen extends HookConsumerWidget {
// Set FAB type to chat
final fabMenuNotifier = ref.read(fabMenuTypeProvider.notifier);
Future(() {
fabMenuNotifier.state = FabMenuType.chat;
fabMenuNotifier.setMenuType(FabMenuType.chat);
});
return () {
// Clean up: reset FAB type to main
final fabMenu = ref.read(fabMenuTypeProvider);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (fabMenuNotifier.state == FabMenuType.chat) {
fabMenuNotifier.state = FabMenuType.main;
if (fabMenu == FabMenuType.chat) {
fabMenuNotifier.setMenuType(FabMenuType.main);
}
});
};
@@ -521,7 +522,7 @@ class _ChatInvitesSheet extends HookConsumerWidget {
final client = ref.read(apiClientProvider);
await client.post('/sphere/chat/invites/${invite.chatRoom!.id}/accept');
ref.invalidate(chatroomInvitesProvider);
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
} catch (err) {
showErrorAlert(err);
}

View File

@@ -47,7 +47,7 @@ class EditChatScreen extends HookConsumerWidget {
final isPublic = useState(true);
final isCommunity = useState(false);
final chat = ref.watch(ChatRoomNotifierProvider(id));
final chat = ref.watch(chatRoomProvider(id));
final joinedRealms = ref.watch(realmsJoinedProvider);
final currentRealm = useState<SnRealm?>(null);

View File

@@ -27,8 +27,8 @@ class PublicRoomPreview extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final messages = ref.watch(messagesNotifierProvider(id));
final messagesNotifier = ref.read(messagesNotifierProvider(id).notifier);
final messages = ref.watch(messagesProvider(id));
final messagesNotifier = ref.read(messagesProvider(id).notifier);
final scrollController = useScrollController();
final listController = useMemoized(() => ListController(), []);
@@ -203,7 +203,7 @@ class PublicRoomPreview extends HookConsumerWidget {
showLoadingModal(context);
final apiClient = ref.read(apiClientProvider);
await apiClient.post('/sphere/chat/${room.id}/members/me');
ref.invalidate(ChatRoomIdentityNotifierProvider(id));
ref.invalidate(chatRoomIdentityProvider(id));
} catch (err) {
showErrorAlert(err);
} finally {

View File

@@ -48,11 +48,11 @@ class ChatRoomScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final chatRoom = ref.watch(ChatRoomNotifierProvider(id));
final chatIdentity = ref.watch(ChatRoomIdentityNotifierProvider(id));
final isSyncing = ref.watch(isSyncingProvider);
final onlineCount = ref.watch(chatOnlineCountNotifierProvider(id));
final settings = ref.watch(appSettingsNotifierProvider);
final chatRoom = ref.watch(chatRoomProvider(id));
final chatIdentity = ref.watch(chatRoomIdentityProvider(id));
final isSyncing = ref.watch(chatSyncingProvider);
final onlineCount = ref.watch(chatOnlineCountProvider(id));
final settings = ref.watch(appSettingsProvider);
if (chatIdentity.isLoading || chatRoom.isLoading) {
return AppScaffold(
@@ -100,9 +100,7 @@ class ChatRoomScreen extends HookConsumerWidget {
await apiClient.post(
'/sphere/chat/${room.id}/members/me',
);
ref.invalidate(
ChatRoomIdentityNotifierProvider(id),
);
ref.invalidate(chatRoomIdentityProvider(id));
} catch (err) {
showErrorAlert(err);
} finally {
@@ -131,17 +129,15 @@ class ChatRoomScreen extends HookConsumerWidget {
appBar: AppBar(leading: const PageBackButton()),
body: ResponseErrorWidget(
error: error,
onRetry: () => ref.refresh(ChatRoomNotifierProvider(id)),
onRetry: () => ref.refresh(chatRoomProvider(id)),
),
),
);
}
final messages = ref.watch(messagesNotifierProvider(id));
final messagesNotifier = ref.read(messagesNotifierProvider(id).notifier);
final chatSubscribeNotifier = ref.read(
chatSubscribeNotifierProvider(id).notifier,
);
final messages = ref.watch(messagesProvider(id));
final messagesNotifier = ref.read(messagesProvider(id).notifier);
final chatSubscribeNotifier = ref.read(chatSubscribeProvider(id).notifier);
final messageController = useTextEditingController();
final scrollController = useScrollController();
@@ -384,7 +380,7 @@ class ChatRoomScreen extends HookConsumerWidget {
// Convert selected message IDs to message data
final selectedMessageData =
messages.valueOrNull
messages.value
?.where((msg) => selectedMessages.value.contains(msg.id))
.map(
(msg) => {
@@ -773,8 +769,7 @@ class ChatRoomScreen extends HookConsumerWidget {
'chatDetail',
pathParameters: {'id': id},
);
if (result is SearchMessagesResult &&
messages.valueOrNull != null) {
if (result is SearchMessagesResult && messages.value != null) {
final messageId = result.messageId;
// Jump to the message and trigger flash effect

View File

@@ -1,14 +1,13 @@
import 'package:dio/dio.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/chat.dart';
import 'package:island/pods/chat/chat_room.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/account/account_pfc.dart';
import 'package:island/widgets/account/account_picker.dart';
import 'package:island/widgets/account/status.dart';
@@ -17,9 +16,9 @@ import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/sheet.dart';
import 'package:island/screens/chat/chat_form.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:island/pods/database.dart';
import 'package:island/screens/chat/search_messages.dart';
@@ -39,8 +38,8 @@ class ChatDetailScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final roomState = ref.watch(ChatRoomNotifierProvider(id));
final roomIdentity = ref.watch(ChatRoomIdentityNotifierProvider(id));
final roomState = ref.watch(chatRoomProvider(id));
final roomIdentity = ref.watch(chatRoomIdentityProvider(id));
final totalMessages = ref.watch(totalMessagesCountProvider(id));
const kNotifyLevelText = [
@@ -56,7 +55,7 @@ class ChatDetailScreen extends HookConsumerWidget {
'/sphere/chat/$id/members/me/notify',
data: {'notify_level': level},
);
ref.invalidate(ChatRoomIdentityNotifierProvider(id));
ref.invalidate(chatRoomIdentityProvider(id));
if (context.mounted) {
showSnackBar(
'chatNotifyLevelUpdated'.tr(args: [kNotifyLevelText[level].tr()]),
@@ -74,7 +73,7 @@ class ChatDetailScreen extends HookConsumerWidget {
'/sphere/chat/$id/members/me/notify',
data: {'break_until': until.toUtc().toIso8601String()},
);
ref.invalidate(ChatRoomNotifierProvider(id));
ref.invalidate(chatRoomIdentityProvider(id));
} catch (err) {
showErrorAlert(err);
}
@@ -439,8 +438,8 @@ class _ChatRoomActionMenu extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final chatIdentity = ref.watch(ChatRoomIdentityNotifierProvider(id));
final chatRoom = ref.watch(ChatRoomNotifierProvider(id));
final chatIdentity = ref.watch(chatRoomIdentityProvider(id));
final chatRoom = ref.watch(chatRoomProvider(id));
final isManagable =
chatIdentity.value?.accountId == chatRoom.value?.accountId ||
@@ -461,7 +460,7 @@ class _ChatRoomActionMenu extends HookConsumerWidget {
).then((value) {
if (value != null) {
// Invalidate to refresh room data after edit
ref.invalidate(ChatRoomNotifierProvider(id));
ref.invalidate(chatMemberListProvider(id));
}
});
},
@@ -497,7 +496,7 @@ class _ChatRoomActionMenu extends HookConsumerWidget {
if (confirm) {
final client = ref.watch(apiClientProvider);
await client.delete('/sphere/chat/$id');
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
if (context.mounted) {
context.pop();
}
@@ -530,7 +529,7 @@ class _ChatRoomActionMenu extends HookConsumerWidget {
if (confirm) {
final client = ref.watch(apiClientProvider);
await client.delete('/sphere/chat/$id/members/me');
ref.invalidate(chatRoomJoinedNotifierProvider);
ref.invalidate(chatRoomJoinedProvider);
if (context.mounted) {
context.pop();
}
@@ -553,86 +552,37 @@ sealed class ChatRoomMemberState with _$ChatRoomMemberState {
}) = _ChatRoomMemberState;
}
final chatMemberStateProvider = StateNotifierProvider.family<
ChatMemberNotifier,
ChatRoomMemberState,
String
>((ref, roomId) {
final apiClient = ref.watch(apiClientProvider);
return ChatMemberNotifier(apiClient, roomId);
});
final chatMemberListProvider = AsyncNotifierProvider.autoDispose.family(
ChatMemberListNotifier.new,
);
class ChatMemberNotifier extends StateNotifier<ChatRoomMemberState> {
final String roomId;
final Dio _apiClient;
class ChatMemberListNotifier extends AsyncNotifier<List<SnChatMember>>
with AsyncPaginationController<SnChatMember> {
static const pageSize = 20;
ChatMemberNotifier(this._apiClient, this.roomId)
: super(const ChatRoomMemberState(members: [], isLoading: false, total: 0));
Future<void> loadMore({int offset = 0, int take = 20}) async {
if (state.isLoading) return;
if (state.total > 0 && state.members.length >= state.total) return;
state = state.copyWith(isLoading: true, error: null);
try {
final response = await _apiClient.get(
'/sphere/chat/$roomId/members',
queryParameters: {'offset': offset, 'take': take},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final members = data.map((e) => SnChatMember.fromJson(e)).toList();
state = state.copyWith(
members: [...state.members, ...members],
total: total,
isLoading: false,
);
} catch (e) {
state = state.copyWith(error: e.toString(), isLoading: false);
}
}
void reset() {
state = const ChatRoomMemberState(members: [], isLoading: false, total: 0);
}
}
@riverpod
class ChatMemberListNotifier extends _$ChatMemberListNotifier
with CursorPagingNotifierMixin<SnChatMember> {
@override
Future<CursorPagingData<SnChatMember>> build(String roomId) {
return fetch();
}
final String arg;
ChatMemberListNotifier(this.arg);
@override
Future<CursorPagingData<SnChatMember>> fetch({String? cursor}) async {
final offset = cursor == null ? 0 : int.parse(cursor);
final take = 20;
Future<List<SnChatMember>> fetch() async {
final apiClient = ref.watch(apiClientProvider);
final response = await apiClient.get(
'/sphere/chat/$roomId/members',
queryParameters: {'offset': offset, 'take': take, 'withStatus': true},
'/sphere/chat/$arg/members',
queryParameters: {
'offset': fetchedCount.toString(),
'take': pageSize,
'withStatus': true,
},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final members = data.map((e) => SnChatMember.fromJson(e)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final members =
response.data
.map((e) => SnChatMember.fromJson(e))
.cast<SnChatMember>()
.toList();
// Calculate next cursor based on total count
final nextOffset = offset + members.length;
final String? nextCursor =
nextOffset < total ? nextOffset.toString() : null;
return CursorPagingData(
items: members,
nextCursor: nextCursor,
hasMore: members.length < total,
);
return members;
}
}
@@ -642,26 +592,15 @@ class _ChatMemberListSheet extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final memberListProvider = chatMemberListNotifierProvider(roomId);
final memberNotifier = ref.read(chatMemberListProvider(roomId).notifier);
// For backward compatibility and to show total count in the header
final memberState = ref.watch(chatMemberStateProvider(roomId));
final memberNotifier = ref.read(chatMemberStateProvider(roomId).notifier);
final roomIdentity = ref.watch(ChatRoomIdentityNotifierProvider(roomId));
final chatRoom = ref.watch(ChatRoomNotifierProvider(roomId));
final roomIdentity = ref.watch(chatRoomIdentityProvider(roomId));
final chatRoom = ref.watch(chatRoomProvider(roomId));
final isManagable =
chatRoom.value?.accountId == roomIdentity.value?.accountId ||
chatRoom.value?.type == 1;
useEffect(() {
Future(() {
memberNotifier.loadMore();
});
return null;
}, []);
Future<void> invitePerson() async {
final result = await showModalBottomSheet(
context: context,
@@ -676,10 +615,7 @@ class _ChatMemberListSheet extends HookConsumerWidget {
'/sphere/chat/invites/$roomId',
data: {'related_user_id': result.id, 'role': 0},
);
// Refresh both providers
memberNotifier.reset();
await memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
} catch (err) {
showErrorAlert(err);
}
@@ -696,7 +632,7 @@ class _ChatMemberListSheet extends HookConsumerWidget {
child: Row(
children: [
Text(
'members'.plural(memberState.total),
'members'.plural(memberNotifier.totalCount ?? 0),
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
@@ -711,10 +647,7 @@ class _ChatMemberListSheet extends HookConsumerWidget {
IconButton(
icon: const Icon(Symbols.refresh),
onPressed: () {
// Refresh both providers
memberNotifier.reset();
memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
},
),
IconButton(
@@ -727,19 +660,10 @@ class _ChatMemberListSheet extends HookConsumerWidget {
),
const Divider(height: 1),
Expanded(
child: PagingHelperView(
provider: memberListProvider,
futureRefreshable: memberListProvider.future,
notifierRefreshable: memberListProvider.notifier,
contentBuilder: (data, widgetCount, endItemView) {
return ListView.builder(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == data.items.length) {
return endItemView;
}
final member = data.items[index];
child: PaginationList(
provider: chatMemberListProvider(roomId),
notifier: chatMemberListProvider(roomId).notifier,
itemBuilder: (context, idx, member) {
return ListTile(
contentPadding: EdgeInsets.only(left: 16, right: 12),
leading: AccountPfcGestureDetector(
@@ -776,16 +700,12 @@ class _ChatMemberListSheet extends HookConsumerWidget {
).then((confirm) async {
if (confirm != true) return;
try {
final apiClient = ref.watch(
apiClientProvider,
);
final apiClient = ref.watch(apiClientProvider);
await apiClient.delete(
'/sphere/chat/$roomId/members/${member.accountId}',
);
// Refresh both providers
memberNotifier.reset();
memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
} catch (err) {
showErrorAlert(err);
}
@@ -796,8 +716,6 @@ class _ChatMemberListSheet extends HookConsumerWidget {
),
);
},
);
},
),
),
],

View File

@@ -6,297 +6,75 @@ part of 'room_detail.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(totalMessagesCount)
const totalMessagesCountProvider = TotalMessagesCountFamily._();
final class TotalMessagesCountProvider
extends $FunctionalProvider<AsyncValue<int>, int, FutureOr<int>>
with $FutureModifier<int>, $FutureProvider<int> {
const TotalMessagesCountProvider._({
required TotalMessagesCountFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'totalMessagesCountProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$totalMessagesCountHash();
@override
String toString() {
return r'totalMessagesCountProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<int> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<int> create(Ref ref) {
final argument = this.argument as String;
return totalMessagesCount(ref, argument);
}
@override
bool operator ==(Object other) {
return other is TotalMessagesCountProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$totalMessagesCountHash() =>
r'd55f1507aba2acdce5e468c1c2e15dba7640c571';
/// 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 [totalMessagesCount].
@ProviderFor(totalMessagesCount)
const totalMessagesCountProvider = TotalMessagesCountFamily();
/// See also [totalMessagesCount].
class TotalMessagesCountFamily extends Family<AsyncValue<int>> {
/// See also [totalMessagesCount].
const TotalMessagesCountFamily();
/// See also [totalMessagesCount].
TotalMessagesCountProvider call(String roomId) {
return TotalMessagesCountProvider(roomId);
}
@override
TotalMessagesCountProvider getProviderOverride(
covariant TotalMessagesCountProvider provider,
) {
return call(provider.roomId);
}
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'totalMessagesCountProvider';
}
/// See also [totalMessagesCount].
class TotalMessagesCountProvider extends AutoDisposeFutureProvider<int> {
/// See also [totalMessagesCount].
TotalMessagesCountProvider(String roomId)
: this._internal(
(ref) => totalMessagesCount(ref as TotalMessagesCountRef, roomId),
from: totalMessagesCountProvider,
final class TotalMessagesCountFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<int>, String> {
const TotalMessagesCountFamily._()
: super(
retry: null,
name: r'totalMessagesCountProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$totalMessagesCountHash,
dependencies: TotalMessagesCountFamily._dependencies,
allTransitiveDependencies:
TotalMessagesCountFamily._allTransitiveDependencies,
roomId: roomId,
);
TotalMessagesCountProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.roomId,
}) : super.internal();
final String roomId;
@override
Override overrideWith(
FutureOr<int> Function(TotalMessagesCountRef provider) create,
) {
return ProviderOverride(
origin: this,
override: TotalMessagesCountProvider._internal(
(ref) => create(ref as TotalMessagesCountRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
roomId: roomId,
),
);
}
@override
AutoDisposeFutureProviderElement<int> createElement() {
return _TotalMessagesCountProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is TotalMessagesCountProvider && other.roomId == roomId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, roomId.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin TotalMessagesCountRef on AutoDisposeFutureProviderRef<int> {
/// The parameter `roomId` of this provider.
String get roomId;
}
class _TotalMessagesCountProviderElement
extends AutoDisposeFutureProviderElement<int>
with TotalMessagesCountRef {
_TotalMessagesCountProviderElement(super.provider);
@override
String get roomId => (origin as TotalMessagesCountProvider).roomId;
}
String _$chatMemberListNotifierHash() =>
r'3ea30150278523e9f6b23f9200ea9a9fbae9c973';
abstract class _$ChatMemberListNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnChatMember>> {
late final String roomId;
FutureOr<CursorPagingData<SnChatMember>> build(String roomId);
}
/// See also [ChatMemberListNotifier].
@ProviderFor(ChatMemberListNotifier)
const chatMemberListNotifierProvider = ChatMemberListNotifierFamily();
/// See also [ChatMemberListNotifier].
class ChatMemberListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnChatMember>>> {
/// See also [ChatMemberListNotifier].
const ChatMemberListNotifierFamily();
/// See also [ChatMemberListNotifier].
ChatMemberListNotifierProvider call(String roomId) {
return ChatMemberListNotifierProvider(roomId);
}
@override
ChatMemberListNotifierProvider getProviderOverride(
covariant ChatMemberListNotifierProvider provider,
) {
return call(provider.roomId);
}
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'chatMemberListNotifierProvider';
}
/// See also [ChatMemberListNotifier].
class ChatMemberListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
ChatMemberListNotifier,
CursorPagingData<SnChatMember>
> {
/// See also [ChatMemberListNotifier].
ChatMemberListNotifierProvider(String roomId)
: this._internal(
() => ChatMemberListNotifier()..roomId = roomId,
from: chatMemberListNotifierProvider,
name: r'chatMemberListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$chatMemberListNotifierHash,
dependencies: ChatMemberListNotifierFamily._dependencies,
allTransitiveDependencies:
ChatMemberListNotifierFamily._allTransitiveDependencies,
roomId: roomId,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
ChatMemberListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.roomId,
}) : super.internal();
final String roomId;
TotalMessagesCountProvider call(String roomId) =>
TotalMessagesCountProvider._(argument: roomId, from: this);
@override
FutureOr<CursorPagingData<SnChatMember>> runNotifierBuild(
covariant ChatMemberListNotifier notifier,
) {
return notifier.build(roomId);
}
@override
Override overrideWith(ChatMemberListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ChatMemberListNotifierProvider._internal(
() => create()..roomId = roomId,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
roomId: roomId,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
ChatMemberListNotifier,
CursorPagingData<SnChatMember>
>
createElement() {
return _ChatMemberListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is ChatMemberListNotifierProvider && other.roomId == roomId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, roomId.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'totalMessagesCountProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ChatMemberListNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnChatMember>> {
/// The parameter `roomId` of this provider.
String get roomId;
}
class _ChatMemberListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
ChatMemberListNotifier,
CursorPagingData<SnChatMember>
>
with ChatMemberListNotifierRef {
_ChatMemberListNotifierProviderElement(super.provider);
@override
String get roomId => (origin as ChatMemberListNotifierProvider).roomId;
}
// 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

View File

@@ -124,9 +124,7 @@ class SearchMessagesScreen extends HookConsumerWidget {
// Debounce timer for search optimization
final debounceTimer = useRef<Timer?>(null);
final messagesNotifier = ref.read(
messagesNotifierProvider(roomId).notifier,
);
final messagesNotifier = ref.read(messagesProvider(roomId).notifier);
// Optimized search function with debouncing
void performSearch(String query) async {
@@ -180,7 +178,7 @@ class SearchMessagesScreen extends HookConsumerWidget {
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((_) {
// Clear flashing messages when entering search screen
ref.read(flashingMessagesProvider.notifier).state = {};
ref.read(flashingMessagesProvider.notifier).clear();
});
return null;
}, []);

View File

@@ -1,14 +1,28 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:island/database/message.dart';
import 'package:island/models/chat.dart';
import 'package:island/widgets/chat/message_item.dart';
// Provider to track animated messages to prevent replay
final animatedMessagesProvider = StateProvider<Set<String>>((ref) => {});
final animatedMessagesProvider =
NotifierProvider<AnimatedMessagesNotifier, Set<String>>(
AnimatedMessagesNotifier.new,
);
class MessageItemWrapper extends HookConsumerWidget {
class AnimatedMessagesNotifier extends Notifier<Set<String>> {
@override
Set<String> build() {
return {};
}
void addMessage(String messageId) {
state = {...state, messageId};
}
}
class MessageItemWrapper extends ConsumerWidget {
final LocalChatMessage message;
final int index;
final bool isLastInGroup;
@@ -78,9 +92,7 @@ class MessageItemWrapper extends HookConsumerWidget {
onEnd: () {
// Mark as animated
WidgetsBinding.instance.addPostFrameCallback((_) {
ref
.read(animatedMessagesProvider.notifier)
.update((state) => {...state, message.id});
ref.read(animatedMessagesProvider.notifier).addMessage(message.id);
});
},
child: child,

View File

@@ -10,6 +10,7 @@ import 'package:island/models/post.dart';
import 'package:island/models/publisher.dart';
import 'package:island/models/heatmap.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/screens/creators/publishers_form.dart';
import 'package:island/services/responsive.dart';
import 'package:island/utils/text.dart';
@@ -18,11 +19,11 @@ import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/sheet.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:island/widgets/response.dart';
import 'package:island/widgets/activity_heatmap.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:styled_widget/styled_widget.dart';
part 'hub.g.dart';
@@ -77,38 +78,33 @@ Future<List<SnPublisherMember>> publisherInvites(Ref ref) async {
.toList();
}
@riverpod
class PublisherMemberListNotifier extends _$PublisherMemberListNotifier
with CursorPagingNotifierMixin<SnPublisherMember> {
static const int _pageSize = 20;
final publisherMemberListNotifierProvider = AsyncNotifierProvider.family
.autoDispose(PublisherMemberListNotifier.new);
class PublisherMemberListNotifier extends AsyncNotifier<List<SnPublisherMember>>
with AsyncPaginationController<SnPublisherMember> {
static const int pageSize = 20;
final String arg;
PublisherMemberListNotifier(this.arg);
@override
Future<CursorPagingData<SnPublisherMember>> build(String uname) async {
return fetch();
}
@override
Future<CursorPagingData<SnPublisherMember>> fetch({String? cursor}) async {
Future<List<SnPublisherMember>> fetch() async {
final apiClient = ref.read(apiClientProvider);
final offset = cursor != null ? int.parse(cursor) : 0;
final response = await apiClient.get(
'/sphere/publishers/$uname/members',
queryParameters: {'offset': offset, 'take': _pageSize},
'/sphere/publishers/$arg/members',
queryParameters: {'offset': fetchedCount.toString(), 'take': pageSize},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final members = data.map((e) => SnPublisherMember.fromJson(e)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final members =
response.data
.map((e) => SnPublisherMember.fromJson(e))
.cast<SnPublisherMember>()
.toList();
final hasMore = offset + members.length < total;
final nextCursor = hasMore ? (offset + members.length).toString() : null;
return CursorPagingData(
items: members,
hasMore: hasMore,
nextCursor: nextCursor,
);
return members;
}
}
@@ -765,55 +761,6 @@ class PublisherMemberState {
}
}
final publisherMemberStateProvider = StateNotifierProvider.family<
PublisherMemberNotifier,
PublisherMemberState,
String
>((ref, publisherUname) {
final apiClient = ref.watch(apiClientProvider);
return PublisherMemberNotifier(apiClient, publisherUname);
});
class PublisherMemberNotifier extends StateNotifier<PublisherMemberState> {
final String publisherUname;
final Dio _apiClient;
PublisherMemberNotifier(this._apiClient, this.publisherUname)
: super(
const PublisherMemberState(members: [], isLoading: false, total: 0),
);
Future<void> loadMore({int offset = 0, int take = 20}) async {
if (state.isLoading) return;
if (state.total > 0 && state.members.length >= state.total) return;
state = state.copyWith(isLoading: true, error: null);
try {
final response = await _apiClient.get(
'/sphere/publishers/$publisherUname/members',
queryParameters: {'offset': offset, 'take': take},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final members = data.map((e) => SnPublisherMember.fromJson(e)).toList();
state = state.copyWith(
members: [...state.members, ...members],
total: total,
isLoading: false,
);
} catch (e) {
state = state.copyWith(error: e.toString(), isLoading: false);
}
}
void reset() {
state = const PublisherMemberState(members: [], isLoading: false, total: 0);
}
}
class _PublisherMemberListSheet extends HookConsumerWidget {
final String publisherUname;
const _PublisherMemberListSheet({required this.publisherUname});
@@ -826,18 +773,10 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
final memberListProvider = publisherMemberListNotifierProvider(
publisherUname,
);
final memberState = ref.watch(publisherMemberStateProvider(publisherUname));
final memberNotifier = ref.read(
publisherMemberStateProvider(publisherUname).notifier,
publisherMemberListNotifierProvider(publisherUname).notifier,
);
useEffect(() {
Future(() {
memberNotifier.loadMore();
});
return null;
}, []);
Future<void> invitePerson() async {
final result = await showModalBottomSheet(
useRootNavigator: true,
@@ -852,10 +791,7 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
'/sphere/publishers/invites/$publisherUname',
data: {'related_user_id': result.id, 'role': 0},
);
// Refresh both providers
memberNotifier.reset();
await memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
} catch (err) {
showErrorAlert(err);
}
@@ -872,7 +808,7 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
child: Row(
children: [
Text(
'members'.plural(memberState.total),
'members'.plural(memberNotifier.totalCount ?? 0),
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
@@ -887,9 +823,7 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
IconButton(
icon: const Icon(Symbols.refresh),
onPressed: () {
memberNotifier.reset();
memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
},
),
IconButton(
@@ -902,19 +836,10 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
),
const Divider(height: 1),
Expanded(
child: PagingHelperView(
child: PaginationList(
provider: memberListProvider,
futureRefreshable: memberListProvider.future,
notifierRefreshable: memberListProvider.notifier,
contentBuilder: (data, widgetCount, endItemView) {
return ListView.builder(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == data.items.length) {
return endItemView;
}
final member = data.items[index];
notifier: memberListProvider.notifier,
itemBuilder: (context, index, member) {
return ListTile(
contentPadding: EdgeInsets.only(left: 16, right: 12),
leading: ProfilePictureWidget(
@@ -958,10 +883,7 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
),
).then((value) {
if (value != null) {
// Refresh both providers
memberNotifier.reset();
memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
}
});
},
@@ -976,16 +898,11 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
).then((confirm) async {
if (confirm != true) return;
try {
final apiClient = ref.watch(
apiClientProvider,
);
final apiClient = ref.watch(apiClientProvider);
await apiClient.delete(
'/sphere/publishers/$publisherUname/members/${member.accountId}',
);
// Refresh both providers
memberNotifier.reset();
memberNotifier.loadMore();
ref.invalidate(memberListProvider);
memberNotifier.refresh();
} catch (err) {
showErrorAlert(err);
}
@@ -996,8 +913,6 @@ class _PublisherMemberListSheet extends HookConsumerWidget {
),
);
},
);
},
),
),
],

View File

@@ -6,686 +6,351 @@ part of 'hub.dart';
// RiverpodGenerator
// **************************************************************************
String _$publisherStatsHash() => r'eea4ed98bf165cc785874f83b912bb7e23d1f7bc';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [publisherStats].
@ProviderFor(publisherStats)
const publisherStatsProvider = PublisherStatsFamily();
const publisherStatsProvider = PublisherStatsFamily._();
/// See also [publisherStats].
class PublisherStatsFamily extends Family<AsyncValue<SnPublisherStats?>> {
/// See also [publisherStats].
const PublisherStatsFamily();
/// See also [publisherStats].
PublisherStatsProvider call(String? uname) {
return PublisherStatsProvider(uname);
}
@override
PublisherStatsProvider getProviderOverride(
covariant PublisherStatsProvider provider,
) {
return call(provider.uname);
}
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'publisherStatsProvider';
}
/// See also [publisherStats].
class PublisherStatsProvider
extends AutoDisposeFutureProvider<SnPublisherStats?> {
/// See also [publisherStats].
PublisherStatsProvider(String? uname)
: this._internal(
(ref) => publisherStats(ref as PublisherStatsRef, uname),
from: publisherStatsProvider,
final class PublisherStatsProvider
extends
$FunctionalProvider<
AsyncValue<SnPublisherStats?>,
SnPublisherStats?,
FutureOr<SnPublisherStats?>
>
with
$FutureModifier<SnPublisherStats?>,
$FutureProvider<SnPublisherStats?> {
const PublisherStatsProvider._({
required PublisherStatsFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'publisherStatsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherStatsHash,
dependencies: PublisherStatsFamily._dependencies,
allTransitiveDependencies:
PublisherStatsFamily._allTransitiveDependencies,
uname: uname,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherStatsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String? uname;
@override
Override overrideWith(
FutureOr<SnPublisherStats?> Function(PublisherStatsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherStatsProvider._internal(
(ref) => create(ref as PublisherStatsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$publisherStatsHash();
@override
String toString() {
return r'publisherStatsProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPublisherStats?> createElement() {
return _PublisherStatsProviderElement(this);
$FutureProviderElement<SnPublisherStats?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublisherStats?> create(Ref ref) {
final argument = this.argument as String?;
return publisherStats(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherStatsProvider && other.uname == uname;
return other is PublisherStatsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherStatsRef on AutoDisposeFutureProviderRef<SnPublisherStats?> {
/// The parameter `uname` of this provider.
String? get uname;
}
String _$publisherStatsHash() => r'eea4ed98bf165cc785874f83b912bb7e23d1f7bc';
class _PublisherStatsProviderElement
extends AutoDisposeFutureProviderElement<SnPublisherStats?>
with PublisherStatsRef {
_PublisherStatsProviderElement(super.provider);
final class PublisherStatsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPublisherStats?>, String?> {
const PublisherStatsFamily._()
: super(
retry: null,
name: r'publisherStatsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PublisherStatsProvider call(String? uname) =>
PublisherStatsProvider._(argument: uname, from: this);
@override
String? get uname => (origin as PublisherStatsProvider).uname;
String toString() => r'publisherStatsProvider';
}
@ProviderFor(publisherHeatmap)
const publisherHeatmapProvider = PublisherHeatmapFamily._();
final class PublisherHeatmapProvider
extends
$FunctionalProvider<
AsyncValue<SnHeatmap?>,
SnHeatmap?,
FutureOr<SnHeatmap?>
>
with $FutureModifier<SnHeatmap?>, $FutureProvider<SnHeatmap?> {
const PublisherHeatmapProvider._({
required PublisherHeatmapFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'publisherHeatmapProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$publisherHeatmapHash();
@override
String toString() {
return r'publisherHeatmapProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnHeatmap?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnHeatmap?> create(Ref ref) {
final argument = this.argument as String?;
return publisherHeatmap(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherHeatmapProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$publisherHeatmapHash() => r'5f70c55e14629ec8628445a317888e02fccd9af2';
/// See also [publisherHeatmap].
@ProviderFor(publisherHeatmap)
const publisherHeatmapProvider = PublisherHeatmapFamily();
final class PublisherHeatmapFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnHeatmap?>, String?> {
const PublisherHeatmapFamily._()
: super(
retry: null,
name: r'publisherHeatmapProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// See also [publisherHeatmap].
class PublisherHeatmapFamily extends Family<AsyncValue<SnHeatmap?>> {
/// See also [publisherHeatmap].
const PublisherHeatmapFamily();
/// See also [publisherHeatmap].
PublisherHeatmapProvider call(String? uname) {
return PublisherHeatmapProvider(uname);
}
PublisherHeatmapProvider call(String? uname) =>
PublisherHeatmapProvider._(argument: uname, from: this);
@override
PublisherHeatmapProvider getProviderOverride(
covariant PublisherHeatmapProvider provider,
) {
return call(provider.uname);
}
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'publisherHeatmapProvider';
String toString() => r'publisherHeatmapProvider';
}
/// See also [publisherHeatmap].
class PublisherHeatmapProvider extends AutoDisposeFutureProvider<SnHeatmap?> {
/// See also [publisherHeatmap].
PublisherHeatmapProvider(String? uname)
: this._internal(
(ref) => publisherHeatmap(ref as PublisherHeatmapRef, uname),
from: publisherHeatmapProvider,
name: r'publisherHeatmapProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherHeatmapHash,
dependencies: PublisherHeatmapFamily._dependencies,
allTransitiveDependencies:
PublisherHeatmapFamily._allTransitiveDependencies,
uname: uname,
@ProviderFor(publisherIdentity)
const publisherIdentityProvider = PublisherIdentityFamily._();
final class PublisherIdentityProvider
extends
$FunctionalProvider<
AsyncValue<SnPublisherMember?>,
SnPublisherMember?,
FutureOr<SnPublisherMember?>
>
with
$FutureModifier<SnPublisherMember?>,
$FutureProvider<SnPublisherMember?> {
const PublisherIdentityProvider._({
required PublisherIdentityFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherIdentityProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherHeatmapProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String? uname;
@override
Override overrideWith(
FutureOr<SnHeatmap?> Function(PublisherHeatmapRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherHeatmapProvider._internal(
(ref) => create(ref as PublisherHeatmapRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$publisherIdentityHash();
@override
String toString() {
return r'publisherIdentityProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnHeatmap?> createElement() {
return _PublisherHeatmapProviderElement(this);
$FutureProviderElement<SnPublisherMember?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublisherMember?> create(Ref ref) {
final argument = this.argument as String;
return publisherIdentity(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherHeatmapProvider && other.uname == uname;
return other is PublisherIdentityProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherHeatmapRef on AutoDisposeFutureProviderRef<SnHeatmap?> {
/// The parameter `uname` of this provider.
String? get uname;
}
class _PublisherHeatmapProviderElement
extends AutoDisposeFutureProviderElement<SnHeatmap?>
with PublisherHeatmapRef {
_PublisherHeatmapProviderElement(super.provider);
@override
String? get uname => (origin as PublisherHeatmapProvider).uname;
}
String _$publisherIdentityHash() => r'299372f25fa4b2bf8e11a8ba2d645100fc38e76f';
/// See also [publisherIdentity].
@ProviderFor(publisherIdentity)
const publisherIdentityProvider = PublisherIdentityFamily();
final class PublisherIdentityFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPublisherMember?>, String> {
const PublisherIdentityFamily._()
: super(
retry: null,
name: r'publisherIdentityProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// See also [publisherIdentity].
class PublisherIdentityFamily extends Family<AsyncValue<SnPublisherMember?>> {
/// See also [publisherIdentity].
const PublisherIdentityFamily();
/// See also [publisherIdentity].
PublisherIdentityProvider call(String uname) {
return PublisherIdentityProvider(uname);
}
PublisherIdentityProvider call(String uname) =>
PublisherIdentityProvider._(argument: uname, from: this);
@override
PublisherIdentityProvider getProviderOverride(
covariant PublisherIdentityProvider provider,
) {
return call(provider.uname);
}
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'publisherIdentityProvider';
String toString() => r'publisherIdentityProvider';
}
/// See also [publisherIdentity].
class PublisherIdentityProvider
extends AutoDisposeFutureProvider<SnPublisherMember?> {
/// See also [publisherIdentity].
PublisherIdentityProvider(String uname)
: this._internal(
(ref) => publisherIdentity(ref as PublisherIdentityRef, uname),
from: publisherIdentityProvider,
name: r'publisherIdentityProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherIdentityHash,
dependencies: PublisherIdentityFamily._dependencies,
allTransitiveDependencies:
PublisherIdentityFamily._allTransitiveDependencies,
uname: uname,
@ProviderFor(publisherFeatures)
const publisherFeaturesProvider = PublisherFeaturesFamily._();
final class PublisherFeaturesProvider
extends
$FunctionalProvider<
AsyncValue<Map<String, bool>>,
Map<String, bool>,
FutureOr<Map<String, bool>>
>
with
$FutureModifier<Map<String, bool>>,
$FutureProvider<Map<String, bool>> {
const PublisherFeaturesProvider._({
required PublisherFeaturesFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'publisherFeaturesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherIdentityProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String uname;
@override
Override overrideWith(
FutureOr<SnPublisherMember?> Function(PublisherIdentityRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherIdentityProvider._internal(
(ref) => create(ref as PublisherIdentityRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$publisherFeaturesHash();
@override
String toString() {
return r'publisherFeaturesProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPublisherMember?> createElement() {
return _PublisherIdentityProviderElement(this);
$FutureProviderElement<Map<String, bool>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<Map<String, bool>> create(Ref ref) {
final argument = this.argument as String?;
return publisherFeatures(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherIdentityProvider && other.uname == uname;
return other is PublisherFeaturesProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherIdentityRef on AutoDisposeFutureProviderRef<SnPublisherMember?> {
/// The parameter `uname` of this provider.
String get uname;
}
class _PublisherIdentityProviderElement
extends AutoDisposeFutureProviderElement<SnPublisherMember?>
with PublisherIdentityRef {
_PublisherIdentityProviderElement(super.provider);
@override
String get uname => (origin as PublisherIdentityProvider).uname;
}
String _$publisherFeaturesHash() => r'08bace2d9a3da227ecec0cbf8709e55ee0646ca2';
/// See also [publisherFeatures].
@ProviderFor(publisherFeatures)
const publisherFeaturesProvider = PublisherFeaturesFamily();
/// See also [publisherFeatures].
class PublisherFeaturesFamily extends Family<AsyncValue<Map<String, bool>>> {
/// See also [publisherFeatures].
const PublisherFeaturesFamily();
/// See also [publisherFeatures].
PublisherFeaturesProvider call(String? uname) {
return PublisherFeaturesProvider(uname);
}
@override
PublisherFeaturesProvider getProviderOverride(
covariant PublisherFeaturesProvider provider,
) {
return call(provider.uname);
}
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'publisherFeaturesProvider';
}
/// See also [publisherFeatures].
class PublisherFeaturesProvider
extends AutoDisposeFutureProvider<Map<String, bool>> {
/// See also [publisherFeatures].
PublisherFeaturesProvider(String? uname)
: this._internal(
(ref) => publisherFeatures(ref as PublisherFeaturesRef, uname),
from: publisherFeaturesProvider,
final class PublisherFeaturesFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<Map<String, bool>>, String?> {
const PublisherFeaturesFamily._()
: super(
retry: null,
name: r'publisherFeaturesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherFeaturesHash,
dependencies: PublisherFeaturesFamily._dependencies,
allTransitiveDependencies:
PublisherFeaturesFamily._allTransitiveDependencies,
uname: uname,
);
PublisherFeaturesProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String? uname;
@override
Override overrideWith(
FutureOr<Map<String, bool>> Function(PublisherFeaturesRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherFeaturesProvider._internal(
(ref) => create(ref as PublisherFeaturesRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
PublisherFeaturesProvider call(String? uname) =>
PublisherFeaturesProvider._(argument: uname, from: this);
@override
AutoDisposeFutureProviderElement<Map<String, bool>> createElement() {
return _PublisherFeaturesProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PublisherFeaturesProvider && other.uname == uname;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'publisherFeaturesProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherFeaturesRef on AutoDisposeFutureProviderRef<Map<String, bool>> {
/// The parameter `uname` of this provider.
String? get uname;
}
@ProviderFor(publisherInvites)
const publisherInvitesProvider = PublisherInvitesProvider._();
class _PublisherFeaturesProviderElement
extends AutoDisposeFutureProviderElement<Map<String, bool>>
with PublisherFeaturesRef {
_PublisherFeaturesProviderElement(super.provider);
final class PublisherInvitesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnPublisherMember>>,
List<SnPublisherMember>,
FutureOr<List<SnPublisherMember>>
>
with
$FutureModifier<List<SnPublisherMember>>,
$FutureProvider<List<SnPublisherMember>> {
const PublisherInvitesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'publisherInvitesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String? get uname => (origin as PublisherFeaturesProvider).uname;
String debugGetCreateSourceHash() => _$publisherInvitesHash();
@$internal
@override
$FutureProviderElement<List<SnPublisherMember>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnPublisherMember>> create(Ref ref) {
return publisherInvites(ref);
}
}
String _$publisherInvitesHash() => r'93aafc2f02af0a7a055ec1770b3999363dfaabdc';
/// See also [publisherInvites].
@ProviderFor(publisherInvites)
final publisherInvitesProvider =
AutoDisposeFutureProvider<List<SnPublisherMember>>.internal(
publisherInvites,
name: r'publisherInvitesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherInvitesHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef PublisherInvitesRef =
AutoDisposeFutureProviderRef<List<SnPublisherMember>>;
String _$publisherMemberListNotifierHash() =>
r'b4afd5d591a6f3d29f1b45fb1b6d17cb34f3f11b';
abstract class _$PublisherMemberListNotifier
extends
BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnPublisherMember>> {
late final String uname;
FutureOr<CursorPagingData<SnPublisherMember>> build(String uname);
}
/// See also [PublisherMemberListNotifier].
@ProviderFor(PublisherMemberListNotifier)
const publisherMemberListNotifierProvider = PublisherMemberListNotifierFamily();
/// See also [PublisherMemberListNotifier].
class PublisherMemberListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnPublisherMember>>> {
/// See also [PublisherMemberListNotifier].
const PublisherMemberListNotifierFamily();
/// See also [PublisherMemberListNotifier].
PublisherMemberListNotifierProvider call(String uname) {
return PublisherMemberListNotifierProvider(uname);
}
@override
PublisherMemberListNotifierProvider getProviderOverride(
covariant PublisherMemberListNotifierProvider provider,
) {
return call(provider.uname);
}
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'publisherMemberListNotifierProvider';
}
/// See also [PublisherMemberListNotifier].
class PublisherMemberListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
PublisherMemberListNotifier,
CursorPagingData<SnPublisherMember>
> {
/// See also [PublisherMemberListNotifier].
PublisherMemberListNotifierProvider(String uname)
: this._internal(
() => PublisherMemberListNotifier()..uname = uname,
from: publisherMemberListNotifierProvider,
name: r'publisherMemberListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherMemberListNotifierHash,
dependencies: PublisherMemberListNotifierFamily._dependencies,
allTransitiveDependencies:
PublisherMemberListNotifierFamily._allTransitiveDependencies,
uname: uname,
);
PublisherMemberListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String uname;
@override
FutureOr<CursorPagingData<SnPublisherMember>> runNotifierBuild(
covariant PublisherMemberListNotifier notifier,
) {
return notifier.build(uname);
}
@override
Override overrideWith(PublisherMemberListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: PublisherMemberListNotifierProvider._internal(
() => create()..uname = uname,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
PublisherMemberListNotifier,
CursorPagingData<SnPublisherMember>
>
createElement() {
return _PublisherMemberListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PublisherMemberListNotifierProvider && other.uname == uname;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherMemberListNotifierRef
on
AutoDisposeAsyncNotifierProviderRef<
CursorPagingData<SnPublisherMember>
> {
/// The parameter `uname` of this provider.
String get uname;
}
class _PublisherMemberListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
PublisherMemberListNotifier,
CursorPagingData<SnPublisherMember>
>
with PublisherMemberListNotifierRef {
_PublisherMemberListNotifierProviderElement(super.provider);
@override
String get uname => (origin as PublisherMemberListNotifierProvider).uname;
}
// 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

View File

@@ -4,60 +4,53 @@ import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/poll.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/screens/poll/poll_editor.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:island/widgets/poll/poll_feedback.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:island/widgets/extended_refresh_indicator.dart';
import 'package:styled_widget/styled_widget.dart';
part 'poll_list.g.dart';
@riverpod
class PollListNotifier extends _$PollListNotifier
with CursorPagingNotifierMixin<SnPollWithStats> {
static const int _pageSize = 20;
final pollListNotifierProvider = AsyncNotifierProvider.family.autoDispose(
PollListNotifier.new,
);
class PollListNotifier extends AsyncNotifier<List<SnPollWithStats>>
with AsyncPaginationController<SnPollWithStats> {
static const int pageSize = 20;
final String? arg;
PollListNotifier(this.arg);
@override
Future<CursorPagingData<SnPollWithStats>> build(String? pubName) {
// immediately load first page
return fetch(cursor: null);
}
@override
Future<CursorPagingData<SnPollWithStats>> fetch({
required String? cursor,
}) async {
Future<List<SnPollWithStats>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
// read the current family argument passed to provider
final currentPub = pubName;
final queryParams = {
'offset': offset,
'take': _pageSize,
if (currentPub != null) 'pub': currentPub,
'offset': fetchedCount.toString(),
'take': pageSize,
if (arg != null) 'pub': arg,
};
final response = await client.get(
'/sphere/polls/me',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final items = data.map((json) => SnPollWithStats.fromJson(json)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final items =
response.data
.map((json) => SnPollWithStats.fromJson(json))
.cast<SnPollWithStats>()
.toList();
final hasMore = offset + items.length < total;
final nextCursor = hasMore ? (offset + items.length).toString() : null;
return CursorPagingData(
items: items,
hasMore: hasMore,
nextCursor: nextCursor,
);
return items;
}
}
@@ -97,20 +90,11 @@ class CreatorPollListScreen extends HookConsumerWidget {
),
body: ExtendedRefreshIndicator(
onRefresh: () => ref.refresh(pollListNotifierProvider(pubName).future),
child: CustomScrollView(
slivers: [
PagingHelperSliverView(
child: PaginationList(
provider: pollListNotifierProvider(pubName),
futureRefreshable: pollListNotifierProvider(pubName).future,
notifierRefreshable: pollListNotifierProvider(pubName).notifier,
contentBuilder:
(data, widgetCount, endItemView) => SliverList.builder(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final pollWithStats = data.items[index];
notifier: pollListNotifierProvider(pubName).notifier,
padding: const EdgeInsets.only(top: 12),
itemBuilder: (context, index, pollWithStats) {
return ConstrainedBox(
constraints: BoxConstraints(maxWidth: 640),
child: _CreatorPollItem(
@@ -121,9 +105,6 @@ class CreatorPollListScreen extends HookConsumerWidget {
},
),
),
],
),
),
);
}
}

View File

@@ -6,296 +6,80 @@ part of 'poll_list.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(pollWithStats)
const pollWithStatsProvider = PollWithStatsFamily._();
final class PollWithStatsProvider
extends
$FunctionalProvider<
AsyncValue<SnPollWithStats>,
SnPollWithStats,
FutureOr<SnPollWithStats>
>
with $FutureModifier<SnPollWithStats>, $FutureProvider<SnPollWithStats> {
const PollWithStatsProvider._({
required PollWithStatsFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'pollWithStatsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$pollWithStatsHash();
@override
String toString() {
return r'pollWithStatsProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnPollWithStats> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPollWithStats> create(Ref ref) {
final argument = this.argument as String;
return pollWithStats(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PollWithStatsProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$pollWithStatsHash() => r'6bb910046ce1e09368f9922dbec52fdc2cc86740';
/// 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 [pollWithStats].
@ProviderFor(pollWithStats)
const pollWithStatsProvider = PollWithStatsFamily();
/// See also [pollWithStats].
class PollWithStatsFamily extends Family<AsyncValue<SnPollWithStats>> {
/// See also [pollWithStats].
const PollWithStatsFamily();
/// See also [pollWithStats].
PollWithStatsProvider call(String id) {
return PollWithStatsProvider(id);
}
@override
PollWithStatsProvider getProviderOverride(
covariant PollWithStatsProvider provider,
) {
return call(provider.id);
}
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'pollWithStatsProvider';
}
/// See also [pollWithStats].
class PollWithStatsProvider extends AutoDisposeFutureProvider<SnPollWithStats> {
/// See also [pollWithStats].
PollWithStatsProvider(String id)
: this._internal(
(ref) => pollWithStats(ref as PollWithStatsRef, id),
from: pollWithStatsProvider,
final class PollWithStatsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPollWithStats>, String> {
const PollWithStatsFamily._()
: super(
retry: null,
name: r'pollWithStatsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$pollWithStatsHash,
dependencies: PollWithStatsFamily._dependencies,
allTransitiveDependencies:
PollWithStatsFamily._allTransitiveDependencies,
id: id,
);
PollWithStatsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.id,
}) : super.internal();
final String id;
@override
Override overrideWith(
FutureOr<SnPollWithStats> Function(PollWithStatsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PollWithStatsProvider._internal(
(ref) => create(ref as PollWithStatsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
id: id,
),
);
}
@override
AutoDisposeFutureProviderElement<SnPollWithStats> createElement() {
return _PollWithStatsProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PollWithStatsProvider && other.id == id;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, id.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PollWithStatsRef on AutoDisposeFutureProviderRef<SnPollWithStats> {
/// The parameter `id` of this provider.
String get id;
}
class _PollWithStatsProviderElement
extends AutoDisposeFutureProviderElement<SnPollWithStats>
with PollWithStatsRef {
_PollWithStatsProviderElement(super.provider);
@override
String get id => (origin as PollWithStatsProvider).id;
}
String _$pollListNotifierHash() => r'd5b822e737788be8982f5cb3b501d460441930c1';
abstract class _$PollListNotifier
extends
BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnPollWithStats>> {
late final String? pubName;
FutureOr<CursorPagingData<SnPollWithStats>> build(String? pubName);
}
/// See also [PollListNotifier].
@ProviderFor(PollListNotifier)
const pollListNotifierProvider = PollListNotifierFamily();
/// See also [PollListNotifier].
class PollListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnPollWithStats>>> {
/// See also [PollListNotifier].
const PollListNotifierFamily();
/// See also [PollListNotifier].
PollListNotifierProvider call(String? pubName) {
return PollListNotifierProvider(pubName);
}
@override
PollListNotifierProvider getProviderOverride(
covariant PollListNotifierProvider provider,
) {
return call(provider.pubName);
}
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'pollListNotifierProvider';
}
/// See also [PollListNotifier].
class PollListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
PollListNotifier,
CursorPagingData<SnPollWithStats>
> {
/// See also [PollListNotifier].
PollListNotifierProvider(String? pubName)
: this._internal(
() => PollListNotifier()..pubName = pubName,
from: pollListNotifierProvider,
name: r'pollListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$pollListNotifierHash,
dependencies: PollListNotifierFamily._dependencies,
allTransitiveDependencies:
PollListNotifierFamily._allTransitiveDependencies,
pubName: pubName,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PollListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String? pubName;
PollWithStatsProvider call(String id) =>
PollWithStatsProvider._(argument: id, from: this);
@override
FutureOr<CursorPagingData<SnPollWithStats>> runNotifierBuild(
covariant PollListNotifier notifier,
) {
return notifier.build(pubName);
}
@override
Override overrideWith(PollListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: PollListNotifierProvider._internal(
() => create()..pubName = pubName,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
PollListNotifier,
CursorPagingData<SnPollWithStats>
>
createElement() {
return _PollListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PollListNotifierProvider && other.pubName == pubName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'pollWithStatsProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PollListNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnPollWithStats>> {
/// The parameter `pubName` of this provider.
String? get pubName;
}
class _PollListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
PollListNotifier,
CursorPagingData<SnPollWithStats>
>
with PollListNotifierRef {
_PollListNotifierProviderElement(super.provider);
@override
String? get pubName => (origin as PollListNotifierProvider).pubName;
}
// 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

View File

@@ -6,163 +6,121 @@ part of 'publishers_form.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(publishersManaged)
const publishersManagedProvider = PublishersManagedProvider._();
final class PublishersManagedProvider
extends
$FunctionalProvider<
AsyncValue<List<SnPublisher>>,
List<SnPublisher>,
FutureOr<List<SnPublisher>>
>
with
$FutureModifier<List<SnPublisher>>,
$FutureProvider<List<SnPublisher>> {
const PublishersManagedProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'publishersManagedProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$publishersManagedHash();
@$internal
@override
$FutureProviderElement<List<SnPublisher>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnPublisher>> create(Ref ref) {
return publishersManaged(ref);
}
}
String _$publishersManagedHash() => r'ea83759fed9bd5119738b4d09f12b4476959e0a3';
/// See also [publishersManaged].
@ProviderFor(publishersManaged)
final publishersManagedProvider =
AutoDisposeFutureProvider<List<SnPublisher>>.internal(
publishersManaged,
name: r'publishersManagedProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publishersManagedHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef PublishersManagedRef = AutoDisposeFutureProviderRef<List<SnPublisher>>;
String _$publisherHash() => r'18fb5c6b3d79dd8af4fbee108dec1a0e8a034038';
/// 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 [publisher].
@ProviderFor(publisher)
const publisherProvider = PublisherFamily();
const publisherProvider = PublisherFamily._();
/// See also [publisher].
class PublisherFamily extends Family<AsyncValue<SnPublisher?>> {
/// See also [publisher].
const PublisherFamily();
/// See also [publisher].
PublisherProvider call(String? identifier) {
return PublisherProvider(identifier);
}
@override
PublisherProvider getProviderOverride(covariant PublisherProvider provider) {
return call(provider.identifier);
}
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'publisherProvider';
}
/// See also [publisher].
class PublisherProvider extends AutoDisposeFutureProvider<SnPublisher?> {
/// See also [publisher].
PublisherProvider(String? identifier)
: this._internal(
(ref) => publisher(ref as PublisherRef, identifier),
from: publisherProvider,
final class PublisherProvider
extends
$FunctionalProvider<
AsyncValue<SnPublisher?>,
SnPublisher?,
FutureOr<SnPublisher?>
>
with $FutureModifier<SnPublisher?>, $FutureProvider<SnPublisher?> {
const PublisherProvider._({
required PublisherFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'publisherProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherHash,
dependencies: PublisherFamily._dependencies,
allTransitiveDependencies: PublisherFamily._allTransitiveDependencies,
identifier: identifier,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.identifier,
}) : super.internal();
final String? identifier;
@override
Override overrideWith(
FutureOr<SnPublisher?> Function(PublisherRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherProvider._internal(
(ref) => create(ref as PublisherRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
identifier: identifier,
),
);
String debugGetCreateSourceHash() => _$publisherHash();
@override
String toString() {
return r'publisherProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPublisher?> createElement() {
return _PublisherProviderElement(this);
$FutureProviderElement<SnPublisher?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublisher?> create(Ref ref) {
final argument = this.argument as String?;
return publisher(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherProvider && other.identifier == identifier;
return other is PublisherProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, identifier.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherRef on AutoDisposeFutureProviderRef<SnPublisher?> {
/// The parameter `identifier` of this provider.
String? get identifier;
}
String _$publisherHash() => r'18fb5c6b3d79dd8af4fbee108dec1a0e8a034038';
class _PublisherProviderElement
extends AutoDisposeFutureProviderElement<SnPublisher?>
with PublisherRef {
_PublisherProviderElement(super.provider);
final class PublisherFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPublisher?>, String?> {
const PublisherFamily._()
: super(
retry: null,
name: r'publisherProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PublisherProvider call(String? identifier) =>
PublisherProvider._(argument: identifier, from: this);
@override
String? get identifier => (origin as PublisherProvider).identifier;
String toString() => r'publisherProvider';
}
// 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

View File

@@ -6,168 +6,90 @@ part of 'site_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$publicationSiteDetailHash() =>
r'e5d259ea39c4ba47e92d37e644fc3d84984927a9';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [publicationSiteDetail].
@ProviderFor(publicationSiteDetail)
const publicationSiteDetailProvider = PublicationSiteDetailFamily();
const publicationSiteDetailProvider = PublicationSiteDetailFamily._();
/// See also [publicationSiteDetail].
class PublicationSiteDetailFamily
extends Family<AsyncValue<SnPublicationSite>> {
/// See also [publicationSiteDetail].
const PublicationSiteDetailFamily();
/// See also [publicationSiteDetail].
PublicationSiteDetailProvider call(String pubName, String siteSlug) {
return PublicationSiteDetailProvider(pubName, siteSlug);
}
@override
PublicationSiteDetailProvider getProviderOverride(
covariant PublicationSiteDetailProvider 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'publicationSiteDetailProvider';
}
/// See also [publicationSiteDetail].
class PublicationSiteDetailProvider
extends AutoDisposeFutureProvider<SnPublicationSite> {
/// See also [publicationSiteDetail].
PublicationSiteDetailProvider(String pubName, String siteSlug)
: this._internal(
(ref) => publicationSiteDetail(
ref as PublicationSiteDetailRef,
pubName,
siteSlug,
),
from: publicationSiteDetailProvider,
final class PublicationSiteDetailProvider
extends
$FunctionalProvider<
AsyncValue<SnPublicationSite>,
SnPublicationSite,
FutureOr<SnPublicationSite>
>
with
$FutureModifier<SnPublicationSite>,
$FutureProvider<SnPublicationSite> {
const PublicationSiteDetailProvider._({
required PublicationSiteDetailFamily super.from,
required (String, String) super.argument,
}) : super(
retry: null,
name: r'publicationSiteDetailProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publicationSiteDetailHash,
dependencies: PublicationSiteDetailFamily._dependencies,
allTransitiveDependencies:
PublicationSiteDetailFamily._allTransitiveDependencies,
pubName: pubName,
siteSlug: siteSlug,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublicationSiteDetailProvider._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<SnPublicationSite> Function(PublicationSiteDetailRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: PublicationSiteDetailProvider._internal(
(ref) => create(ref as PublicationSiteDetailRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
siteSlug: siteSlug,
),
);
String debugGetCreateSourceHash() => _$publicationSiteDetailHash();
@override
String toString() {
return r'publicationSiteDetailProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPublicationSite> createElement() {
return _PublicationSiteDetailProviderElement(this);
$FutureProviderElement<SnPublicationSite> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublicationSite> create(Ref ref) {
final argument = this.argument as (String, String);
return publicationSiteDetail(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is PublicationSiteDetailProvider &&
other.pubName == pubName &&
other.siteSlug == siteSlug;
return other is PublicationSiteDetailProvider && other.argument == argument;
}
@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);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublicationSiteDetailRef
on AutoDisposeFutureProviderRef<SnPublicationSite> {
/// The parameter `pubName` of this provider.
String get pubName;
String _$publicationSiteDetailHash() =>
r'e5d259ea39c4ba47e92d37e644fc3d84984927a9';
/// The parameter `siteSlug` of this provider.
String get siteSlug;
}
final class PublicationSiteDetailFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<SnPublicationSite>,
(String, String)
> {
const PublicationSiteDetailFamily._()
: super(
retry: null,
name: r'publicationSiteDetailProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
class _PublicationSiteDetailProviderElement
extends AutoDisposeFutureProviderElement<SnPublicationSite>
with PublicationSiteDetailRef {
_PublicationSiteDetailProviderElement(super.provider);
PublicationSiteDetailProvider call(String pubName, String siteSlug) =>
PublicationSiteDetailProvider._(
argument: (pubName, siteSlug),
from: this,
);
@override
String get pubName => (origin as PublicationSiteDetailProvider).pubName;
@override
String get siteSlug => (origin as PublicationSiteDetailProvider).siteSlug;
String toString() => r'publicationSiteDetailProvider';
}
// 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

View File

@@ -6,54 +6,45 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/publication_site.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/screens/creators/sites/site_edit.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:island/widgets/extended_refresh_indicator.dart';
import 'package:styled_widget/styled_widget.dart';
part 'site_list.g.dart';
final siteListNotifierProvider = AsyncNotifierProvider.family.autoDispose(
SiteListNotifier.new,
);
@riverpod
class SiteListNotifier extends _$SiteListNotifier
with CursorPagingNotifierMixin<SnPublicationSite> {
static const int _pageSize = 20;
class SiteListNotifier extends AsyncNotifier<List<SnPublicationSite>>
with AsyncPaginationController<SnPublicationSite> {
static const int pageSize = 20;
final String arg;
SiteListNotifier(this.arg);
@override
Future<CursorPagingData<SnPublicationSite>> build(String? pubName) {
// immediately load first page
return fetch(cursor: null);
}
@override
Future<CursorPagingData<SnPublicationSite>> fetch({
required String? cursor,
}) async {
Future<List<SnPublicationSite>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
// read the current family argument passed to provider
final queryParams = {'offset': offset, 'take': _pageSize};
final queryParams = {'offset': fetchedCount.toString(), 'take': pageSize};
final response = await client.get(
'/zone/sites/$pubName',
'/zone/sites/$arg',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final items = data.map((json) => SnPublicationSite.fromJson(json)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final items =
response.data
.map((json) => SnPublicationSite.fromJson(json))
.cast<SnPublicationSite>()
.toList();
final hasMore = offset + items.length < total;
final nextCursor = hasMore ? (offset + items.length).toString() : null;
return CursorPagingData(
items: items,
hasMore: hasMore,
nextCursor: nextCursor,
);
return items;
}
}
@@ -84,25 +75,16 @@ class CreatorSiteListScreen extends HookConsumerWidget {
child: CustomScrollView(
slivers: [
const SliverGap(8),
PagingHelperSliverView(
PaginationList(
provider: siteListNotifierProvider(pubName),
futureRefreshable: siteListNotifierProvider(pubName).future,
notifierRefreshable: siteListNotifierProvider(pubName).notifier,
contentBuilder:
(data, widgetCount, endItemView) => SliverList.builder(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final site = data.items[index];
notifier: siteListNotifierProvider(pubName).notifier,
itemBuilder: (context, index, site) {
return ConstrainedBox(
constraints: BoxConstraints(maxWidth: 640),
child: _CreatorSiteItem(site: site, pubName: pubName),
).center();
},
),
),
],
),
),

View File

@@ -1,183 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'site_list.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$siteListNotifierHash() => r'1670cadcc0c7ccbd98bc33bbf5b4af21e9cb166c';
/// 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));
}
}
abstract class _$SiteListNotifier
extends
BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnPublicationSite>> {
late final String? pubName;
FutureOr<CursorPagingData<SnPublicationSite>> build(String? pubName);
}
/// See also [SiteListNotifier].
@ProviderFor(SiteListNotifier)
const siteListNotifierProvider = SiteListNotifierFamily();
/// See also [SiteListNotifier].
class SiteListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnPublicationSite>>> {
/// See also [SiteListNotifier].
const SiteListNotifierFamily();
/// See also [SiteListNotifier].
SiteListNotifierProvider call(String? pubName) {
return SiteListNotifierProvider(pubName);
}
@override
SiteListNotifierProvider getProviderOverride(
covariant SiteListNotifierProvider provider,
) {
return call(provider.pubName);
}
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'siteListNotifierProvider';
}
/// See also [SiteListNotifier].
class SiteListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
SiteListNotifier,
CursorPagingData<SnPublicationSite>
> {
/// See also [SiteListNotifier].
SiteListNotifierProvider(String? pubName)
: this._internal(
() => SiteListNotifier()..pubName = pubName,
from: siteListNotifierProvider,
name: r'siteListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$siteListNotifierHash,
dependencies: SiteListNotifierFamily._dependencies,
allTransitiveDependencies:
SiteListNotifierFamily._allTransitiveDependencies,
pubName: pubName,
);
SiteListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String? pubName;
@override
FutureOr<CursorPagingData<SnPublicationSite>> runNotifierBuild(
covariant SiteListNotifier notifier,
) {
return notifier.build(pubName);
}
@override
Override overrideWith(SiteListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: SiteListNotifierProvider._internal(
() => create()..pubName = pubName,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
SiteListNotifier,
CursorPagingData<SnPublicationSite>
>
createElement() {
return _SiteListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is SiteListNotifierProvider && other.pubName == pubName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin SiteListNotifierRef
on
AutoDisposeAsyncNotifierProviderRef<
CursorPagingData<SnPublicationSite>
> {
/// The parameter `pubName` of this provider.
String? get pubName;
}
class _SiteListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
SiteListNotifier,
CursorPagingData<SnPublicationSite>
>
with SiteListNotifierRef {
_SiteListNotifierProviderElement(super.provider);
@override
String? get pubName => (origin as SiteListNotifierProvider).pubName;
}
// 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

View File

@@ -293,7 +293,7 @@ class StickerPackActionMenu extends HookConsumerWidget {
if (confirm) {
final client = ref.watch(apiClientProvider);
client.delete('/sphere/stickers/$packId');
ref.invalidate(stickerPacksNotifierProvider);
ref.invalidate(stickerPacksProvider);
if (context.mounted) context.pop(true);
}
});

View File

@@ -6,272 +6,157 @@ part of 'pack_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$stickerPackContentHash() =>
r'42d74f51022e67e35cb601c2f30f4f02e1f2be9d';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [stickerPackContent].
@ProviderFor(stickerPackContent)
const stickerPackContentProvider = StickerPackContentFamily();
const stickerPackContentProvider = StickerPackContentFamily._();
/// See also [stickerPackContent].
class StickerPackContentFamily extends Family<AsyncValue<List<SnSticker>>> {
/// See also [stickerPackContent].
const StickerPackContentFamily();
/// See also [stickerPackContent].
StickerPackContentProvider call(String packId) {
return StickerPackContentProvider(packId);
}
@override
StickerPackContentProvider getProviderOverride(
covariant StickerPackContentProvider provider,
) {
return call(provider.packId);
}
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'stickerPackContentProvider';
}
/// See also [stickerPackContent].
class StickerPackContentProvider
extends AutoDisposeFutureProvider<List<SnSticker>> {
/// See also [stickerPackContent].
StickerPackContentProvider(String packId)
: this._internal(
(ref) => stickerPackContent(ref as StickerPackContentRef, packId),
from: stickerPackContentProvider,
final class StickerPackContentProvider
extends
$FunctionalProvider<
AsyncValue<List<SnSticker>>,
List<SnSticker>,
FutureOr<List<SnSticker>>
>
with $FutureModifier<List<SnSticker>>, $FutureProvider<List<SnSticker>> {
const StickerPackContentProvider._({
required StickerPackContentFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'stickerPackContentProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$stickerPackContentHash,
dependencies: StickerPackContentFamily._dependencies,
allTransitiveDependencies:
StickerPackContentFamily._allTransitiveDependencies,
packId: packId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
StickerPackContentProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.packId,
}) : super.internal();
final String packId;
@override
Override overrideWith(
FutureOr<List<SnSticker>> Function(StickerPackContentRef provider) create,
) {
return ProviderOverride(
origin: this,
override: StickerPackContentProvider._internal(
(ref) => create(ref as StickerPackContentRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
packId: packId,
),
);
String debugGetCreateSourceHash() => _$stickerPackContentHash();
@override
String toString() {
return r'stickerPackContentProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnSticker>> createElement() {
return _StickerPackContentProviderElement(this);
$FutureProviderElement<List<SnSticker>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnSticker>> create(Ref ref) {
final argument = this.argument as String;
return stickerPackContent(ref, argument);
}
@override
bool operator ==(Object other) {
return other is StickerPackContentProvider && other.packId == packId;
return other is StickerPackContentProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, packId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin StickerPackContentRef on AutoDisposeFutureProviderRef<List<SnSticker>> {
/// The parameter `packId` of this provider.
String get packId;
}
String _$stickerPackContentHash() =>
r'42d74f51022e67e35cb601c2f30f4f02e1f2be9d';
class _StickerPackContentProviderElement
extends AutoDisposeFutureProviderElement<List<SnSticker>>
with StickerPackContentRef {
_StickerPackContentProviderElement(super.provider);
final class StickerPackContentFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<SnSticker>>, String> {
const StickerPackContentFamily._()
: super(
retry: null,
name: r'stickerPackContentProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
StickerPackContentProvider call(String packId) =>
StickerPackContentProvider._(argument: packId, from: this);
@override
String get packId => (origin as StickerPackContentProvider).packId;
String toString() => r'stickerPackContentProvider';
}
@ProviderFor(stickerPackSticker)
const stickerPackStickerProvider = StickerPackStickerFamily._();
final class StickerPackStickerProvider
extends
$FunctionalProvider<
AsyncValue<SnSticker?>,
SnSticker?,
FutureOr<SnSticker?>
>
with $FutureModifier<SnSticker?>, $FutureProvider<SnSticker?> {
const StickerPackStickerProvider._({
required StickerPackStickerFamily super.from,
required StickerWithPackQuery? super.argument,
}) : super(
retry: null,
name: r'stickerPackStickerProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$stickerPackStickerHash();
@override
String toString() {
return r'stickerPackStickerProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnSticker?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnSticker?> create(Ref ref) {
final argument = this.argument as StickerWithPackQuery?;
return stickerPackSticker(ref, argument);
}
@override
bool operator ==(Object other) {
return other is StickerPackStickerProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$stickerPackStickerHash() =>
r'5c553666b3a63530bdebae4b7cd52f303c5ab3a0';
/// See also [stickerPackSticker].
@ProviderFor(stickerPackSticker)
const stickerPackStickerProvider = StickerPackStickerFamily();
/// See also [stickerPackSticker].
class StickerPackStickerFamily extends Family<AsyncValue<SnSticker?>> {
/// See also [stickerPackSticker].
const StickerPackStickerFamily();
/// See also [stickerPackSticker].
StickerPackStickerProvider call(StickerWithPackQuery? query) {
return StickerPackStickerProvider(query);
}
@override
StickerPackStickerProvider getProviderOverride(
covariant StickerPackStickerProvider provider,
) {
return call(provider.query);
}
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'stickerPackStickerProvider';
}
/// See also [stickerPackSticker].
class StickerPackStickerProvider extends AutoDisposeFutureProvider<SnSticker?> {
/// See also [stickerPackSticker].
StickerPackStickerProvider(StickerWithPackQuery? query)
: this._internal(
(ref) => stickerPackSticker(ref as StickerPackStickerRef, query),
from: stickerPackStickerProvider,
final class StickerPackStickerFamily extends $Family
with
$FunctionalFamilyOverride<FutureOr<SnSticker?>, StickerWithPackQuery?> {
const StickerPackStickerFamily._()
: super(
retry: null,
name: r'stickerPackStickerProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$stickerPackStickerHash,
dependencies: StickerPackStickerFamily._dependencies,
allTransitiveDependencies:
StickerPackStickerFamily._allTransitiveDependencies,
query: query,
);
StickerPackStickerProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.query,
}) : super.internal();
final StickerWithPackQuery? query;
@override
Override overrideWith(
FutureOr<SnSticker?> Function(StickerPackStickerRef provider) create,
) {
return ProviderOverride(
origin: this,
override: StickerPackStickerProvider._internal(
(ref) => create(ref as StickerPackStickerRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
query: query,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
StickerPackStickerProvider call(StickerWithPackQuery? query) =>
StickerPackStickerProvider._(argument: query, from: this);
@override
AutoDisposeFutureProviderElement<SnSticker?> createElement() {
return _StickerPackStickerProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is StickerPackStickerProvider && other.query == query;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, query.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'stickerPackStickerProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin StickerPackStickerRef on AutoDisposeFutureProviderRef<SnSticker?> {
/// The parameter `query` of this provider.
StickerWithPackQuery? get query;
}
class _StickerPackStickerProviderElement
extends AutoDisposeFutureProviderElement<SnSticker?>
with StickerPackStickerRef {
_StickerPackStickerProviderElement(super.provider);
@override
StickerWithPackQuery? get query =>
(origin as StickerPackStickerProvider).query;
}
// 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

View File

@@ -7,6 +7,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/file.dart';
import 'package:island/models/sticker.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/services/responsive.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
@@ -14,10 +15,10 @@ import 'package:island/widgets/content/cloud_file_picker.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/sheet.dart';
import 'package:island/screens/creators/stickers/pack_detail.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
part 'stickers.g.dart';
@@ -47,7 +48,7 @@ class StickersScreen extends HookConsumerWidget {
),
).then((value) {
if (value != null) {
ref.invalidate(stickerPacksNotifierProvider(pubName));
ref.invalidate(stickerPacksProvider(pubName));
}
});
},
@@ -81,20 +82,10 @@ class SliverStickerPacksList extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return PagingHelperView(
provider: stickerPacksNotifierProvider(pubName),
futureRefreshable: stickerPacksNotifierProvider(pubName).future,
notifierRefreshable: stickerPacksNotifierProvider(pubName).notifier,
contentBuilder:
(data, widgetCount, endItemView) => ListView.builder(
padding: EdgeInsets.zero,
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final sticker = data.items[index];
return PaginationList(
provider: stickerPacksProvider(pubName),
notifier: stickerPacksProvider(pubName).notifier,
itemBuilder: (context, index, sticker) {
return ListTile(
shape: RoundedRectangleBorder(
borderRadius: const BorderRadius.all(Radius.circular(8)),
@@ -124,9 +115,7 @@ class SliverStickerPacksList extends HookConsumerWidget {
),
).then((value) {
if (value != null) {
ref.invalidate(
stickerPackContentProvider(id),
);
ref.invalidate(stickerPackContentProvider(id));
}
});
},
@@ -146,46 +135,43 @@ class SliverStickerPacksList extends HookConsumerWidget {
},
);
},
),
);
}
}
@riverpod
class StickerPacksNotifier extends _$StickerPacksNotifier
with CursorPagingNotifierMixin<SnStickerPack> {
static const int _pageSize = 20;
final stickerPacksProvider = AsyncNotifierProvider.family.autoDispose(
StickerPacksNotifier.new,
);
class StickerPacksNotifier extends AsyncNotifier<List<SnStickerPack>>
with AsyncPaginationController<SnStickerPack> {
static const int pageSize = 20;
final String arg;
StickerPacksNotifier(this.arg);
@override
Future<CursorPagingData<SnStickerPack>> build(String pubName) {
return fetch(cursor: null);
}
@override
Future<CursorPagingData<SnStickerPack>> fetch({
required String? cursor,
}) async {
Future<List<SnStickerPack>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
try {
final response = await client.get(
'/sphere/stickers',
queryParameters: {'offset': offset, 'take': _pageSize, 'pub': pubName},
queryParameters: {
'offset': fetchedCount.toString(),
'take': pageSize,
'pub': arg,
},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final stickers = data.map((e) => SnStickerPack.fromJson(e)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final stickers =
response.data
.map((e) => SnStickerPack.fromJson(e))
.cast<SnStickerPack>()
.toList();
final hasMore = offset + stickers.length < total;
final nextCursor = hasMore ? (offset + stickers.length).toString() : null;
return CursorPagingData(
items: stickers,
hasMore: hasMore,
nextCursor: nextCursor,
);
return stickers;
} catch (err) {
rethrow;
}

View File

@@ -6,295 +6,80 @@ part of 'stickers.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(stickerPack)
const stickerPackProvider = StickerPackFamily._();
final class StickerPackProvider
extends
$FunctionalProvider<
AsyncValue<SnStickerPack?>,
SnStickerPack?,
FutureOr<SnStickerPack?>
>
with $FutureModifier<SnStickerPack?>, $FutureProvider<SnStickerPack?> {
const StickerPackProvider._({
required StickerPackFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'stickerPackProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$stickerPackHash();
@override
String toString() {
return r'stickerPackProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnStickerPack?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnStickerPack?> create(Ref ref) {
final argument = this.argument as String?;
return stickerPack(ref, argument);
}
@override
bool operator ==(Object other) {
return other is StickerPackProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$stickerPackHash() => r'71ef84471237c8191918095094bdfc87d3920e77';
/// 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 [stickerPack].
@ProviderFor(stickerPack)
const stickerPackProvider = StickerPackFamily();
/// See also [stickerPack].
class StickerPackFamily extends Family<AsyncValue<SnStickerPack?>> {
/// See also [stickerPack].
const StickerPackFamily();
/// See also [stickerPack].
StickerPackProvider call(String? packId) {
return StickerPackProvider(packId);
}
@override
StickerPackProvider getProviderOverride(
covariant StickerPackProvider provider,
) {
return call(provider.packId);
}
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'stickerPackProvider';
}
/// See also [stickerPack].
class StickerPackProvider extends AutoDisposeFutureProvider<SnStickerPack?> {
/// See also [stickerPack].
StickerPackProvider(String? packId)
: this._internal(
(ref) => stickerPack(ref as StickerPackRef, packId),
from: stickerPackProvider,
final class StickerPackFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnStickerPack?>, String?> {
const StickerPackFamily._()
: super(
retry: null,
name: r'stickerPackProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$stickerPackHash,
dependencies: StickerPackFamily._dependencies,
allTransitiveDependencies: StickerPackFamily._allTransitiveDependencies,
packId: packId,
);
StickerPackProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.packId,
}) : super.internal();
final String? packId;
@override
Override overrideWith(
FutureOr<SnStickerPack?> Function(StickerPackRef provider) create,
) {
return ProviderOverride(
origin: this,
override: StickerPackProvider._internal(
(ref) => create(ref as StickerPackRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
packId: packId,
),
);
}
@override
AutoDisposeFutureProviderElement<SnStickerPack?> createElement() {
return _StickerPackProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is StickerPackProvider && other.packId == packId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, packId.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin StickerPackRef on AutoDisposeFutureProviderRef<SnStickerPack?> {
/// The parameter `packId` of this provider.
String? get packId;
}
class _StickerPackProviderElement
extends AutoDisposeFutureProviderElement<SnStickerPack?>
with StickerPackRef {
_StickerPackProviderElement(super.provider);
@override
String? get packId => (origin as StickerPackProvider).packId;
}
String _$stickerPacksNotifierHash() =>
r'30024b35235f3085a5b1ec2204d0a974ee907e22';
abstract class _$StickerPacksNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnStickerPack>> {
late final String pubName;
FutureOr<CursorPagingData<SnStickerPack>> build(String pubName);
}
/// See also [StickerPacksNotifier].
@ProviderFor(StickerPacksNotifier)
const stickerPacksNotifierProvider = StickerPacksNotifierFamily();
/// See also [StickerPacksNotifier].
class StickerPacksNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnStickerPack>>> {
/// See also [StickerPacksNotifier].
const StickerPacksNotifierFamily();
/// See also [StickerPacksNotifier].
StickerPacksNotifierProvider call(String pubName) {
return StickerPacksNotifierProvider(pubName);
}
@override
StickerPacksNotifierProvider getProviderOverride(
covariant StickerPacksNotifierProvider provider,
) {
return call(provider.pubName);
}
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'stickerPacksNotifierProvider';
}
/// See also [StickerPacksNotifier].
class StickerPacksNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
StickerPacksNotifier,
CursorPagingData<SnStickerPack>
> {
/// See also [StickerPacksNotifier].
StickerPacksNotifierProvider(String pubName)
: this._internal(
() => StickerPacksNotifier()..pubName = pubName,
from: stickerPacksNotifierProvider,
name: r'stickerPacksNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$stickerPacksNotifierHash,
dependencies: StickerPacksNotifierFamily._dependencies,
allTransitiveDependencies:
StickerPacksNotifierFamily._allTransitiveDependencies,
pubName: pubName,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
StickerPacksNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String pubName;
StickerPackProvider call(String? packId) =>
StickerPackProvider._(argument: packId, from: this);
@override
FutureOr<CursorPagingData<SnStickerPack>> runNotifierBuild(
covariant StickerPacksNotifier notifier,
) {
return notifier.build(pubName);
}
@override
Override overrideWith(StickerPacksNotifier Function() create) {
return ProviderOverride(
origin: this,
override: StickerPacksNotifierProvider._internal(
() => create()..pubName = pubName,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
StickerPacksNotifier,
CursorPagingData<SnStickerPack>
>
createElement() {
return _StickerPacksNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is StickerPacksNotifierProvider && other.pubName == pubName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'stickerPackProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin StickerPacksNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnStickerPack>> {
/// The parameter `pubName` of this provider.
String get pubName;
}
class _StickerPacksNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
StickerPacksNotifier,
CursorPagingData<SnStickerPack>
>
with StickerPacksNotifierRef {
_StickerPacksNotifierProviderElement(super.provider);
@override
String get pubName => (origin as StickerPacksNotifierProvider).pubName;
}
// 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

View File

@@ -6,183 +6,92 @@ part of 'app_secrets.dart';
// RiverpodGenerator
// **************************************************************************
String _$customAppSecretsHash() => r'1bc62ad812487883ce739793b22a76168d656752';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [customAppSecrets].
@ProviderFor(customAppSecrets)
const customAppSecretsProvider = CustomAppSecretsFamily();
const customAppSecretsProvider = CustomAppSecretsFamily._();
/// See also [customAppSecrets].
class CustomAppSecretsFamily extends Family<AsyncValue<List<CustomAppSecret>>> {
/// See also [customAppSecrets].
const CustomAppSecretsFamily();
/// See also [customAppSecrets].
CustomAppSecretsProvider call(
String publisherName,
String projectId,
String appId,
) {
return CustomAppSecretsProvider(publisherName, projectId, appId);
}
@override
CustomAppSecretsProvider getProviderOverride(
covariant CustomAppSecretsProvider provider,
) {
return call(provider.publisherName, provider.projectId, provider.appId);
}
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'customAppSecretsProvider';
}
/// See also [customAppSecrets].
class CustomAppSecretsProvider
extends AutoDisposeFutureProvider<List<CustomAppSecret>> {
/// See also [customAppSecrets].
CustomAppSecretsProvider(String publisherName, String projectId, String appId)
: this._internal(
(ref) => customAppSecrets(
ref as CustomAppSecretsRef,
publisherName,
projectId,
appId,
),
from: customAppSecretsProvider,
final class CustomAppSecretsProvider
extends
$FunctionalProvider<
AsyncValue<List<CustomAppSecret>>,
List<CustomAppSecret>,
FutureOr<List<CustomAppSecret>>
>
with
$FutureModifier<List<CustomAppSecret>>,
$FutureProvider<List<CustomAppSecret>> {
const CustomAppSecretsProvider._({
required CustomAppSecretsFamily super.from,
required (String, String, String) super.argument,
}) : super(
retry: null,
name: r'customAppSecretsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$customAppSecretsHash,
dependencies: CustomAppSecretsFamily._dependencies,
allTransitiveDependencies:
CustomAppSecretsFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
appId: appId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
CustomAppSecretsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
required this.appId,
}) : super.internal();
final String publisherName;
final String projectId;
final String appId;
@override
Override overrideWith(
FutureOr<List<CustomAppSecret>> Function(CustomAppSecretsRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: CustomAppSecretsProvider._internal(
(ref) => create(ref as CustomAppSecretsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
appId: appId,
),
);
String debugGetCreateSourceHash() => _$customAppSecretsHash();
@override
String toString() {
return r'customAppSecretsProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<CustomAppSecret>> createElement() {
return _CustomAppSecretsProviderElement(this);
$FutureProviderElement<List<CustomAppSecret>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<CustomAppSecret>> create(Ref ref) {
final argument = this.argument as (String, String, String);
return customAppSecrets(ref, argument.$1, argument.$2, argument.$3);
}
@override
bool operator ==(Object other) {
return other is CustomAppSecretsProvider &&
other.publisherName == publisherName &&
other.projectId == projectId &&
other.appId == appId;
return other is CustomAppSecretsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
hash = _SystemHash.combine(hash, appId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CustomAppSecretsRef
on AutoDisposeFutureProviderRef<List<CustomAppSecret>> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$customAppSecretsHash() => r'1bc62ad812487883ce739793b22a76168d656752';
/// The parameter `projectId` of this provider.
String get projectId;
final class CustomAppSecretsFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<CustomAppSecret>>,
(String, String, String)
> {
const CustomAppSecretsFamily._()
: super(
retry: null,
name: r'customAppSecretsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `appId` of this provider.
String get appId;
CustomAppSecretsProvider call(
String publisherName,
String projectId,
String appId,
) => CustomAppSecretsProvider._(
argument: (publisherName, projectId, appId),
from: this,
);
@override
String toString() => r'customAppSecretsProvider';
}
class _CustomAppSecretsProviderElement
extends AutoDisposeFutureProviderElement<List<CustomAppSecret>>
with CustomAppSecretsRef {
_CustomAppSecretsProviderElement(super.provider);
@override
String get publisherName =>
(origin as CustomAppSecretsProvider).publisherName;
@override
String get projectId => (origin as CustomAppSecretsProvider).projectId;
@override
String get appId => (origin as CustomAppSecretsProvider).appId;
}
// 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

View File

@@ -6,300 +6,165 @@ part of 'apps.dart';
// RiverpodGenerator
// **************************************************************************
String _$customAppHash() => r'be05431ba8bf06fd20ee988a61c3663a68e15fc9';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [customApp].
@ProviderFor(customApp)
const customAppProvider = CustomAppFamily();
const customAppProvider = CustomAppFamily._();
/// See also [customApp].
class CustomAppFamily extends Family<AsyncValue<CustomApp>> {
/// See also [customApp].
const CustomAppFamily();
/// See also [customApp].
CustomAppProvider call(String publisherName, String projectId, String appId) {
return CustomAppProvider(publisherName, projectId, appId);
}
@override
CustomAppProvider getProviderOverride(covariant CustomAppProvider provider) {
return call(provider.publisherName, provider.projectId, provider.appId);
}
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'customAppProvider';
}
/// See also [customApp].
class CustomAppProvider extends AutoDisposeFutureProvider<CustomApp> {
/// See also [customApp].
CustomAppProvider(String publisherName, String projectId, String appId)
: this._internal(
(ref) =>
customApp(ref as CustomAppRef, publisherName, projectId, appId),
from: customAppProvider,
final class CustomAppProvider
extends
$FunctionalProvider<
AsyncValue<CustomApp>,
CustomApp,
FutureOr<CustomApp>
>
with $FutureModifier<CustomApp>, $FutureProvider<CustomApp> {
const CustomAppProvider._({
required CustomAppFamily super.from,
required (String, String, String) super.argument,
}) : super(
retry: null,
name: r'customAppProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$customAppHash,
dependencies: CustomAppFamily._dependencies,
allTransitiveDependencies: CustomAppFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
appId: appId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
CustomAppProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
required this.appId,
}) : super.internal();
final String publisherName;
final String projectId;
final String appId;
@override
Override overrideWith(
FutureOr<CustomApp> Function(CustomAppRef provider) create,
) {
return ProviderOverride(
origin: this,
override: CustomAppProvider._internal(
(ref) => create(ref as CustomAppRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
appId: appId,
),
);
String debugGetCreateSourceHash() => _$customAppHash();
@override
String toString() {
return r'customAppProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<CustomApp> createElement() {
return _CustomAppProviderElement(this);
$FutureProviderElement<CustomApp> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<CustomApp> create(Ref ref) {
final argument = this.argument as (String, String, String);
return customApp(ref, argument.$1, argument.$2, argument.$3);
}
@override
bool operator ==(Object other) {
return other is CustomAppProvider &&
other.publisherName == publisherName &&
other.projectId == projectId &&
other.appId == appId;
return other is CustomAppProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
hash = _SystemHash.combine(hash, appId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CustomAppRef on AutoDisposeFutureProviderRef<CustomApp> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$customAppHash() => r'be05431ba8bf06fd20ee988a61c3663a68e15fc9';
/// The parameter `projectId` of this provider.
String get projectId;
final class CustomAppFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<CustomApp>,
(String, String, String)
> {
const CustomAppFamily._()
: super(
retry: null,
name: r'customAppProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `appId` of this provider.
String get appId;
CustomAppProvider call(
String publisherName,
String projectId,
String appId,
) => CustomAppProvider._(
argument: (publisherName, projectId, appId),
from: this,
);
@override
String toString() => r'customAppProvider';
}
class _CustomAppProviderElement
extends AutoDisposeFutureProviderElement<CustomApp>
with CustomAppRef {
_CustomAppProviderElement(super.provider);
@ProviderFor(customApps)
const customAppsProvider = CustomAppsFamily._();
final class CustomAppsProvider
extends
$FunctionalProvider<
AsyncValue<List<CustomApp>>,
List<CustomApp>,
FutureOr<List<CustomApp>>
>
with $FutureModifier<List<CustomApp>>, $FutureProvider<List<CustomApp>> {
const CustomAppsProvider._({
required CustomAppsFamily super.from,
required (String, String) super.argument,
}) : super(
retry: null,
name: r'customAppsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String get publisherName => (origin as CustomAppProvider).publisherName;
String debugGetCreateSourceHash() => _$customAppsHash();
@override
String get projectId => (origin as CustomAppProvider).projectId;
String toString() {
return r'customAppsProvider'
''
'$argument';
}
@$internal
@override
String get appId => (origin as CustomAppProvider).appId;
$FutureProviderElement<List<CustomApp>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<CustomApp>> create(Ref ref) {
final argument = this.argument as (String, String);
return customApps(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is CustomAppsProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$customAppsHash() => r'450bedaf4220b8963cb44afeb14d4c0e80f01b11';
/// See also [customApps].
@ProviderFor(customApps)
const customAppsProvider = CustomAppsFamily();
/// See also [customApps].
class CustomAppsFamily extends Family<AsyncValue<List<CustomApp>>> {
/// See also [customApps].
const CustomAppsFamily();
/// See also [customApps].
CustomAppsProvider call(String publisherName, String projectId) {
return CustomAppsProvider(publisherName, projectId);
}
@override
CustomAppsProvider getProviderOverride(
covariant CustomAppsProvider provider,
) {
return call(provider.publisherName, provider.projectId);
}
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'customAppsProvider';
}
/// See also [customApps].
class CustomAppsProvider extends AutoDisposeFutureProvider<List<CustomApp>> {
/// See also [customApps].
CustomAppsProvider(String publisherName, String projectId)
: this._internal(
(ref) => customApps(ref as CustomAppsRef, publisherName, projectId),
from: customAppsProvider,
final class CustomAppsFamily extends $Family
with
$FunctionalFamilyOverride<FutureOr<List<CustomApp>>, (String, String)> {
const CustomAppsFamily._()
: super(
retry: null,
name: r'customAppsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$customAppsHash,
dependencies: CustomAppsFamily._dependencies,
allTransitiveDependencies: CustomAppsFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
);
CustomAppsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
}) : super.internal();
final String publisherName;
final String projectId;
@override
Override overrideWith(
FutureOr<List<CustomApp>> Function(CustomAppsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: CustomAppsProvider._internal(
(ref) => create(ref as CustomAppsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
CustomAppsProvider call(String publisherName, String projectId) =>
CustomAppsProvider._(argument: (publisherName, projectId), from: this);
@override
AutoDisposeFutureProviderElement<List<CustomApp>> createElement() {
return _CustomAppsProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is CustomAppsProvider &&
other.publisherName == publisherName &&
other.projectId == projectId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'customAppsProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CustomAppsRef on AutoDisposeFutureProviderRef<List<CustomApp>> {
/// The parameter `publisherName` of this provider.
String get publisherName;
/// The parameter `projectId` of this provider.
String get projectId;
}
class _CustomAppsProviderElement
extends AutoDisposeFutureProviderElement<List<CustomApp>>
with CustomAppsRef {
_CustomAppsProviderElement(super.provider);
@override
String get publisherName => (origin as CustomAppsProvider).publisherName;
@override
String get projectId => (origin as CustomAppsProvider).projectId;
}
// 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

View File

@@ -6,167 +6,89 @@ part of 'bot_keys.dart';
// RiverpodGenerator
// **************************************************************************
String _$botKeysHash() => r'f7d1121833dc3da0cbd84b6171c2b2539edeb785';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [botKeys].
@ProviderFor(botKeys)
const botKeysProvider = BotKeysFamily();
const botKeysProvider = BotKeysFamily._();
/// See also [botKeys].
class BotKeysFamily extends Family<AsyncValue<List<SnAccountApiKey>>> {
/// See also [botKeys].
const BotKeysFamily();
/// See also [botKeys].
BotKeysProvider call(String publisherName, String projectId, String botId) {
return BotKeysProvider(publisherName, projectId, botId);
}
@override
BotKeysProvider getProviderOverride(covariant BotKeysProvider provider) {
return call(provider.publisherName, provider.projectId, provider.botId);
}
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'botKeysProvider';
}
/// See also [botKeys].
class BotKeysProvider extends AutoDisposeFutureProvider<List<SnAccountApiKey>> {
/// See also [botKeys].
BotKeysProvider(String publisherName, String projectId, String botId)
: this._internal(
(ref) => botKeys(ref as BotKeysRef, publisherName, projectId, botId),
from: botKeysProvider,
final class BotKeysProvider
extends
$FunctionalProvider<
AsyncValue<List<SnAccountApiKey>>,
List<SnAccountApiKey>,
FutureOr<List<SnAccountApiKey>>
>
with
$FutureModifier<List<SnAccountApiKey>>,
$FutureProvider<List<SnAccountApiKey>> {
const BotKeysProvider._({
required BotKeysFamily super.from,
required (String, String, String) super.argument,
}) : super(
retry: null,
name: r'botKeysProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$botKeysHash,
dependencies: BotKeysFamily._dependencies,
allTransitiveDependencies: BotKeysFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
botId: botId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
BotKeysProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
required this.botId,
}) : super.internal();
final String publisherName;
final String projectId;
final String botId;
@override
Override overrideWith(
FutureOr<List<SnAccountApiKey>> Function(BotKeysRef provider) create,
) {
return ProviderOverride(
origin: this,
override: BotKeysProvider._internal(
(ref) => create(ref as BotKeysRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
botId: botId,
),
);
String debugGetCreateSourceHash() => _$botKeysHash();
@override
String toString() {
return r'botKeysProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnAccountApiKey>> createElement() {
return _BotKeysProviderElement(this);
$FutureProviderElement<List<SnAccountApiKey>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnAccountApiKey>> create(Ref ref) {
final argument = this.argument as (String, String, String);
return botKeys(ref, argument.$1, argument.$2, argument.$3);
}
@override
bool operator ==(Object other) {
return other is BotKeysProvider &&
other.publisherName == publisherName &&
other.projectId == projectId &&
other.botId == botId;
return other is BotKeysProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
hash = _SystemHash.combine(hash, botId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin BotKeysRef on AutoDisposeFutureProviderRef<List<SnAccountApiKey>> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$botKeysHash() => r'f7d1121833dc3da0cbd84b6171c2b2539edeb785';
/// The parameter `projectId` of this provider.
String get projectId;
final class BotKeysFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnAccountApiKey>>,
(String, String, String)
> {
const BotKeysFamily._()
: super(
retry: null,
name: r'botKeysProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `botId` of this provider.
String get botId;
BotKeysProvider call(String publisherName, String projectId, String botId) =>
BotKeysProvider._(
argument: (publisherName, projectId, botId),
from: this,
);
@override
String toString() => r'botKeysProvider';
}
class _BotKeysProviderElement
extends AutoDisposeFutureProviderElement<List<SnAccountApiKey>>
with BotKeysRef {
_BotKeysProviderElement(super.provider);
@override
String get publisherName => (origin as BotKeysProvider).publisherName;
@override
String get projectId => (origin as BotKeysProvider).projectId;
@override
String get botId => (origin as BotKeysProvider).botId;
}
// 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

View File

@@ -6,151 +6,79 @@ part of 'bots.dart';
// RiverpodGenerator
// **************************************************************************
String _$botsHash() => r'15cefd5781350eb68208a342e85fcb0b9e0e3269';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [bots].
@ProviderFor(bots)
const botsProvider = BotsFamily();
const botsProvider = BotsFamily._();
/// See also [bots].
class BotsFamily extends Family<AsyncValue<List<Bot>>> {
/// See also [bots].
const BotsFamily();
/// See also [bots].
BotsProvider call(String publisherName, String projectId) {
return BotsProvider(publisherName, projectId);
}
@override
BotsProvider getProviderOverride(covariant BotsProvider provider) {
return call(provider.publisherName, provider.projectId);
}
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'botsProvider';
}
/// See also [bots].
class BotsProvider extends AutoDisposeFutureProvider<List<Bot>> {
/// See also [bots].
BotsProvider(String publisherName, String projectId)
: this._internal(
(ref) => bots(ref as BotsRef, publisherName, projectId),
from: botsProvider,
final class BotsProvider
extends
$FunctionalProvider<
AsyncValue<List<Bot>>,
List<Bot>,
FutureOr<List<Bot>>
>
with $FutureModifier<List<Bot>>, $FutureProvider<List<Bot>> {
const BotsProvider._({
required BotsFamily super.from,
required (String, String) super.argument,
}) : super(
retry: null,
name: r'botsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$botsHash,
dependencies: BotsFamily._dependencies,
allTransitiveDependencies: BotsFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
BotsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
}) : super.internal();
final String publisherName;
final String projectId;
@override
Override overrideWith(FutureOr<List<Bot>> Function(BotsRef provider) create) {
return ProviderOverride(
origin: this,
override: BotsProvider._internal(
(ref) => create(ref as BotsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
),
);
String debugGetCreateSourceHash() => _$botsHash();
@override
String toString() {
return r'botsProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<Bot>> createElement() {
return _BotsProviderElement(this);
$FutureProviderElement<List<Bot>> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<List<Bot>> create(Ref ref) {
final argument = this.argument as (String, String);
return bots(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is BotsProvider &&
other.publisherName == publisherName &&
other.projectId == projectId;
return other is BotsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin BotsRef on AutoDisposeFutureProviderRef<List<Bot>> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$botsHash() => r'15cefd5781350eb68208a342e85fcb0b9e0e3269';
/// The parameter `projectId` of this provider.
String get projectId;
}
final class BotsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<Bot>>, (String, String)> {
const BotsFamily._()
: super(
retry: null,
name: r'botsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
class _BotsProviderElement extends AutoDisposeFutureProviderElement<List<Bot>>
with BotsRef {
_BotsProviderElement(super.provider);
BotsProvider call(String publisherName, String projectId) =>
BotsProvider._(argument: (publisherName, projectId), from: this);
@override
String get publisherName => (origin as BotsProvider).publisherName;
@override
String get projectId => (origin as BotsProvider).projectId;
String toString() => r'botsProvider';
}
// 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

View File

@@ -6,167 +6,83 @@ part of 'edit_app.dart';
// RiverpodGenerator
// **************************************************************************
String _$customAppHash() => r'8e1b38f3dc9b04fad362ee1141fcbfc53f008c09';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [customApp].
@ProviderFor(customApp)
const customAppProvider = CustomAppFamily();
const customAppProvider = CustomAppFamily._();
/// See also [customApp].
class CustomAppFamily extends Family<AsyncValue<CustomApp?>> {
/// See also [customApp].
const CustomAppFamily();
/// See also [customApp].
CustomAppProvider call(String publisherName, String projectId, String id) {
return CustomAppProvider(publisherName, projectId, id);
}
@override
CustomAppProvider getProviderOverride(covariant CustomAppProvider provider) {
return call(provider.publisherName, provider.projectId, provider.id);
}
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'customAppProvider';
}
/// See also [customApp].
class CustomAppProvider extends AutoDisposeFutureProvider<CustomApp?> {
/// See also [customApp].
CustomAppProvider(String publisherName, String projectId, String id)
: this._internal(
(ref) => customApp(ref as CustomAppRef, publisherName, projectId, id),
from: customAppProvider,
final class CustomAppProvider
extends
$FunctionalProvider<
AsyncValue<CustomApp?>,
CustomApp?,
FutureOr<CustomApp?>
>
with $FutureModifier<CustomApp?>, $FutureProvider<CustomApp?> {
const CustomAppProvider._({
required CustomAppFamily super.from,
required (String, String, String) super.argument,
}) : super(
retry: null,
name: r'customAppProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$customAppHash,
dependencies: CustomAppFamily._dependencies,
allTransitiveDependencies: CustomAppFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
id: id,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
CustomAppProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
required this.id,
}) : super.internal();
final String publisherName;
final String projectId;
final String id;
@override
Override overrideWith(
FutureOr<CustomApp?> Function(CustomAppRef provider) create,
) {
return ProviderOverride(
origin: this,
override: CustomAppProvider._internal(
(ref) => create(ref as CustomAppRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
id: id,
),
);
String debugGetCreateSourceHash() => _$customAppHash();
@override
String toString() {
return r'customAppProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<CustomApp?> createElement() {
return _CustomAppProviderElement(this);
$FutureProviderElement<CustomApp?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<CustomApp?> create(Ref ref) {
final argument = this.argument as (String, String, String);
return customApp(ref, argument.$1, argument.$2, argument.$3);
}
@override
bool operator ==(Object other) {
return other is CustomAppProvider &&
other.publisherName == publisherName &&
other.projectId == projectId &&
other.id == id;
return other is CustomAppProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
hash = _SystemHash.combine(hash, id.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin CustomAppRef on AutoDisposeFutureProviderRef<CustomApp?> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$customAppHash() => r'8e1b38f3dc9b04fad362ee1141fcbfc53f008c09';
/// The parameter `projectId` of this provider.
String get projectId;
final class CustomAppFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<CustomApp?>,
(String, String, String)
> {
const CustomAppFamily._()
: super(
retry: null,
name: r'customAppProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `id` of this provider.
String get id;
CustomAppProvider call(String publisherName, String projectId, String id) =>
CustomAppProvider._(argument: (publisherName, projectId, id), from: this);
@override
String toString() => r'customAppProvider';
}
class _CustomAppProviderElement
extends AutoDisposeFutureProviderElement<CustomApp?>
with CustomAppRef {
_CustomAppProviderElement(super.provider);
@override
String get publisherName => (origin as CustomAppProvider).publisherName;
@override
String get projectId => (origin as CustomAppProvider).projectId;
@override
String get id => (origin as CustomAppProvider).id;
}
// 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

View File

@@ -6,162 +6,74 @@ part of 'edit_bot.dart';
// RiverpodGenerator
// **************************************************************************
String _$botHash() => r'7bec47bb2a4061a5babc6d6d19c3d4c320c91188';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [bot].
@ProviderFor(bot)
const botProvider = BotFamily();
const botProvider = BotFamily._();
/// See also [bot].
class BotFamily extends Family<AsyncValue<Bot?>> {
/// See also [bot].
const BotFamily();
/// See also [bot].
BotProvider call(String publisherName, String projectId, String id) {
return BotProvider(publisherName, projectId, id);
}
@override
BotProvider getProviderOverride(covariant BotProvider provider) {
return call(provider.publisherName, provider.projectId, provider.id);
}
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'botProvider';
}
/// See also [bot].
class BotProvider extends AutoDisposeFutureProvider<Bot?> {
/// See also [bot].
BotProvider(String publisherName, String projectId, String id)
: this._internal(
(ref) => bot(ref as BotRef, publisherName, projectId, id),
from: botProvider,
final class BotProvider
extends $FunctionalProvider<AsyncValue<Bot?>, Bot?, FutureOr<Bot?>>
with $FutureModifier<Bot?>, $FutureProvider<Bot?> {
const BotProvider._({
required BotFamily super.from,
required (String, String, String) super.argument,
}) : super(
retry: null,
name: r'botProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$botHash,
dependencies: BotFamily._dependencies,
allTransitiveDependencies: BotFamily._allTransitiveDependencies,
publisherName: publisherName,
projectId: projectId,
id: id,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
BotProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.publisherName,
required this.projectId,
required this.id,
}) : super.internal();
final String publisherName;
final String projectId;
final String id;
@override
Override overrideWith(FutureOr<Bot?> Function(BotRef provider) create) {
return ProviderOverride(
origin: this,
override: BotProvider._internal(
(ref) => create(ref as BotRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
publisherName: publisherName,
projectId: projectId,
id: id,
),
);
String debugGetCreateSourceHash() => _$botHash();
@override
String toString() {
return r'botProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<Bot?> createElement() {
return _BotProviderElement(this);
$FutureProviderElement<Bot?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<Bot?> create(Ref ref) {
final argument = this.argument as (String, String, String);
return bot(ref, argument.$1, argument.$2, argument.$3);
}
@override
bool operator ==(Object other) {
return other is BotProvider &&
other.publisherName == publisherName &&
other.projectId == projectId &&
other.id == id;
return other is BotProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, publisherName.hashCode);
hash = _SystemHash.combine(hash, projectId.hashCode);
hash = _SystemHash.combine(hash, id.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin BotRef on AutoDisposeFutureProviderRef<Bot?> {
/// The parameter `publisherName` of this provider.
String get publisherName;
String _$botHash() => r'7bec47bb2a4061a5babc6d6d19c3d4c320c91188';
/// The parameter `projectId` of this provider.
String get projectId;
final class BotFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<Bot?>, (String, String, String)> {
const BotFamily._()
: super(
retry: null,
name: r'botProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
/// The parameter `id` of this provider.
String get id;
BotProvider call(String publisherName, String projectId, String id) =>
BotProvider._(argument: (publisherName, projectId, id), from: this);
@override
String toString() => r'botProvider';
}
class _BotProviderElement extends AutoDisposeFutureProviderElement<Bot?>
with BotRef {
_BotProviderElement(super.provider);
@override
String get publisherName => (origin as BotProvider).publisherName;
@override
String get projectId => (origin as BotProvider).projectId;
@override
String get id => (origin as BotProvider).id;
}
// 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

View File

@@ -6,158 +6,80 @@ part of 'edit_project.dart';
// RiverpodGenerator
// **************************************************************************
String _$devProjectHash() => r'd92be3f5cdc510c2a377615ed5c70622a6842bf2';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [devProject].
@ProviderFor(devProject)
const devProjectProvider = DevProjectFamily();
const devProjectProvider = DevProjectFamily._();
/// See also [devProject].
class DevProjectFamily extends Family<AsyncValue<DevProject?>> {
/// See also [devProject].
const DevProjectFamily();
/// See also [devProject].
DevProjectProvider call(String pubName, String id) {
return DevProjectProvider(pubName, id);
}
@override
DevProjectProvider getProviderOverride(
covariant DevProjectProvider provider,
) {
return call(provider.pubName, provider.id);
}
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'devProjectProvider';
}
/// See also [devProject].
class DevProjectProvider extends AutoDisposeFutureProvider<DevProject?> {
/// See also [devProject].
DevProjectProvider(String pubName, String id)
: this._internal(
(ref) => devProject(ref as DevProjectRef, pubName, id),
from: devProjectProvider,
final class DevProjectProvider
extends
$FunctionalProvider<
AsyncValue<DevProject?>,
DevProject?,
FutureOr<DevProject?>
>
with $FutureModifier<DevProject?>, $FutureProvider<DevProject?> {
const DevProjectProvider._({
required DevProjectFamily super.from,
required (String, String) super.argument,
}) : super(
retry: null,
name: r'devProjectProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$devProjectHash,
dependencies: DevProjectFamily._dependencies,
allTransitiveDependencies: DevProjectFamily._allTransitiveDependencies,
pubName: pubName,
id: id,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
DevProjectProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
required this.id,
}) : super.internal();
final String pubName;
final String id;
@override
Override overrideWith(
FutureOr<DevProject?> Function(DevProjectRef provider) create,
) {
return ProviderOverride(
origin: this,
override: DevProjectProvider._internal(
(ref) => create(ref as DevProjectRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
id: id,
),
);
String debugGetCreateSourceHash() => _$devProjectHash();
@override
String toString() {
return r'devProjectProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<DevProject?> createElement() {
return _DevProjectProviderElement(this);
$FutureProviderElement<DevProject?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<DevProject?> create(Ref ref) {
final argument = this.argument as (String, String);
return devProject(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is DevProjectProvider &&
other.pubName == pubName &&
other.id == id;
return other is DevProjectProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
hash = _SystemHash.combine(hash, id.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin DevProjectRef on AutoDisposeFutureProviderRef<DevProject?> {
/// The parameter `pubName` of this provider.
String get pubName;
String _$devProjectHash() => r'd92be3f5cdc510c2a377615ed5c70622a6842bf2';
/// The parameter `id` of this provider.
String get id;
}
final class DevProjectFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<DevProject?>, (String, String)> {
const DevProjectFamily._()
: super(
retry: null,
name: r'devProjectProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
class _DevProjectProviderElement
extends AutoDisposeFutureProviderElement<DevProject?>
with DevProjectRef {
_DevProjectProviderElement(super.provider);
DevProjectProvider call(String pubName, String id) =>
DevProjectProvider._(argument: (pubName, id), from: this);
@override
String get pubName => (origin as DevProjectProvider).pubName;
@override
String get id => (origin as DevProjectProvider).id;
String toString() => r'devProjectProvider';
}
// 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

View File

@@ -6,287 +6,196 @@ part of 'hub.dart';
// RiverpodGenerator
// **************************************************************************
String _$developerStatsHash() => r'45546f29ec7cd1a9c3a4e0f4e39275e78bf34755';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [developerStats].
@ProviderFor(developerStats)
const developerStatsProvider = DeveloperStatsFamily();
const developerStatsProvider = DeveloperStatsFamily._();
/// See also [developerStats].
class DeveloperStatsFamily extends Family<AsyncValue<DeveloperStats?>> {
/// See also [developerStats].
const DeveloperStatsFamily();
/// See also [developerStats].
DeveloperStatsProvider call(String? uname) {
return DeveloperStatsProvider(uname);
}
@override
DeveloperStatsProvider getProviderOverride(
covariant DeveloperStatsProvider provider,
) {
return call(provider.uname);
}
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'developerStatsProvider';
}
/// See also [developerStats].
class DeveloperStatsProvider
extends AutoDisposeFutureProvider<DeveloperStats?> {
/// See also [developerStats].
DeveloperStatsProvider(String? uname)
: this._internal(
(ref) => developerStats(ref as DeveloperStatsRef, uname),
from: developerStatsProvider,
final class DeveloperStatsProvider
extends
$FunctionalProvider<
AsyncValue<DeveloperStats?>,
DeveloperStats?,
FutureOr<DeveloperStats?>
>
with $FutureModifier<DeveloperStats?>, $FutureProvider<DeveloperStats?> {
const DeveloperStatsProvider._({
required DeveloperStatsFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'developerStatsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$developerStatsHash,
dependencies: DeveloperStatsFamily._dependencies,
allTransitiveDependencies:
DeveloperStatsFamily._allTransitiveDependencies,
uname: uname,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
DeveloperStatsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String? uname;
@override
Override overrideWith(
FutureOr<DeveloperStats?> Function(DeveloperStatsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: DeveloperStatsProvider._internal(
(ref) => create(ref as DeveloperStatsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$developerStatsHash();
@override
String toString() {
return r'developerStatsProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<DeveloperStats?> createElement() {
return _DeveloperStatsProviderElement(this);
$FutureProviderElement<DeveloperStats?> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<DeveloperStats?> create(Ref ref) {
final argument = this.argument as String?;
return developerStats(ref, argument);
}
@override
bool operator ==(Object other) {
return other is DeveloperStatsProvider && other.uname == uname;
return other is DeveloperStatsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin DeveloperStatsRef on AutoDisposeFutureProviderRef<DeveloperStats?> {
/// The parameter `uname` of this provider.
String? get uname;
}
String _$developerStatsHash() => r'45546f29ec7cd1a9c3a4e0f4e39275e78bf34755';
class _DeveloperStatsProviderElement
extends AutoDisposeFutureProviderElement<DeveloperStats?>
with DeveloperStatsRef {
_DeveloperStatsProviderElement(super.provider);
final class DeveloperStatsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<DeveloperStats?>, String?> {
const DeveloperStatsFamily._()
: super(
retry: null,
name: r'developerStatsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
DeveloperStatsProvider call(String? uname) =>
DeveloperStatsProvider._(argument: uname, from: this);
@override
String? get uname => (origin as DeveloperStatsProvider).uname;
String toString() => r'developerStatsProvider';
}
@ProviderFor(developers)
const developersProvider = DevelopersProvider._();
final class DevelopersProvider
extends
$FunctionalProvider<
AsyncValue<List<SnDeveloper>>,
List<SnDeveloper>,
FutureOr<List<SnDeveloper>>
>
with
$FutureModifier<List<SnDeveloper>>,
$FutureProvider<List<SnDeveloper>> {
const DevelopersProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'developersProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$developersHash();
@$internal
@override
$FutureProviderElement<List<SnDeveloper>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnDeveloper>> create(Ref ref) {
return developers(ref);
}
}
String _$developersHash() => r'252341098617ac398ce133994453f318dd3edbd2';
/// See also [developers].
@ProviderFor(developers)
final developersProvider =
AutoDisposeFutureProvider<List<SnDeveloper>>.internal(
developers,
name: r'developersProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$developersHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef DevelopersRef = AutoDisposeFutureProviderRef<List<SnDeveloper>>;
String _$devProjectsHash() => r'715b395bebda785d38691ffee3b88e50b498c91a';
/// See also [devProjects].
@ProviderFor(devProjects)
const devProjectsProvider = DevProjectsFamily();
const devProjectsProvider = DevProjectsFamily._();
/// See also [devProjects].
class DevProjectsFamily extends Family<AsyncValue<List<DevProject>>> {
/// See also [devProjects].
const DevProjectsFamily();
/// See also [devProjects].
DevProjectsProvider call(String pubName) {
return DevProjectsProvider(pubName);
}
@override
DevProjectsProvider getProviderOverride(
covariant DevProjectsProvider provider,
) {
return call(provider.pubName);
}
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'devProjectsProvider';
}
/// See also [devProjects].
class DevProjectsProvider extends AutoDisposeFutureProvider<List<DevProject>> {
/// See also [devProjects].
DevProjectsProvider(String pubName)
: this._internal(
(ref) => devProjects(ref as DevProjectsRef, pubName),
from: devProjectsProvider,
final class DevProjectsProvider
extends
$FunctionalProvider<
AsyncValue<List<DevProject>>,
List<DevProject>,
FutureOr<List<DevProject>>
>
with $FutureModifier<List<DevProject>>, $FutureProvider<List<DevProject>> {
const DevProjectsProvider._({
required DevProjectsFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'devProjectsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$devProjectsHash,
dependencies: DevProjectsFamily._dependencies,
allTransitiveDependencies: DevProjectsFamily._allTransitiveDependencies,
pubName: pubName,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
DevProjectsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String pubName;
@override
Override overrideWith(
FutureOr<List<DevProject>> Function(DevProjectsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: DevProjectsProvider._internal(
(ref) => create(ref as DevProjectsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
String debugGetCreateSourceHash() => _$devProjectsHash();
@override
String toString() {
return r'devProjectsProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<DevProject>> createElement() {
return _DevProjectsProviderElement(this);
$FutureProviderElement<List<DevProject>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<DevProject>> create(Ref ref) {
final argument = this.argument as String;
return devProjects(ref, argument);
}
@override
bool operator ==(Object other) {
return other is DevProjectsProvider && other.pubName == pubName;
return other is DevProjectsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin DevProjectsRef on AutoDisposeFutureProviderRef<List<DevProject>> {
/// The parameter `pubName` of this provider.
String get pubName;
}
String _$devProjectsHash() => r'715b395bebda785d38691ffee3b88e50b498c91a';
class _DevProjectsProviderElement
extends AutoDisposeFutureProviderElement<List<DevProject>>
with DevProjectsRef {
_DevProjectsProviderElement(super.provider);
final class DevProjectsFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<DevProject>>, String> {
const DevProjectsFamily._()
: super(
retry: null,
name: r'devProjectsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
DevProjectsProvider call(String pubName) =>
DevProjectsProvider._(argument: pubName, from: this);
@override
String get pubName => (origin as DevProjectsProvider).pubName;
String toString() => r'devProjectsProvider';
}
// 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

View File

@@ -1,41 +1,39 @@
import 'package:flutter/material.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/webfeed.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:island/widgets/web_article_card.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
part 'articles.g.dart';
part 'articles.freezed.dart';
@riverpod
class ArticlesListNotifier extends _$ArticlesListNotifier
with CursorPagingNotifierMixin<SnWebArticle> {
static const int _pageSize = 20;
@freezed
sealed class ArticleListQuery with _$ArticleListQuery {
const factory ArticleListQuery({String? feedId, String? publisherId}) =
_ArticleListQuery;
}
Map<String, dynamic> _params = {};
final articlesListNotifierProvider = AsyncNotifierProvider.family.autoDispose(
ArticlesListNotifier.new,
);
class ArticlesListNotifier extends AsyncNotifier<List<SnWebArticle>>
with AsyncPaginationController<SnWebArticle> {
static const int pageSize = 20;
final ArticleListQuery arg;
ArticlesListNotifier(this.arg);
@override
Future<CursorPagingData<SnWebArticle>> build({
String? feedId,
String? publisherId,
}) async {
_params = {
if (feedId != null) 'feedId': feedId,
if (publisherId != null) 'publisherId': publisherId,
};
return fetch(cursor: null);
}
@override
Future<CursorPagingData<SnWebArticle>> fetch({
required String? cursor,
}) async {
Future<List<SnWebArticle>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final queryParams = {'limit': _pageSize, 'offset': offset, ..._params};
final queryParams = {'limit': pageSize, 'offset': fetchedCount.toString()};
try {
final response = await client.get(
@@ -43,23 +41,17 @@ class ArticlesListNotifier extends _$ArticlesListNotifier
queryParameters: queryParams,
);
final List<dynamic> data = response.data;
final articles =
data
response.data
.map(
(json) => SnWebArticle.fromJson(json as Map<String, dynamic>),
)
.cast<SnWebArticle>()
.toList();
final total = int.tryParse(response.headers.value('X-Total') ?? '0') ?? 0;
final hasMore = offset + articles.length < total;
final nextCursor = hasMore ? (offset + articles.length).toString() : null;
totalCount = int.tryParse(response.headers.value('X-Total') ?? '0') ?? 0;
return CursorPagingData(
items: articles,
hasMore: hasMore,
nextCursor: nextCursor,
);
return articles;
} catch (e) {
debugPrint('Error fetching articles: $e');
rethrow;
@@ -85,34 +77,17 @@ class SliverArticlesList extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return PagingHelperSliverView(
provider: articlesListNotifierProvider(
feedId: feedId,
publisherId: publisherId,
),
futureRefreshable:
articlesListNotifierProvider(
feedId: feedId,
publisherId: publisherId,
).future,
notifierRefreshable:
articlesListNotifierProvider(
feedId: feedId,
publisherId: publisherId,
).notifier,
contentBuilder:
(data, widgetCount, endItemView) => SliverList.separated(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final article = data.items[index];
final provider = articlesListNotifierProvider(
ArticleListQuery(feedId: feedId, publisherId: publisherId),
);
return PaginationList(
provider: provider,
notifier: provider.notifier,
isRefreshable: false,
isSliver: true,
itemBuilder: (context, index, article) {
return WebArticleCard(article: article, showDetails: true);
},
separatorBuilder: (context, index) => const SizedBox(height: 12),
),
);
}
}

View File

@@ -0,0 +1,268 @@
// 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 'articles.dart';
// **************************************************************************
// FreezedGenerator
// **************************************************************************
// dart format off
T _$identity<T>(T value) => value;
/// @nodoc
mixin _$ArticleListQuery {
String? get feedId; String? get publisherId;
/// Create a copy of ArticleListQuery
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
$ArticleListQueryCopyWith<ArticleListQuery> get copyWith => _$ArticleListQueryCopyWithImpl<ArticleListQuery>(this as ArticleListQuery, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is ArticleListQuery&&(identical(other.feedId, feedId) || other.feedId == feedId)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId));
}
@override
int get hashCode => Object.hash(runtimeType,feedId,publisherId);
@override
String toString() {
return 'ArticleListQuery(feedId: $feedId, publisherId: $publisherId)';
}
}
/// @nodoc
abstract mixin class $ArticleListQueryCopyWith<$Res> {
factory $ArticleListQueryCopyWith(ArticleListQuery value, $Res Function(ArticleListQuery) _then) = _$ArticleListQueryCopyWithImpl;
@useResult
$Res call({
String? feedId, String? publisherId
});
}
/// @nodoc
class _$ArticleListQueryCopyWithImpl<$Res>
implements $ArticleListQueryCopyWith<$Res> {
_$ArticleListQueryCopyWithImpl(this._self, this._then);
final ArticleListQuery _self;
final $Res Function(ArticleListQuery) _then;
/// Create a copy of ArticleListQuery
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline') @override $Res call({Object? feedId = freezed,Object? publisherId = freezed,}) {
return _then(_self.copyWith(
feedId: freezed == feedId ? _self.feedId : feedId // ignore: cast_nullable_to_non_nullable
as String?,publisherId: freezed == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
as String?,
));
}
}
/// Adds pattern-matching-related methods to [ArticleListQuery].
extension ArticleListQueryPatterns on ArticleListQuery {
/// 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( _ArticleListQuery value)? $default,{required TResult orElse(),}){
final _that = this;
switch (_that) {
case _ArticleListQuery() 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( _ArticleListQuery value) $default,){
final _that = this;
switch (_that) {
case _ArticleListQuery():
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( _ArticleListQuery value)? $default,){
final _that = this;
switch (_that) {
case _ArticleListQuery() 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? feedId, String? publisherId)? $default,{required TResult orElse(),}) {final _that = this;
switch (_that) {
case _ArticleListQuery() when $default != null:
return $default(_that.feedId,_that.publisherId);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? feedId, String? publisherId) $default,) {final _that = this;
switch (_that) {
case _ArticleListQuery():
return $default(_that.feedId,_that.publisherId);}
}
/// 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? feedId, String? publisherId)? $default,) {final _that = this;
switch (_that) {
case _ArticleListQuery() when $default != null:
return $default(_that.feedId,_that.publisherId);case _:
return null;
}
}
}
/// @nodoc
class _ArticleListQuery implements ArticleListQuery {
const _ArticleListQuery({this.feedId, this.publisherId});
@override final String? feedId;
@override final String? publisherId;
/// Create a copy of ArticleListQuery
/// with the given fields replaced by the non-null parameter values.
@override @JsonKey(includeFromJson: false, includeToJson: false)
@pragma('vm:prefer-inline')
_$ArticleListQueryCopyWith<_ArticleListQuery> get copyWith => __$ArticleListQueryCopyWithImpl<_ArticleListQuery>(this, _$identity);
@override
bool operator ==(Object other) {
return identical(this, other) || (other.runtimeType == runtimeType&&other is _ArticleListQuery&&(identical(other.feedId, feedId) || other.feedId == feedId)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId));
}
@override
int get hashCode => Object.hash(runtimeType,feedId,publisherId);
@override
String toString() {
return 'ArticleListQuery(feedId: $feedId, publisherId: $publisherId)';
}
}
/// @nodoc
abstract mixin class _$ArticleListQueryCopyWith<$Res> implements $ArticleListQueryCopyWith<$Res> {
factory _$ArticleListQueryCopyWith(_ArticleListQuery value, $Res Function(_ArticleListQuery) _then) = __$ArticleListQueryCopyWithImpl;
@override @useResult
$Res call({
String? feedId, String? publisherId
});
}
/// @nodoc
class __$ArticleListQueryCopyWithImpl<$Res>
implements _$ArticleListQueryCopyWith<$Res> {
__$ArticleListQueryCopyWithImpl(this._self, this._then);
final _ArticleListQuery _self;
final $Res Function(_ArticleListQuery) _then;
/// Create a copy of ArticleListQuery
/// with the given fields replaced by the non-null parameter values.
@override @pragma('vm:prefer-inline') $Res call({Object? feedId = freezed,Object? publisherId = freezed,}) {
return _then(_ArticleListQuery(
feedId: freezed == feedId ? _self.feedId : feedId // ignore: cast_nullable_to_non_nullable
as String?,publisherId: freezed == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
as String?,
));
}
}
// dart format on

View File

@@ -6,220 +6,44 @@ part of 'articles.dart';
// RiverpodGenerator
// **************************************************************************
String _$subscribedFeedsHash() => r'5c0c8c30c5f543f6ea1d39786a6778f77ba5b3df';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// See also [subscribedFeeds].
@ProviderFor(subscribedFeeds)
final subscribedFeedsProvider =
AutoDisposeFutureProvider<List<SnWebFeed>>.internal(
subscribedFeeds,
const subscribedFeedsProvider = SubscribedFeedsProvider._();
final class SubscribedFeedsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnWebFeed>>,
List<SnWebFeed>,
FutureOr<List<SnWebFeed>>
>
with $FutureModifier<List<SnWebFeed>>, $FutureProvider<List<SnWebFeed>> {
const SubscribedFeedsProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'subscribedFeedsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$subscribedFeedsHash,
isAutoDispose: true,
dependencies: null,
allTransitiveDependencies: null,
$allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef SubscribedFeedsRef = AutoDisposeFutureProviderRef<List<SnWebFeed>>;
String _$articlesListNotifierHash() =>
r'579741af4d90c7c81f2e2697e57c4895b7a9dabc';
@override
String debugGetCreateSourceHash() => _$subscribedFeedsHash();
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
@$internal
@override
$FutureProviderElement<List<SnWebFeed>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
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));
@override
FutureOr<List<SnWebFeed>> create(Ref ref) {
return subscribedFeeds(ref);
}
}
abstract class _$ArticlesListNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnWebArticle>> {
late final String? feedId;
late final String? publisherId;
FutureOr<CursorPagingData<SnWebArticle>> build({
String? feedId,
String? publisherId,
});
}
/// See also [ArticlesListNotifier].
@ProviderFor(ArticlesListNotifier)
const articlesListNotifierProvider = ArticlesListNotifierFamily();
/// See also [ArticlesListNotifier].
class ArticlesListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnWebArticle>>> {
/// See also [ArticlesListNotifier].
const ArticlesListNotifierFamily();
/// See also [ArticlesListNotifier].
ArticlesListNotifierProvider call({String? feedId, String? publisherId}) {
return ArticlesListNotifierProvider(
feedId: feedId,
publisherId: publisherId,
);
}
@override
ArticlesListNotifierProvider getProviderOverride(
covariant ArticlesListNotifierProvider provider,
) {
return call(feedId: provider.feedId, publisherId: provider.publisherId);
}
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'articlesListNotifierProvider';
}
/// See also [ArticlesListNotifier].
class ArticlesListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
ArticlesListNotifier,
CursorPagingData<SnWebArticle>
> {
/// See also [ArticlesListNotifier].
ArticlesListNotifierProvider({String? feedId, String? publisherId})
: this._internal(
() =>
ArticlesListNotifier()
..feedId = feedId
..publisherId = publisherId,
from: articlesListNotifierProvider,
name: r'articlesListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$articlesListNotifierHash,
dependencies: ArticlesListNotifierFamily._dependencies,
allTransitiveDependencies:
ArticlesListNotifierFamily._allTransitiveDependencies,
feedId: feedId,
publisherId: publisherId,
);
ArticlesListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.feedId,
required this.publisherId,
}) : super.internal();
final String? feedId;
final String? publisherId;
@override
FutureOr<CursorPagingData<SnWebArticle>> runNotifierBuild(
covariant ArticlesListNotifier notifier,
) {
return notifier.build(feedId: feedId, publisherId: publisherId);
}
@override
Override overrideWith(ArticlesListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: ArticlesListNotifierProvider._internal(
() =>
create()
..feedId = feedId
..publisherId = publisherId,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
feedId: feedId,
publisherId: publisherId,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
ArticlesListNotifier,
CursorPagingData<SnWebArticle>
>
createElement() {
return _ArticlesListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is ArticlesListNotifierProvider &&
other.feedId == feedId &&
other.publisherId == publisherId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, feedId.hashCode);
hash = _SystemHash.combine(hash, publisherId.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin ArticlesListNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnWebArticle>> {
/// The parameter `feedId` of this provider.
String? get feedId;
/// The parameter `publisherId` of this provider.
String? get publisherId;
}
class _ArticlesListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
ArticlesListNotifier,
CursorPagingData<SnWebArticle>
>
with ArticlesListNotifierRef {
_ArticlesListNotifierProviderElement(super.provider);
@override
String? get feedId => (origin as ArticlesListNotifierProvider).feedId;
@override
String? get publisherId =>
(origin as ArticlesListNotifierProvider).publisherId;
}
// 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
String _$subscribedFeedsHash() => r'5c0c8c30c5f543f6ea1d39786a6778f77ba5b3df';

View File

@@ -1,17 +1,16 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/webfeed.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:island/widgets/web_article_card.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:styled_widget/styled_widget.dart';
part 'feed_detail.g.dart';
@@ -23,52 +22,35 @@ Future<SnWebFeed> marketplaceWebFeed(Ref ref, String feedId) async {
return SnWebFeed.fromJson(resp.data);
}
/// Provider for web feed articles content
@riverpod
final marketplaceWebFeedContentNotifierProvider = AsyncNotifierProvider.family
.autoDispose(MarketplaceWebFeedContentNotifier.new);
class MarketplaceWebFeedContentNotifier
extends _$MarketplaceWebFeedContentNotifier
with CursorPagingNotifierMixin<SnWebArticle> {
static const int _pageSize = 20;
extends AsyncNotifier<List<SnWebArticle>>
with AsyncPaginationController<SnWebArticle> {
static const int pageSize = 20;
final String arg;
MarketplaceWebFeedContentNotifier(this.arg);
@override
Future<CursorPagingData<SnWebArticle>> build(String feedId) async {
_feedId = feedId;
return fetch(cursor: null);
}
late final String _feedId;
ValueNotifier<int> totalCount = ValueNotifier(0);
@override
Future<CursorPagingData<SnWebArticle>> fetch({
required String? cursor,
}) async {
Future<List<SnWebArticle>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final queryParams = {'offset': offset, 'take': _pageSize};
final queryParams = {'offset': fetchedCount.toString(), 'take': pageSize};
final response = await client.get(
'/sphere/feeds/$_feedId/articles',
'/sphere/feeds/$arg/articles',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
totalCount.value = total;
final List<dynamic> data = response.data;
final articles = data.map((json) => SnWebArticle.fromJson(json)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final articles =
response.data
.map((json) => SnWebArticle.fromJson(json))
.cast<SnWebArticle>()
.toList();
final hasMore = offset + articles.length < total;
final nextCursor = hasMore ? (offset + articles.length).toString() : null;
return CursorPagingData(
items: articles,
hasMore: hasMore,
nextCursor: nextCursor,
);
}
void dispose() {
totalCount.dispose();
return articles;
}
}
@@ -126,10 +108,6 @@ class MarketplaceWebFeedDetailScreen extends HookConsumerWidget {
marketplaceWebFeedContentNotifierProvider(id).notifier,
);
useEffect(() {
return feedNotifier.dispose;
}, []);
return AppScaffold(
appBar: AppBar(title: Text(feed.value?.title ?? 'loading'.tr())),
body: Column(
@@ -147,13 +125,9 @@ class MarketplaceWebFeedDetailScreen extends HookConsumerWidget {
spacing: 4,
children: [
const Icon(Symbols.rss_feed, size: 16),
ListenableBuilder(
listenable: feedNotifier.totalCount,
builder:
(context, _) => Text(
Text(
'webFeedArticleCount'.plural(
feedNotifier.totalCount.value,
),
feedNotifier.totalCount ?? 0,
),
),
],
@@ -174,29 +148,12 @@ class MarketplaceWebFeedDetailScreen extends HookConsumerWidget {
const Divider(height: 1),
// Articles list
Expanded(
child: PagingHelperView(
child: PaginationList(
provider: marketplaceWebFeedContentNotifierProvider(id),
futureRefreshable:
marketplaceWebFeedContentNotifierProvider(id).future,
notifierRefreshable:
marketplaceWebFeedContentNotifierProvider(id).notifier,
contentBuilder:
(data, widgetCount, endItemView) => ListView.separated(
padding: const EdgeInsets.symmetric(
horizontal: 24,
vertical: 20,
),
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final article = data.items[index];
notifier: marketplaceWebFeedContentNotifierProvider(id).notifier,
itemBuilder: (context, index, article) {
return WebArticleCard(article: article);
},
separatorBuilder: (context, index) => const Gap(12),
),
),
),
Container(

View File

@@ -6,453 +6,161 @@ part of 'feed_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$marketplaceWebFeedHash() =>
r'8383f94f1bc272b903c341b8d95000313b69d14c';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [marketplaceWebFeed].
@ProviderFor(marketplaceWebFeed)
const marketplaceWebFeedProvider = MarketplaceWebFeedFamily();
const marketplaceWebFeedProvider = MarketplaceWebFeedFamily._();
/// See also [marketplaceWebFeed].
class MarketplaceWebFeedFamily extends Family<AsyncValue<SnWebFeed>> {
/// See also [marketplaceWebFeed].
const MarketplaceWebFeedFamily();
/// See also [marketplaceWebFeed].
MarketplaceWebFeedProvider call(String feedId) {
return MarketplaceWebFeedProvider(feedId);
}
@override
MarketplaceWebFeedProvider getProviderOverride(
covariant MarketplaceWebFeedProvider provider,
) {
return call(provider.feedId);
}
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'marketplaceWebFeedProvider';
}
/// See also [marketplaceWebFeed].
class MarketplaceWebFeedProvider extends AutoDisposeFutureProvider<SnWebFeed> {
/// See also [marketplaceWebFeed].
MarketplaceWebFeedProvider(String feedId)
: this._internal(
(ref) => marketplaceWebFeed(ref as MarketplaceWebFeedRef, feedId),
from: marketplaceWebFeedProvider,
final class MarketplaceWebFeedProvider
extends
$FunctionalProvider<
AsyncValue<SnWebFeed>,
SnWebFeed,
FutureOr<SnWebFeed>
>
with $FutureModifier<SnWebFeed>, $FutureProvider<SnWebFeed> {
const MarketplaceWebFeedProvider._({
required MarketplaceWebFeedFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'marketplaceWebFeedProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$marketplaceWebFeedHash,
dependencies: MarketplaceWebFeedFamily._dependencies,
allTransitiveDependencies:
MarketplaceWebFeedFamily._allTransitiveDependencies,
feedId: feedId,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
MarketplaceWebFeedProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.feedId,
}) : super.internal();
final String feedId;
@override
Override overrideWith(
FutureOr<SnWebFeed> Function(MarketplaceWebFeedRef provider) create,
) {
return ProviderOverride(
origin: this,
override: MarketplaceWebFeedProvider._internal(
(ref) => create(ref as MarketplaceWebFeedRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
feedId: feedId,
),
);
String debugGetCreateSourceHash() => _$marketplaceWebFeedHash();
@override
String toString() {
return r'marketplaceWebFeedProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnWebFeed> createElement() {
return _MarketplaceWebFeedProviderElement(this);
$FutureProviderElement<SnWebFeed> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnWebFeed> create(Ref ref) {
final argument = this.argument as String;
return marketplaceWebFeed(ref, argument);
}
@override
bool operator ==(Object other) {
return other is MarketplaceWebFeedProvider && other.feedId == feedId;
return other is MarketplaceWebFeedProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, feedId.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MarketplaceWebFeedRef on AutoDisposeFutureProviderRef<SnWebFeed> {
/// The parameter `feedId` of this provider.
String get feedId;
}
String _$marketplaceWebFeedHash() =>
r'8383f94f1bc272b903c341b8d95000313b69d14c';
class _MarketplaceWebFeedProviderElement
extends AutoDisposeFutureProviderElement<SnWebFeed>
with MarketplaceWebFeedRef {
_MarketplaceWebFeedProviderElement(super.provider);
final class MarketplaceWebFeedFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnWebFeed>, String> {
const MarketplaceWebFeedFamily._()
: super(
retry: null,
name: r'marketplaceWebFeedProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
MarketplaceWebFeedProvider call(String feedId) =>
MarketplaceWebFeedProvider._(argument: feedId, from: this);
@override
String get feedId => (origin as MarketplaceWebFeedProvider).feedId;
String toString() => r'marketplaceWebFeedProvider';
}
/// Provider for web feed subscription status
@ProviderFor(marketplaceWebFeedSubscription)
const marketplaceWebFeedSubscriptionProvider =
MarketplaceWebFeedSubscriptionFamily._();
/// Provider for web feed subscription status
final class MarketplaceWebFeedSubscriptionProvider
extends $FunctionalProvider<AsyncValue<bool>, bool, FutureOr<bool>>
with $FutureModifier<bool>, $FutureProvider<bool> {
/// Provider for web feed subscription status
const MarketplaceWebFeedSubscriptionProvider._({
required MarketplaceWebFeedSubscriptionFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'marketplaceWebFeedSubscriptionProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$marketplaceWebFeedSubscriptionHash();
@override
String toString() {
return r'marketplaceWebFeedSubscriptionProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<bool> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<bool> create(Ref ref) {
final argument = this.argument as String;
return marketplaceWebFeedSubscription(ref, feedId: argument);
}
@override
bool operator ==(Object other) {
return other is MarketplaceWebFeedSubscriptionProvider &&
other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$marketplaceWebFeedSubscriptionHash() =>
r'2ff06a48ed7d4236b57412ecca55e94c0a0b6330';
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
@ProviderFor(marketplaceWebFeedSubscription)
const marketplaceWebFeedSubscriptionProvider =
MarketplaceWebFeedSubscriptionFamily();
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
class MarketplaceWebFeedSubscriptionFamily extends Family<AsyncValue<bool>> {
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
const MarketplaceWebFeedSubscriptionFamily();
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
MarketplaceWebFeedSubscriptionProvider call({required String feedId}) {
return MarketplaceWebFeedSubscriptionProvider(feedId: feedId);
}
@override
MarketplaceWebFeedSubscriptionProvider getProviderOverride(
covariant MarketplaceWebFeedSubscriptionProvider provider,
) {
return call(feedId: provider.feedId);
}
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'marketplaceWebFeedSubscriptionProvider';
}
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
class MarketplaceWebFeedSubscriptionProvider
extends AutoDisposeFutureProvider<bool> {
/// Provider for web feed subscription status
///
/// Copied from [marketplaceWebFeedSubscription].
MarketplaceWebFeedSubscriptionProvider({required String feedId})
: this._internal(
(ref) => marketplaceWebFeedSubscription(
ref as MarketplaceWebFeedSubscriptionRef,
feedId: feedId,
),
from: marketplaceWebFeedSubscriptionProvider,
final class MarketplaceWebFeedSubscriptionFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<bool>, String> {
const MarketplaceWebFeedSubscriptionFamily._()
: super(
retry: null,
name: r'marketplaceWebFeedSubscriptionProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$marketplaceWebFeedSubscriptionHash,
dependencies: MarketplaceWebFeedSubscriptionFamily._dependencies,
allTransitiveDependencies:
MarketplaceWebFeedSubscriptionFamily._allTransitiveDependencies,
feedId: feedId,
);
MarketplaceWebFeedSubscriptionProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.feedId,
}) : super.internal();
final String feedId;
@override
Override overrideWith(
FutureOr<bool> Function(MarketplaceWebFeedSubscriptionRef provider) create,
) {
return ProviderOverride(
origin: this,
override: MarketplaceWebFeedSubscriptionProvider._internal(
(ref) => create(ref as MarketplaceWebFeedSubscriptionRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
feedId: feedId,
),
);
}
@override
AutoDisposeFutureProviderElement<bool> createElement() {
return _MarketplaceWebFeedSubscriptionProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is MarketplaceWebFeedSubscriptionProvider &&
other.feedId == feedId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, feedId.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MarketplaceWebFeedSubscriptionRef on AutoDisposeFutureProviderRef<bool> {
/// The parameter `feedId` of this provider.
String get feedId;
}
class _MarketplaceWebFeedSubscriptionProviderElement
extends AutoDisposeFutureProviderElement<bool>
with MarketplaceWebFeedSubscriptionRef {
_MarketplaceWebFeedSubscriptionProviderElement(super.provider);
@override
String get feedId =>
(origin as MarketplaceWebFeedSubscriptionProvider).feedId;
}
String _$marketplaceWebFeedContentNotifierHash() =>
r'25688082884cb824eeff300888ba38c9748295dc';
abstract class _$MarketplaceWebFeedContentNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnWebArticle>> {
late final String feedId;
FutureOr<CursorPagingData<SnWebArticle>> build(String feedId);
}
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
@ProviderFor(MarketplaceWebFeedContentNotifier)
const marketplaceWebFeedContentNotifierProvider =
MarketplaceWebFeedContentNotifierFamily();
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
class MarketplaceWebFeedContentNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnWebArticle>>> {
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
const MarketplaceWebFeedContentNotifierFamily();
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
MarketplaceWebFeedContentNotifierProvider call(String feedId) {
return MarketplaceWebFeedContentNotifierProvider(feedId);
}
@override
MarketplaceWebFeedContentNotifierProvider getProviderOverride(
covariant MarketplaceWebFeedContentNotifierProvider provider,
) {
return call(provider.feedId);
}
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'marketplaceWebFeedContentNotifierProvider';
}
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
class MarketplaceWebFeedContentNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
MarketplaceWebFeedContentNotifier,
CursorPagingData<SnWebArticle>
> {
/// Provider for web feed articles content
///
/// Copied from [MarketplaceWebFeedContentNotifier].
MarketplaceWebFeedContentNotifierProvider(String feedId)
: this._internal(
() => MarketplaceWebFeedContentNotifier()..feedId = feedId,
from: marketplaceWebFeedContentNotifierProvider,
name: r'marketplaceWebFeedContentNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$marketplaceWebFeedContentNotifierHash,
dependencies: MarketplaceWebFeedContentNotifierFamily._dependencies,
allTransitiveDependencies:
MarketplaceWebFeedContentNotifierFamily._allTransitiveDependencies,
feedId: feedId,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
MarketplaceWebFeedContentNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.feedId,
}) : super.internal();
/// Provider for web feed subscription status
final String feedId;
MarketplaceWebFeedSubscriptionProvider call({required String feedId}) =>
MarketplaceWebFeedSubscriptionProvider._(argument: feedId, from: this);
@override
FutureOr<CursorPagingData<SnWebArticle>> runNotifierBuild(
covariant MarketplaceWebFeedContentNotifier notifier,
) {
return notifier.build(feedId);
}
@override
Override overrideWith(MarketplaceWebFeedContentNotifier Function() create) {
return ProviderOverride(
origin: this,
override: MarketplaceWebFeedContentNotifierProvider._internal(
() => create()..feedId = feedId,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
feedId: feedId,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
MarketplaceWebFeedContentNotifier,
CursorPagingData<SnWebArticle>
>
createElement() {
return _MarketplaceWebFeedContentNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is MarketplaceWebFeedContentNotifierProvider &&
other.feedId == feedId;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, feedId.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'marketplaceWebFeedSubscriptionProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MarketplaceWebFeedContentNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnWebArticle>> {
/// The parameter `feedId` of this provider.
String get feedId;
}
class _MarketplaceWebFeedContentNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
MarketplaceWebFeedContentNotifier,
CursorPagingData<SnWebArticle>
>
with MarketplaceWebFeedContentNotifierRef {
_MarketplaceWebFeedContentNotifierProviderElement(super.provider);
@override
String get feedId =>
(origin as MarketplaceWebFeedContentNotifierProvider).feedId;
}
// 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

View File

@@ -1,3 +1,4 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
@@ -6,52 +7,44 @@ import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/webfeed.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'dart:async';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
final marketplaceWebFeedsNotifierProvider = AsyncNotifierProvider(
MarketplaceWebFeedsNotifier.new,
);
part 'feed_marketplace.g.dart';
@riverpod
class MarketplaceWebFeedsNotifier extends _$MarketplaceWebFeedsNotifier
with CursorPagingNotifierMixin<SnWebFeed> {
String? _query;
class MarketplaceWebFeedsNotifier extends AsyncNotifier<List<SnWebFeed>>
with
AsyncPaginationController<SnWebFeed>,
AsyncPaginationFilter<String?, SnWebFeed> {
@override
String? currentFilter;
@override
Future<CursorPagingData<SnWebFeed>> build({required String? query}) {
_query = query;
return fetch(cursor: null);
}
@override
Future<CursorPagingData<SnWebFeed>> fetch({required String? cursor}) async {
Future<List<SnWebFeed>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final response = await client.get(
'/sphere/feeds/explore',
queryParameters: {
'offset': offset,
'offset': fetchedCount.toString(),
'take': 20,
if (_query != null && _query!.isNotEmpty) 'query': _query,
if (currentFilter != null && currentFilter!.isNotEmpty)
'query': currentFilter,
},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final feeds = data.map((e) => SnWebFeed.fromJson(e)).toList();
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final feeds =
response.data
.map((e) => SnWebFeed.fromJson(e))
.cast<SnWebFeed>()
.toList();
final hasMore = offset + feeds.length < total;
final nextCursor = hasMore ? (offset + feeds.length).toString() : null;
return CursorPagingData(
items: feeds,
hasMore: hasMore,
nextCursor: nextCursor,
);
return feeds;
}
}
@@ -86,16 +79,8 @@ class MarketplaceWebFeedsScreen extends HookConsumerWidget {
title: const Text('webFeeds').tr(),
actions: const [Gap(8)],
),
body: PagingHelperView(
provider: marketplaceWebFeedsNotifierProvider(query: query.value),
futureRefreshable:
marketplaceWebFeedsNotifierProvider(query: query.value).future,
notifierRefreshable:
marketplaceWebFeedsNotifierProvider(query: query.value).notifier,
contentBuilder:
(data, widgetCount, endItemView) => Column(
body: Column(
children: [
// Search bar above the list
Padding(
padding: const EdgeInsets.all(16),
child: SearchBar(
@@ -137,15 +122,11 @@ class MarketplaceWebFeedsScreen extends HookConsumerWidget {
),
),
Expanded(
child: ListView.builder(
child: PaginationList(
provider: marketplaceWebFeedsNotifierProvider,
notifier: marketplaceWebFeedsNotifierProvider.notifier,
padding: EdgeInsets.zero,
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final feed = data.items[index];
itemBuilder: (context, index, feed) {
return ListTile(
title: Text(feed.title),
subtitle: Text(feed.description ?? ''),
@@ -163,7 +144,6 @@ class MarketplaceWebFeedsScreen extends HookConsumerWidget {
),
],
),
),
);
}
}

View File

@@ -1,180 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'feed_marketplace.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$marketplaceWebFeedsNotifierHash() =>
r'774b2985f2f7d61fe958f534f84e39f814327c4e';
/// 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));
}
}
abstract class _$MarketplaceWebFeedsNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnWebFeed>> {
late final String? query;
FutureOr<CursorPagingData<SnWebFeed>> build({required String? query});
}
/// See also [MarketplaceWebFeedsNotifier].
@ProviderFor(MarketplaceWebFeedsNotifier)
const marketplaceWebFeedsNotifierProvider = MarketplaceWebFeedsNotifierFamily();
/// See also [MarketplaceWebFeedsNotifier].
class MarketplaceWebFeedsNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnWebFeed>>> {
/// See also [MarketplaceWebFeedsNotifier].
const MarketplaceWebFeedsNotifierFamily();
/// See also [MarketplaceWebFeedsNotifier].
MarketplaceWebFeedsNotifierProvider call({required String? query}) {
return MarketplaceWebFeedsNotifierProvider(query: query);
}
@override
MarketplaceWebFeedsNotifierProvider getProviderOverride(
covariant MarketplaceWebFeedsNotifierProvider provider,
) {
return call(query: provider.query);
}
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'marketplaceWebFeedsNotifierProvider';
}
/// See also [MarketplaceWebFeedsNotifier].
class MarketplaceWebFeedsNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
MarketplaceWebFeedsNotifier,
CursorPagingData<SnWebFeed>
> {
/// See also [MarketplaceWebFeedsNotifier].
MarketplaceWebFeedsNotifierProvider({required String? query})
: this._internal(
() => MarketplaceWebFeedsNotifier()..query = query,
from: marketplaceWebFeedsNotifierProvider,
name: r'marketplaceWebFeedsNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$marketplaceWebFeedsNotifierHash,
dependencies: MarketplaceWebFeedsNotifierFamily._dependencies,
allTransitiveDependencies:
MarketplaceWebFeedsNotifierFamily._allTransitiveDependencies,
query: query,
);
MarketplaceWebFeedsNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.query,
}) : super.internal();
final String? query;
@override
FutureOr<CursorPagingData<SnWebFeed>> runNotifierBuild(
covariant MarketplaceWebFeedsNotifier notifier,
) {
return notifier.build(query: query);
}
@override
Override overrideWith(MarketplaceWebFeedsNotifier Function() create) {
return ProviderOverride(
origin: this,
override: MarketplaceWebFeedsNotifierProvider._internal(
() => create()..query = query,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
query: query,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
MarketplaceWebFeedsNotifier,
CursorPagingData<SnWebFeed>
>
createElement() {
return _MarketplaceWebFeedsNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is MarketplaceWebFeedsNotifierProvider && other.query == query;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, query.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin MarketplaceWebFeedsNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnWebFeed>> {
/// The parameter `query` of this provider.
String? get query;
}
class _MarketplaceWebFeedsNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
MarketplaceWebFeedsNotifier,
CursorPagingData<SnWebFeed>
>
with MarketplaceWebFeedsNotifierRef {
_MarketplaceWebFeedsNotifierProviderElement(super.provider);
@override
String? get query => (origin as MarketplaceWebFeedsNotifierProvider).query;
}
// 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

View File

@@ -73,19 +73,21 @@ class ExploreScreen extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final currentFilter = useState<String?>(null);
final notifier = ref.watch(activityListNotifierProvider.notifier);
final notifier = ref.watch(activityListProvider.notifier);
useEffect(() {
// Set FAB type to chat
final fabMenuNotifier = ref.read(fabMenuTypeProvider.notifier);
Future(() {
fabMenuNotifier.state = FabMenuType.compose;
fabMenuNotifier.setMenuType(FabMenuType.compose);
});
return () {
// Clean up: reset FAB type to main
final fabMenu = ref.read(fabMenuTypeProvider);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (fabMenuNotifier.state == FabMenuType.compose) {
fabMenuNotifier.state = FabMenuType.main;
if (fabMenu == FabMenuType.compose) {
fabMenuNotifier.setMenuType(FabMenuType.main);
}
});
};
@@ -99,7 +101,7 @@ class ExploreScreen extends HookConsumerWidget {
// Listen for post creation events to refresh activities
useEffect(() {
final subscription = eventBus.on<PostCreatedEvent>().listen((event) {
ref.invalidate(activityListNotifierProvider);
ref.invalidate(activityListProvider);
});
return subscription.cancel;
}, []);
@@ -116,9 +118,7 @@ class ExploreScreen extends HookConsumerWidget {
final user = ref.watch(userInfoProvider);
final notificationCount = ref.watch(
notificationUnreadCountNotifierProvider,
);
final notificationCount = ref.watch(notificationUnreadCountProvider);
final isWide = isWideScreen(context);
@@ -316,8 +316,8 @@ class ExploreScreen extends HookConsumerWidget {
final isWide = isWideScreen(context);
return PaginationWidget(
provider: activityListNotifierProvider,
notifier: activityListNotifierProvider.notifier,
provider: activityListProvider,
notifier: activityListProvider.notifier,
// Sliver list cannot provide refresh handled by the pagination list
isRefreshable: false,
isSliver: true,
@@ -339,7 +339,7 @@ class ExploreScreen extends HookConsumerWidget {
) {
final bodyView = _buildActivityList(context, ref);
final notifier = ref.watch(activityListNotifierProvider.notifier);
final notifier = ref.watch(activityListProvider.notifier);
return Row(
spacing: 12,
@@ -557,13 +557,11 @@ class ExploreScreen extends HookConsumerWidget {
String? currentFilter,
) {
final user = ref.watch(userInfoProvider);
final notificationCount = ref.watch(
notificationUnreadCountNotifierProvider,
);
final notificationCount = ref.watch(notificationUnreadCountProvider);
final bodyView = _buildActivityList(context, ref);
final notifier = ref.watch(activityListNotifierProvider.notifier);
final notifier = ref.watch(activityListProvider.notifier);
return Expanded(
child: ClipRRect(
@@ -737,7 +735,7 @@ class _ActivityListView extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final notifier = ref.watch(activityListNotifierProvider.notifier);
final notifier = ref.watch(activityListProvider.notifier);
return SliverList.separated(
itemCount: data.length + 1,

View File

@@ -116,7 +116,7 @@ class FileListScreen extends HookConsumerWidget {
completer.future
.then((uploadedFile) {
if (uploadedFile != null) {
ref.invalidate(indexedCloudFileListNotifierProvider);
ref.invalidate(indexedCloudFileListProvider);
}
})
.catchError((error) {

View File

@@ -6,302 +6,173 @@ part of 'lottery.dart';
// RiverpodGenerator
// **************************************************************************
String _$lotteryTicketsHash() => r'dd17cd721fc3b176ffa0ee0a85d0d850740e5e80';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [lotteryTickets].
@ProviderFor(lotteryTickets)
const lotteryTicketsProvider = LotteryTicketsFamily();
const lotteryTicketsProvider = LotteryTicketsFamily._();
/// See also [lotteryTickets].
class LotteryTicketsFamily extends Family<AsyncValue<List<SnLotteryTicket>>> {
/// See also [lotteryTickets].
const LotteryTicketsFamily();
/// See also [lotteryTickets].
LotteryTicketsProvider call({int offset = 0, int take = 20}) {
return LotteryTicketsProvider(offset: offset, take: take);
}
@override
LotteryTicketsProvider getProviderOverride(
covariant LotteryTicketsProvider provider,
) {
return call(offset: provider.offset, take: provider.take);
}
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'lotteryTicketsProvider';
}
/// See also [lotteryTickets].
class LotteryTicketsProvider
extends AutoDisposeFutureProvider<List<SnLotteryTicket>> {
/// See also [lotteryTickets].
LotteryTicketsProvider({int offset = 0, int take = 20})
: this._internal(
(ref) => lotteryTickets(
ref as LotteryTicketsRef,
offset: offset,
take: take,
),
from: lotteryTicketsProvider,
final class LotteryTicketsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnLotteryTicket>>,
List<SnLotteryTicket>,
FutureOr<List<SnLotteryTicket>>
>
with
$FutureModifier<List<SnLotteryTicket>>,
$FutureProvider<List<SnLotteryTicket>> {
const LotteryTicketsProvider._({
required LotteryTicketsFamily super.from,
required ({int offset, int take}) super.argument,
}) : super(
retry: null,
name: r'lotteryTicketsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$lotteryTicketsHash,
dependencies: LotteryTicketsFamily._dependencies,
allTransitiveDependencies:
LotteryTicketsFamily._allTransitiveDependencies,
offset: offset,
take: take,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
LotteryTicketsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.offset,
required this.take,
}) : super.internal();
final int offset;
final int take;
@override
Override overrideWith(
FutureOr<List<SnLotteryTicket>> Function(LotteryTicketsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: LotteryTicketsProvider._internal(
(ref) => create(ref as LotteryTicketsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
offset: offset,
take: take,
),
);
String debugGetCreateSourceHash() => _$lotteryTicketsHash();
@override
String toString() {
return r'lotteryTicketsProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<List<SnLotteryTicket>> createElement() {
return _LotteryTicketsProviderElement(this);
$FutureProviderElement<List<SnLotteryTicket>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnLotteryTicket>> create(Ref ref) {
final argument = this.argument as ({int offset, int take});
return lotteryTickets(ref, offset: argument.offset, take: argument.take);
}
@override
bool operator ==(Object other) {
return other is LotteryTicketsProvider &&
other.offset == offset &&
other.take == take;
return other is LotteryTicketsProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, offset.hashCode);
hash = _SystemHash.combine(hash, take.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin LotteryTicketsRef on AutoDisposeFutureProviderRef<List<SnLotteryTicket>> {
/// The parameter `offset` of this provider.
int get offset;
String _$lotteryTicketsHash() => r'dd17cd721fc3b176ffa0ee0a85d0d850740e5e80';
/// The parameter `take` of this provider.
int get take;
final class LotteryTicketsFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnLotteryTicket>>,
({int offset, int take})
> {
const LotteryTicketsFamily._()
: super(
retry: null,
name: r'lotteryTicketsProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
LotteryTicketsProvider call({int offset = 0, int take = 20}) =>
LotteryTicketsProvider._(
argument: (offset: offset, take: take),
from: this,
);
@override
String toString() => r'lotteryTicketsProvider';
}
class _LotteryTicketsProviderElement
extends AutoDisposeFutureProviderElement<List<SnLotteryTicket>>
with LotteryTicketsRef {
_LotteryTicketsProviderElement(super.provider);
@ProviderFor(lotteryRecords)
const lotteryRecordsProvider = LotteryRecordsFamily._();
final class LotteryRecordsProvider
extends
$FunctionalProvider<
AsyncValue<List<SnLotteryRecord>>,
List<SnLotteryRecord>,
FutureOr<List<SnLotteryRecord>>
>
with
$FutureModifier<List<SnLotteryRecord>>,
$FutureProvider<List<SnLotteryRecord>> {
const LotteryRecordsProvider._({
required LotteryRecordsFamily super.from,
required ({int offset, int take}) super.argument,
}) : super(
retry: null,
name: r'lotteryRecordsProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
int get offset => (origin as LotteryTicketsProvider).offset;
String debugGetCreateSourceHash() => _$lotteryRecordsHash();
@override
int get take => (origin as LotteryTicketsProvider).take;
String toString() {
return r'lotteryRecordsProvider'
''
'$argument';
}
@$internal
@override
$FutureProviderElement<List<SnLotteryRecord>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnLotteryRecord>> create(Ref ref) {
final argument = this.argument as ({int offset, int take});
return lotteryRecords(ref, offset: argument.offset, take: argument.take);
}
@override
bool operator ==(Object other) {
return other is LotteryRecordsProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$lotteryRecordsHash() => r'55c657460f18d9777741d09013b445ca036863f3';
/// See also [lotteryRecords].
@ProviderFor(lotteryRecords)
const lotteryRecordsProvider = LotteryRecordsFamily();
/// See also [lotteryRecords].
class LotteryRecordsFamily extends Family<AsyncValue<List<SnLotteryRecord>>> {
/// See also [lotteryRecords].
const LotteryRecordsFamily();
/// See also [lotteryRecords].
LotteryRecordsProvider call({int offset = 0, int take = 20}) {
return LotteryRecordsProvider(offset: offset, take: take);
}
@override
LotteryRecordsProvider getProviderOverride(
covariant LotteryRecordsProvider provider,
) {
return call(offset: provider.offset, take: provider.take);
}
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'lotteryRecordsProvider';
}
/// See also [lotteryRecords].
class LotteryRecordsProvider
extends AutoDisposeFutureProvider<List<SnLotteryRecord>> {
/// See also [lotteryRecords].
LotteryRecordsProvider({int offset = 0, int take = 20})
: this._internal(
(ref) => lotteryRecords(
ref as LotteryRecordsRef,
offset: offset,
take: take,
),
from: lotteryRecordsProvider,
final class LotteryRecordsFamily extends $Family
with
$FunctionalFamilyOverride<
FutureOr<List<SnLotteryRecord>>,
({int offset, int take})
> {
const LotteryRecordsFamily._()
: super(
retry: null,
name: r'lotteryRecordsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$lotteryRecordsHash,
dependencies: LotteryRecordsFamily._dependencies,
allTransitiveDependencies:
LotteryRecordsFamily._allTransitiveDependencies,
offset: offset,
take: take,
);
LotteryRecordsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.offset,
required this.take,
}) : super.internal();
final int offset;
final int take;
@override
Override overrideWith(
FutureOr<List<SnLotteryRecord>> Function(LotteryRecordsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: LotteryRecordsProvider._internal(
(ref) => create(ref as LotteryRecordsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
offset: offset,
take: take,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
LotteryRecordsProvider call({int offset = 0, int take = 20}) =>
LotteryRecordsProvider._(
argument: (offset: offset, take: take),
from: this,
);
}
@override
AutoDisposeFutureProviderElement<List<SnLotteryRecord>> createElement() {
return _LotteryRecordsProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is LotteryRecordsProvider &&
other.offset == offset &&
other.take == take;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, offset.hashCode);
hash = _SystemHash.combine(hash, take.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'lotteryRecordsProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin LotteryRecordsRef on AutoDisposeFutureProviderRef<List<SnLotteryRecord>> {
/// The parameter `offset` of this provider.
int get offset;
/// The parameter `take` of this provider.
int get take;
}
class _LotteryRecordsProviderElement
extends AutoDisposeFutureProviderElement<List<SnLotteryRecord>>
with LotteryRecordsRef {
_LotteryRecordsProviderElement(super.provider);
@override
int get offset => (origin as LotteryRecordsProvider).offset;
@override
int get take => (origin as LotteryRecordsProvider).take;
}
// 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

View File

@@ -7,16 +7,17 @@ import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/account.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/pods/websocket.dart';
import 'package:island/route.dart';
import 'package:island/widgets/alert.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:island/widgets/content/markdown.dart';
import 'package:island/widgets/content/sheet.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/material_symbols_icons.dart';
import 'package:relative_time/relative_time.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:styled_widget/styled_widget.dart';
import 'package:url_launcher/url_launcher_string.dart';
@@ -81,45 +82,35 @@ class NotificationUnreadCountNotifier
}
}
@riverpod
class NotificationListNotifier extends _$NotificationListNotifier
with CursorPagingNotifierMixin<SnNotification> {
static const int _pageSize = 5;
final notificationListProvider = AsyncNotifierProvider(
NotificationListNotifier.new,
);
class NotificationListNotifier extends AsyncNotifier<List<SnNotification>>
with AsyncPaginationController<SnNotification> {
static const int pageSize = 5;
@override
Future<CursorPagingData<SnNotification>> build() => fetch(cursor: null);
@override
Future<CursorPagingData<SnNotification>> fetch({
required String? cursor,
}) async {
Future<List<SnNotification>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final queryParams = {'offset': offset, 'take': _pageSize};
final queryParams = {'offset': fetchedCount.toString(), 'take': pageSize};
final response = await client.get(
'/ring/notifications',
queryParameters: queryParams,
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final notifications =
data.map((json) => SnNotification.fromJson(json)).toList();
response.data
.map((json) => SnNotification.fromJson(json))
.cast<SnNotification>()
.toList();
final hasMore = offset + notifications.length < total;
final nextCursor =
hasMore ? (offset + notifications.length).toString() : null;
final unreadCount = notifications.where((n) => n.viewedAt == null).length;
ref
.read(notificationUnreadCountNotifierProvider.notifier)
.decrement(unreadCount);
ref.read(notificationUnreadCountProvider.notifier).decrement(unreadCount);
return CursorPagingData(
items: notifications,
hasMore: hasMore,
nextCursor: nextCursor,
);
return notifications;
}
}
@@ -154,7 +145,7 @@ class NotificationSheet extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
// Refresh unread count when sheet opens to sync across devices
ref.read(notificationUnreadCountNotifierProvider.notifier).refresh();
ref.read(notificationUnreadCountProvider.notifier).refresh();
Future<void> markAllRead() async {
showLoadingModal(context);
@@ -162,8 +153,8 @@ class NotificationSheet extends HookConsumerWidget {
await apiClient.post('/ring/notifications/all/read');
if (!context.mounted) return;
hideLoadingModal(context);
ref.invalidate(notificationListNotifierProvider);
ref.watch(notificationUnreadCountNotifierProvider.notifier).clear();
ref.invalidate(notificationListProvider);
ref.watch(notificationUnreadCountProvider.notifier).clear();
}
return SheetScaffold(
@@ -174,30 +165,17 @@ class NotificationSheet extends HookConsumerWidget {
icon: const Icon(Symbols.mark_as_unread),
),
],
child: PagingHelperView(
provider: notificationListNotifierProvider,
futureRefreshable: notificationListNotifierProvider.future,
notifierRefreshable: notificationListNotifierProvider.notifier,
contentBuilder:
(data, widgetCount, endItemView) => ListView.builder(
padding: EdgeInsets.zero,
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == widgetCount - 1) {
return endItemView;
}
final notification = data.items[index];
child: PaginationList(
provider: notificationListProvider,
notifier: notificationListProvider.notifier,
itemBuilder: (context, index, notification) {
final pfp = notification.meta['pfp'] as String?;
final images = notification.meta['images'] as List?;
final imageIds = images?.cast<String>() ?? [];
return ListTile(
isThreeLine: true,
contentPadding: EdgeInsets.symmetric(
horizontal: 16,
vertical: 8,
),
contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
leading:
pfp != null
? ProfilePictureWidget(fileId: pfp, radius: 20)
@@ -206,10 +184,7 @@ class NotificationSheet extends HookConsumerWidget {
Theme.of(context).colorScheme.primaryContainer,
child: Icon(
_getNotificationIcon(notification.topic),
color:
Theme.of(
context,
).colorScheme.onPrimaryContainer,
color: Theme.of(context).colorScheme.onPrimaryContainer,
),
),
title: Text(notification.title),
@@ -222,9 +197,7 @@ class NotificationSheet extends HookConsumerWidget {
spacing: 6,
children: [
Text(
DateFormat().format(
notification.createdAt.toLocal(),
),
DateFormat().format(notification.createdAt.toLocal()),
).fontSize(11),
Text('·').fontSize(11).bold(),
Text(
@@ -236,9 +209,7 @@ class NotificationSheet extends HookConsumerWidget {
).opacity(0.75).padding(bottom: 4),
MarkdownTextContent(
content: notification.content,
textStyle: Theme.of(
context,
).textTheme.bodyMedium?.copyWith(
textStyle: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: Theme.of(
context,
).colorScheme.onSurface.withOpacity(0.8),
@@ -297,7 +268,6 @@ class NotificationSheet extends HookConsumerWidget {
);
},
),
),
);
}
}

View File

@@ -6,47 +6,52 @@ part of 'notification.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(NotificationUnreadCountNotifier)
const notificationUnreadCountProvider =
NotificationUnreadCountNotifierProvider._();
final class NotificationUnreadCountNotifierProvider
extends $AsyncNotifierProvider<NotificationUnreadCountNotifier, int> {
const NotificationUnreadCountNotifierProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'notificationUnreadCountProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$notificationUnreadCountNotifierHash();
@$internal
@override
NotificationUnreadCountNotifier create() => NotificationUnreadCountNotifier();
}
String _$notificationUnreadCountNotifierHash() =>
r'8bff5ad3b65389589b4112add3246afd9b8e38f9';
/// See also [NotificationUnreadCountNotifier].
@ProviderFor(NotificationUnreadCountNotifier)
final notificationUnreadCountNotifierProvider =
AutoDisposeAsyncNotifierProvider<
NotificationUnreadCountNotifier,
int
>.internal(
NotificationUnreadCountNotifier.new,
name: r'notificationUnreadCountNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$notificationUnreadCountNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$NotificationUnreadCountNotifier = AutoDisposeAsyncNotifier<int>;
String _$notificationListNotifierHash() =>
r'260046e11f45b0d67ab25bcbdc8604890d71ccc7';
/// See also [NotificationListNotifier].
@ProviderFor(NotificationListNotifier)
final notificationListNotifierProvider = AutoDisposeAsyncNotifierProvider<
NotificationListNotifier,
CursorPagingData<SnNotification>
>.internal(
NotificationListNotifier.new,
name: r'notificationListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$notificationListNotifierHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$NotificationListNotifier =
AutoDisposeAsyncNotifier<CursorPagingData<SnNotification>>;
// 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
abstract class _$NotificationUnreadCountNotifier extends $AsyncNotifier<int> {
FutureOr<int> build();
@$mustCallSuper
@override
void runBuild() {
final created = build();
final ref = this.ref as $Ref<AsyncValue<int>, int>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<AsyncValue<int>, int>,
AsyncValue<int>,
Object?,
Object?
>;
element.handleValue(ref, created);
}
}

View File

@@ -122,7 +122,7 @@ class ArticleComposeScreen extends HookConsumerWidget {
useEffect(() {
if (originalPost == null && initialState == null) {
// Try to load the most recent article draft
final drafts = ref.read(composeStorageNotifierProvider);
final drafts = ref.read(composeStorageProvider);
if (drafts.isNotEmpty) {
final mostRecentDraft = drafts.values.reduce(
(a, b) =>

View File

@@ -1,4 +1,3 @@
import 'dart:async';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
@@ -6,134 +5,54 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:island/models/post_category.dart';
import 'package:island/models/post_tag.dart';
import 'package:island/pods/network.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/response.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
// Post Categories Notifier
final postCategoriesNotifierProvider = StateNotifierProvider.autoDispose<
final postCategoriesProvider = AsyncNotifierProvider.autoDispose<
PostCategoriesNotifier,
AsyncValue<CursorPagingData<SnPostCategory>>
>((ref) {
return PostCategoriesNotifier(ref);
});
List<SnPostCategory>
>(PostCategoriesNotifier.new);
class PostCategoriesNotifier
extends StateNotifier<AsyncValue<CursorPagingData<SnPostCategory>>> {
final AutoDisposeRef ref;
static const int _pageSize = 20;
bool _isLoading = false;
PostCategoriesNotifier(this.ref) : super(const AsyncValue.loading()) {
state = const AsyncValue.data(
CursorPagingData(items: [], hasMore: false, nextCursor: null),
);
fetch(cursor: null);
}
Future<void> fetch({String? cursor}) async {
if (_isLoading) return;
_isLoading = true;
if (cursor == null) {
state = const AsyncValue.loading();
}
try {
class PostCategoriesNotifier extends AsyncNotifier<List<SnPostCategory>>
with AsyncPaginationController<SnPostCategory> {
@override
Future<List<SnPostCategory>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final response = await client.get(
'/sphere/posts/categories',
queryParameters: {
'offset': offset,
'take': _pageSize,
'order': 'usage',
},
queryParameters: {'offset': fetchedCount, 'take': 20, 'order': 'usage'},
);
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final data = response.data as List;
final categories =
data.map((json) => SnPostCategory.fromJson(json)).toList();
final hasMore = categories.length == _pageSize;
final nextCursor =
hasMore ? (offset + categories.length).toString() : null;
state = AsyncValue.data(
CursorPagingData(
items: [...(state.value?.items ?? []), ...categories],
hasMore: hasMore,
nextCursor: nextCursor,
),
);
} catch (e, stack) {
state = AsyncValue.error(e, stack);
} finally {
_isLoading = false;
}
return data.map((json) => SnPostCategory.fromJson(json)).toList();
}
}
// Post Tags Notifier
final postTagsNotifierProvider = StateNotifierProvider.autoDispose<
PostTagsNotifier,
AsyncValue<CursorPagingData<SnPostTag>>
>((ref) {
return PostTagsNotifier(ref);
});
class PostTagsNotifier
extends StateNotifier<AsyncValue<CursorPagingData<SnPostTag>>> {
final AutoDisposeRef ref;
static const int _pageSize = 20;
bool _isLoading = false;
PostTagsNotifier(this.ref) : super(const AsyncValue.loading()) {
state = const AsyncValue.data(
CursorPagingData(items: [], hasMore: false, nextCursor: null),
final postTagsProvider =
AsyncNotifierProvider.autoDispose<PostTagsNotifier, List<SnPostTag>>(
PostTagsNotifier.new,
);
fetch(cursor: null);
}
Future<void> fetch({String? cursor}) async {
if (_isLoading) return;
_isLoading = true;
if (cursor == null) {
state = const AsyncValue.loading();
}
try {
class PostTagsNotifier extends AsyncNotifier<List<SnPostTag>>
with AsyncPaginationController<SnPostTag> {
@override
Future<List<SnPostTag>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final response = await client.get(
'/sphere/posts/tags',
queryParameters: {
'offset': offset,
'take': _pageSize,
'order': 'usage',
},
queryParameters: {'offset': fetchedCount, 'take': 20, 'order': 'usage'},
);
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final data = response.data as List;
final tags = data.map((json) => SnPostTag.fromJson(json)).toList();
final hasMore = tags.length == _pageSize;
final nextCursor = hasMore ? (offset + tags.length).toString() : null;
state = AsyncValue.data(
CursorPagingData(
items: [...(state.value?.items ?? []), ...tags],
hasMore: hasMore,
nextCursor: nextCursor,
),
);
} catch (e, stack) {
state = AsyncValue.error(e, stack);
} finally {
_isLoading = false;
}
return data.map((json) => SnPostTag.fromJson(json)).toList();
}
}
@@ -142,29 +61,16 @@ class PostCategoriesListScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final categoriesState = ref.watch(postCategoriesNotifierProvider);
return AppScaffold(
appBar: AppBar(title: const Text('categories').tr()),
body: categoriesState.when(
data: (data) {
if (data.items.isEmpty) {
return const Center(child: Text('No categories found'));
}
return ListView.builder(
body: PaginationList(
provider: postCategoriesProvider,
notifier: postCategoriesProvider.notifier,
padding: EdgeInsets.zero,
itemCount: data.items.length + (data.hasMore ? 1 : 0),
itemBuilder: (context, index) {
if (index >= data.items.length) {
ref
.read(postCategoriesNotifierProvider.notifier)
.fetch(cursor: data.nextCursor);
return const Center(child: CircularProgressIndicator());
}
final category = data.items[index];
itemBuilder: (context, index, category) {
return ListTile(
leading: const Icon(Symbols.category),
contentPadding: EdgeInsets.symmetric(horizontal: 24),
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
trailing: const Icon(Symbols.chevron_right),
title: Text(category.categoryDisplayTitle),
subtitle: Text('postCount'.plural(category.usage)),
@@ -176,14 +82,6 @@ class PostCategoriesListScreen extends ConsumerWidget {
},
);
},
);
},
loading: () => const Center(child: CircularProgressIndicator()),
error:
(error, stack) => ResponseErrorWidget(
error: error,
onRetry: () => ref.invalidate(postCategoriesNotifierProvider),
),
),
);
}
@@ -194,29 +92,16 @@ class PostTagsListScreen extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final tagsState = ref.watch(postTagsNotifierProvider);
return AppScaffold(
appBar: AppBar(title: const Text('tags').tr()),
body: tagsState.when(
data: (data) {
if (data.items.isEmpty) {
return const Center(child: Text('No tags found'));
}
return ListView.builder(
body: PaginationList(
provider: postTagsProvider,
notifier: postTagsProvider.notifier,
padding: EdgeInsets.zero,
itemCount: data.items.length + (data.hasMore ? 1 : 0),
itemBuilder: (context, index) {
if (index >= data.items.length) {
ref
.read(postTagsNotifierProvider.notifier)
.fetch(cursor: data.nextCursor);
return const Center(child: CircularProgressIndicator());
}
final tag = data.items[index];
itemBuilder: (context, index, tag) {
return ListTile(
title: Text(tag.name ?? '#${tag.slug}'),
contentPadding: EdgeInsets.symmetric(horizontal: 24),
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
leading: const Icon(Symbols.label),
trailing: const Icon(Symbols.chevron_right),
subtitle: Text('postCount'.plural(tag.usage)),
@@ -228,14 +113,6 @@ class PostTagsListScreen extends ConsumerWidget {
},
);
},
);
},
loading: () => const Center(child: CircularProgressIndicator()),
error:
(error, stack) => ResponseErrorWidget(
error: error,
onRetry: () => ref.invalidate(postTagsNotifierProvider),
),
),
);
}

View File

@@ -6,406 +6,229 @@ part of 'post_category_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$postCategoryHash() => r'0df2de729ba96819ee37377314615abef0c99547';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [postCategory].
@ProviderFor(postCategory)
const postCategoryProvider = PostCategoryFamily();
const postCategoryProvider = PostCategoryFamily._();
/// See also [postCategory].
class PostCategoryFamily extends Family<AsyncValue<SnPostCategory>> {
/// See also [postCategory].
const PostCategoryFamily();
/// See also [postCategory].
PostCategoryProvider call(String slug) {
return PostCategoryProvider(slug);
}
@override
PostCategoryProvider getProviderOverride(
covariant PostCategoryProvider provider,
) {
return call(provider.slug);
}
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'postCategoryProvider';
}
/// See also [postCategory].
class PostCategoryProvider extends AutoDisposeFutureProvider<SnPostCategory> {
/// See also [postCategory].
PostCategoryProvider(String slug)
: this._internal(
(ref) => postCategory(ref as PostCategoryRef, slug),
from: postCategoryProvider,
final class PostCategoryProvider
extends
$FunctionalProvider<
AsyncValue<SnPostCategory>,
SnPostCategory,
FutureOr<SnPostCategory>
>
with $FutureModifier<SnPostCategory>, $FutureProvider<SnPostCategory> {
const PostCategoryProvider._({
required PostCategoryFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'postCategoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$postCategoryHash,
dependencies: PostCategoryFamily._dependencies,
allTransitiveDependencies:
PostCategoryFamily._allTransitiveDependencies,
slug: slug,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PostCategoryProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.slug,
}) : super.internal();
final String slug;
@override
Override overrideWith(
FutureOr<SnPostCategory> Function(PostCategoryRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PostCategoryProvider._internal(
(ref) => create(ref as PostCategoryRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
slug: slug,
),
);
String debugGetCreateSourceHash() => _$postCategoryHash();
@override
String toString() {
return r'postCategoryProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPostCategory> createElement() {
return _PostCategoryProviderElement(this);
$FutureProviderElement<SnPostCategory> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPostCategory> create(Ref ref) {
final argument = this.argument as String;
return postCategory(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PostCategoryProvider && other.slug == slug;
return other is PostCategoryProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, slug.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PostCategoryRef on AutoDisposeFutureProviderRef<SnPostCategory> {
/// The parameter `slug` of this provider.
String get slug;
}
String _$postCategoryHash() => r'0df2de729ba96819ee37377314615abef0c99547';
class _PostCategoryProviderElement
extends AutoDisposeFutureProviderElement<SnPostCategory>
with PostCategoryRef {
_PostCategoryProviderElement(super.provider);
final class PostCategoryFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPostCategory>, String> {
const PostCategoryFamily._()
: super(
retry: null,
name: r'postCategoryProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PostCategoryProvider call(String slug) =>
PostCategoryProvider._(argument: slug, from: this);
@override
String get slug => (origin as PostCategoryProvider).slug;
String toString() => r'postCategoryProvider';
}
@ProviderFor(postTag)
const postTagProvider = PostTagFamily._();
final class PostTagProvider
extends
$FunctionalProvider<
AsyncValue<SnPostTag>,
SnPostTag,
FutureOr<SnPostTag>
>
with $FutureModifier<SnPostTag>, $FutureProvider<SnPostTag> {
const PostTagProvider._({
required PostTagFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'postTagProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$postTagHash();
@override
String toString() {
return r'postTagProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnPostTag> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnPostTag> create(Ref ref) {
final argument = this.argument as String;
return postTag(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PostTagProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$postTagHash() => r'e050fdf9af81a843a9abd9cf979dd2672e0a2b93';
/// See also [postTag].
@ProviderFor(postTag)
const postTagProvider = PostTagFamily();
/// See also [postTag].
class PostTagFamily extends Family<AsyncValue<SnPostTag>> {
/// See also [postTag].
const PostTagFamily();
/// See also [postTag].
PostTagProvider call(String slug) {
return PostTagProvider(slug);
}
@override
PostTagProvider getProviderOverride(covariant PostTagProvider provider) {
return call(provider.slug);
}
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'postTagProvider';
}
/// See also [postTag].
class PostTagProvider extends AutoDisposeFutureProvider<SnPostTag> {
/// See also [postTag].
PostTagProvider(String slug)
: this._internal(
(ref) => postTag(ref as PostTagRef, slug),
from: postTagProvider,
final class PostTagFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPostTag>, String> {
const PostTagFamily._()
: super(
retry: null,
name: r'postTagProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$postTagHash,
dependencies: PostTagFamily._dependencies,
allTransitiveDependencies: PostTagFamily._allTransitiveDependencies,
slug: slug,
);
PostTagProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.slug,
}) : super.internal();
final String slug;
@override
Override overrideWith(
FutureOr<SnPostTag> Function(PostTagRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PostTagProvider._internal(
(ref) => create(ref as PostTagRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
slug: slug,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
PostTagProvider call(String slug) =>
PostTagProvider._(argument: slug, from: this);
@override
AutoDisposeFutureProviderElement<SnPostTag> createElement() {
return _PostTagProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PostTagProvider && other.slug == slug;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, slug.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'postTagProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PostTagRef on AutoDisposeFutureProviderRef<SnPostTag> {
/// The parameter `slug` of this provider.
String get slug;
}
class _PostTagProviderElement
extends AutoDisposeFutureProviderElement<SnPostTag>
with PostTagRef {
_PostTagProviderElement(super.provider);
@override
String get slug => (origin as PostTagProvider).slug;
}
String _$postCategorySubscriptionStatusHash() =>
r'407dc7fcaeffc461b591b4ee2418811aa4f0a63f';
/// See also [postCategorySubscriptionStatus].
@ProviderFor(postCategorySubscriptionStatus)
const postCategorySubscriptionStatusProvider =
PostCategorySubscriptionStatusFamily();
PostCategorySubscriptionStatusFamily._();
/// See also [postCategorySubscriptionStatus].
class PostCategorySubscriptionStatusFamily extends Family<AsyncValue<bool>> {
/// See also [postCategorySubscriptionStatus].
const PostCategorySubscriptionStatusFamily();
/// See also [postCategorySubscriptionStatus].
PostCategorySubscriptionStatusProvider call(String slug, bool isCategory) {
return PostCategorySubscriptionStatusProvider(slug, isCategory);
}
@override
PostCategorySubscriptionStatusProvider getProviderOverride(
covariant PostCategorySubscriptionStatusProvider provider,
) {
return call(provider.slug, provider.isCategory);
}
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'postCategorySubscriptionStatusProvider';
}
/// See also [postCategorySubscriptionStatus].
class PostCategorySubscriptionStatusProvider
extends AutoDisposeFutureProvider<bool> {
/// See also [postCategorySubscriptionStatus].
PostCategorySubscriptionStatusProvider(String slug, bool isCategory)
: this._internal(
(ref) => postCategorySubscriptionStatus(
ref as PostCategorySubscriptionStatusRef,
slug,
isCategory,
),
from: postCategorySubscriptionStatusProvider,
final class PostCategorySubscriptionStatusProvider
extends $FunctionalProvider<AsyncValue<bool>, bool, FutureOr<bool>>
with $FutureModifier<bool>, $FutureProvider<bool> {
const PostCategorySubscriptionStatusProvider._({
required PostCategorySubscriptionStatusFamily super.from,
required (String, bool) super.argument,
}) : super(
retry: null,
name: r'postCategorySubscriptionStatusProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$postCategorySubscriptionStatusHash,
dependencies: PostCategorySubscriptionStatusFamily._dependencies,
allTransitiveDependencies:
PostCategorySubscriptionStatusFamily._allTransitiveDependencies,
slug: slug,
isCategory: isCategory,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PostCategorySubscriptionStatusProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.slug,
required this.isCategory,
}) : super.internal();
final String slug;
final bool isCategory;
@override
Override overrideWith(
FutureOr<bool> Function(PostCategorySubscriptionStatusRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PostCategorySubscriptionStatusProvider._internal(
(ref) => create(ref as PostCategorySubscriptionStatusRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
slug: slug,
isCategory: isCategory,
),
);
String debugGetCreateSourceHash() => _$postCategorySubscriptionStatusHash();
@override
String toString() {
return r'postCategorySubscriptionStatusProvider'
''
'$argument';
}
@$internal
@override
AutoDisposeFutureProviderElement<bool> createElement() {
return _PostCategorySubscriptionStatusProviderElement(this);
$FutureProviderElement<bool> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<bool> create(Ref ref) {
final argument = this.argument as (String, bool);
return postCategorySubscriptionStatus(ref, argument.$1, argument.$2);
}
@override
bool operator ==(Object other) {
return other is PostCategorySubscriptionStatusProvider &&
other.slug == slug &&
other.isCategory == isCategory;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, slug.hashCode);
hash = _SystemHash.combine(hash, isCategory.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PostCategorySubscriptionStatusRef on AutoDisposeFutureProviderRef<bool> {
/// The parameter `slug` of this provider.
String get slug;
String _$postCategorySubscriptionStatusHash() =>
r'407dc7fcaeffc461b591b4ee2418811aa4f0a63f';
/// The parameter `isCategory` of this provider.
bool get isCategory;
}
final class PostCategorySubscriptionStatusFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<bool>, (String, bool)> {
const PostCategorySubscriptionStatusFamily._()
: super(
retry: null,
name: r'postCategorySubscriptionStatusProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
class _PostCategorySubscriptionStatusProviderElement
extends AutoDisposeFutureProviderElement<bool>
with PostCategorySubscriptionStatusRef {
_PostCategorySubscriptionStatusProviderElement(super.provider);
PostCategorySubscriptionStatusProvider call(String slug, bool isCategory) =>
PostCategorySubscriptionStatusProvider._(
argument: (slug, isCategory),
from: this,
);
@override
String get slug => (origin as PostCategorySubscriptionStatusProvider).slug;
@override
bool get isCategory =>
(origin as PostCategorySubscriptionStatusProvider).isCategory;
String toString() => r'postCategorySubscriptionStatusProvider';
}
// 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

View File

@@ -17,8 +17,8 @@ import 'package:island/widgets/post/post_item.dart';
import 'package:island/widgets/post/post_award_history_sheet.dart';
import 'package:island/widgets/post/post_pin_sheet.dart';
import 'package:island/widgets/post/post_quick_reply.dart';
import 'package:island/widgets/post/post_replies.dart';
import 'package:island/widgets/post/compose_sheet.dart';
import 'package:island/widgets/post/post_replies.dart';
import 'package:island/widgets/response.dart';
import 'package:island/utils/share_utils.dart';
import 'package:island/widgets/safety/abuse_report_helper.dart';
@@ -38,20 +38,21 @@ Future<SnPost?> post(Ref ref, String id) async {
}
final postStateProvider =
StateNotifierProvider.family<PostState, AsyncValue<SnPost?>, String>(
(ref, id) => PostState(ref, id),
NotifierProvider.family<PostState, AsyncValue<SnPost?>, String>(
PostState.new,
);
class PostState extends StateNotifier<AsyncValue<SnPost?>> {
final Ref _ref;
final String _id;
class PostState extends Notifier<AsyncValue<SnPost?>> {
final String arg;
PostState(this.arg);
PostState(this._ref, this._id) : super(const AsyncValue.loading()) {
// Initialize with the initial post data
_ref.listen<AsyncValue<SnPost?>>(
postProvider(_id),
@override
AsyncValue<SnPost?> build() {
ref.listen<AsyncValue<SnPost?>>(
postProvider(arg),
(_, next) => state = next,
);
return const AsyncValue.loading();
}
void updatePost(SnPost? newPost) {
@@ -460,7 +461,7 @@ class PostDetailScreen extends HookConsumerWidget {
ExtendedRefreshIndicator(
onRefresh: () async {
ref.invalidate(postProvider(id));
ref.invalidate(postRepliesNotifierProvider(id));
ref.read(postRepliesProvider(id).notifier).refresh();
},
child: CustomScrollView(
physics: const AlwaysScrollableScrollPhysics(),
@@ -494,7 +495,9 @@ class PostDetailScreen extends HookConsumerWidget {
),
onRefresh: () {
ref.invalidate(postProvider(id));
ref.invalidate(postRepliesNotifierProvider(id));
ref
.read(postRepliesProvider(id).notifier)
.refresh();
},
onUpdate: (newItem) {
ref
@@ -523,9 +526,9 @@ class PostDetailScreen extends HookConsumerWidget {
(post) => PostQuickReply(
parent: post!,
onPosted: () {
ref.invalidate(
postRepliesNotifierProvider(id),
);
ref
.read(postRepliesProvider(id).notifier)
.refresh();
},
),
loading: () => const SizedBox.shrink(),

View File

@@ -6,139 +6,73 @@ part of 'post_detail.dart';
// RiverpodGenerator
// **************************************************************************
String _$postHash() => r'66c2eb074c6d7467fef81cab70a13356e648e661';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [post].
@ProviderFor(post)
const postProvider = PostFamily();
const postProvider = PostFamily._();
/// See also [post].
class PostFamily extends Family<AsyncValue<SnPost?>> {
/// See also [post].
const PostFamily();
/// See also [post].
PostProvider call(String id) {
return PostProvider(id);
}
@override
PostProvider getProviderOverride(covariant PostProvider provider) {
return call(provider.id);
}
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'postProvider';
}
/// See also [post].
class PostProvider extends AutoDisposeFutureProvider<SnPost?> {
/// See also [post].
PostProvider(String id)
: this._internal(
(ref) => post(ref as PostRef, id),
from: postProvider,
final class PostProvider
extends $FunctionalProvider<AsyncValue<SnPost?>, SnPost?, FutureOr<SnPost?>>
with $FutureModifier<SnPost?>, $FutureProvider<SnPost?> {
const PostProvider._({
required PostFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'postProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$postHash,
dependencies: PostFamily._dependencies,
allTransitiveDependencies: PostFamily._allTransitiveDependencies,
id: id,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PostProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.id,
}) : super.internal();
final String id;
@override
Override overrideWith(FutureOr<SnPost?> Function(PostRef provider) create) {
return ProviderOverride(
origin: this,
override: PostProvider._internal(
(ref) => create(ref as PostRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
id: id,
),
);
String debugGetCreateSourceHash() => _$postHash();
@override
String toString() {
return r'postProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPost?> createElement() {
return _PostProviderElement(this);
$FutureProviderElement<SnPost?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnPost?> create(Ref ref) {
final argument = this.argument as String;
return post(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PostProvider && other.id == id;
return other is PostProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, id.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PostRef on AutoDisposeFutureProviderRef<SnPost?> {
/// The parameter `id` of this provider.
String get id;
}
String _$postHash() => r'66c2eb074c6d7467fef81cab70a13356e648e661';
class _PostProviderElement extends AutoDisposeFutureProviderElement<SnPost?>
with PostRef {
_PostProviderElement(super.provider);
final class PostFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPost?>, String> {
const PostFamily._()
: super(
retry: null,
name: r'postProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PostProvider call(String id) => PostProvider._(argument: id, from: this);
@override
String get id => (origin as PostProvider).id;
String toString() => r'postProvider';
}
// 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

View File

@@ -7,18 +7,17 @@ import 'package:island/models/post.dart';
import 'package:island/pods/network.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/post/post_item.dart';
import 'package:island/widgets/response.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:styled_widget/styled_widget.dart';
final postSearchNotifierProvider = StateNotifierProvider.autoDispose<
PostSearchNotifier,
AsyncValue<CursorPagingData<SnPost>>
>((ref) => PostSearchNotifier(ref));
final postSearchProvider = AsyncNotifierProvider.autoDispose(
PostSearchNotifier.new,
);
class PostSearchNotifier
extends StateNotifier<AsyncValue<CursorPagingData<SnPost>>> {
final AutoDisposeRef ref;
class PostSearchNotifier extends AsyncNotifier<List<SnPost>>
with AsyncPaginationController<SnPost> {
static const int _pageSize = 20;
String _currentQuery = '';
String? _pubName;
@@ -28,12 +27,13 @@ class PostSearchNotifier
List<String>? _tags;
bool _shuffle = false;
bool? _pinned;
bool _isLoading = false;
PostSearchNotifier(this.ref) : super(const AsyncValue.loading()) {
state = const AsyncValue.data(
CursorPagingData(items: [], hasMore: false, nextCursor: null),
);
@override
FutureOr<List<SnPost>> build() async {
// Initial state is empty if no query/filters, or fetch if needed
// But original logic allowed initial empty state.
// Let's replicate original logic: return empty list initially if no query.
return [];
}
Future<void> search(
@@ -46,8 +46,6 @@ class PostSearchNotifier
bool shuffle = false,
bool? pinned,
}) async {
if (_isLoading) return;
_currentQuery = query.trim();
_pubName = pubName;
_realm = realm;
@@ -57,7 +55,6 @@ class PostSearchNotifier
_shuffle = shuffle;
_pinned = pinned;
// Allow search even with empty query if any filters are applied
final hasFilters =
pubName != null ||
realm != null ||
@@ -68,30 +65,23 @@ class PostSearchNotifier
pinned != null;
if (_currentQuery.isEmpty && !hasFilters) {
state = AsyncValue.data(
CursorPagingData(items: [], hasMore: false, nextCursor: null),
);
state = const AsyncData([]);
totalCount = null;
return;
}
await fetch(cursor: null);
await refresh();
}
Future<void> fetch({String? cursor}) async {
if (_isLoading) return;
_isLoading = true;
state = const AsyncValue.loading();
try {
@override
Future<List<SnPost>> fetch() async {
final client = ref.read(apiClientProvider);
final offset = cursor == null ? 0 : int.parse(cursor);
final response = await client.get(
'/sphere/posts',
queryParameters: {
'query': _currentQuery,
'offset': offset,
'offset': fetchedCount,
'take': _pageSize,
'vector': false,
if (_pubName != null) 'pub': _pubName,
@@ -104,23 +94,9 @@ class PostSearchNotifier
},
);
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final data = response.data as List;
final posts = data.map((json) => SnPost.fromJson(json)).toList();
final hasMore = posts.length == _pageSize;
final nextCursor = hasMore ? (offset + posts.length).toString() : null;
state = AsyncValue.data(
CursorPagingData(
items: posts,
hasMore: hasMore,
nextCursor: nextCursor,
),
);
} catch (e, stack) {
state = AsyncValue.error(e, stack);
} finally {
_isLoading = false;
}
return data.map((json) => SnPost.fromJson(json)).toList();
}
}
@@ -154,7 +130,7 @@ class PostSearchScreen extends HookConsumerWidget {
if (debounceTimer.value?.isActive ?? false) debounceTimer.value!.cancel();
debounceTimer.value = Timer(debounce, () {
ref.read(postSearchNotifierProvider.notifier).search(query);
ref.read(postSearchProvider.notifier).search(query);
});
}
@@ -163,7 +139,7 @@ class PostSearchScreen extends HookConsumerWidget {
debounceTimer.value = Timer(debounce, () {
ref
.read(postSearchNotifierProvider.notifier)
.read(postSearchProvider.notifier)
.search(
query,
pubName:
@@ -326,7 +302,7 @@ class PostSearchScreen extends HookConsumerWidget {
),
body: Consumer(
builder: (context, ref, child) {
final searchState = ref.watch(postSearchNotifierProvider);
final searchState = ref.watch(postSearchProvider);
return CustomScrollView(
slivers: [
@@ -339,24 +315,14 @@ class PostSearchScreen extends HookConsumerWidget {
),
),
),
searchState.when(
data: (data) {
if (data.items.isEmpty && searchController.text.isNotEmpty) {
return SliverFillRemaining(
child: Center(child: Text('noResultsFound'.tr())),
);
}
return SliverList(
delegate: SliverChildBuilderDelegate((context, index) {
if (index >= data.items.length) {
ref
.read(postSearchNotifierProvider.notifier)
.fetch(cursor: data.nextCursor);
return Center(child: CircularProgressIndicator());
}
final post = data.items[index];
// Use PaginationList with isSliver=true
PaginationList(
provider: postSearchProvider,
notifier: postSearchProvider.notifier,
isSliver: true,
isRefreshable:
false, // CustomScrollView handles refreshing usually, but here we don't have PullToRefresh
itemBuilder: (context, index, post) {
return Center(
child: ConstrainedBox(
constraints: BoxConstraints(maxWidth: 600),
@@ -365,28 +331,17 @@ class PostSearchScreen extends HookConsumerWidget {
horizontal: 8,
vertical: 4,
),
child: PostActionableItem(
item: post,
borderRadius: 8,
child: PostActionableItem(item: post, borderRadius: 8),
),
),
),
);
}, childCount: data.items.length + (data.hasMore ? 1 : 0)),
);
},
loading:
() => SliverFillRemaining(
child: Center(child: CircularProgressIndicator()),
),
error:
(error, stack) => SliverFillRemaining(
child: ResponseErrorWidget(
error: error,
onRetry:
() => ref.invalidate(postSearchNotifierProvider),
),
),
if (searchState.value?.isEmpty == true &&
searchController.text.isNotEmpty &&
!searchState.isLoading)
SliverFillRemaining(
child: Center(child: Text('noResultsFound'.tr())),
),
],
);

View File

@@ -6,650 +6,383 @@ part of 'publisher_profile.dart';
// RiverpodGenerator
// **************************************************************************
String _$publisherHash() => r'a1da21f0275421382e2882fd52c4e061c4675cf7';
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
/// 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 [publisher].
@ProviderFor(publisher)
const publisherProvider = PublisherFamily();
const publisherProvider = PublisherFamily._();
/// See also [publisher].
class PublisherFamily extends Family<AsyncValue<SnPublisher>> {
/// See also [publisher].
const PublisherFamily();
/// See also [publisher].
PublisherProvider call(String uname) {
return PublisherProvider(uname);
}
@override
PublisherProvider getProviderOverride(covariant PublisherProvider provider) {
return call(provider.uname);
}
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'publisherProvider';
}
/// See also [publisher].
class PublisherProvider extends AutoDisposeFutureProvider<SnPublisher> {
/// See also [publisher].
PublisherProvider(String uname)
: this._internal(
(ref) => publisher(ref as PublisherRef, uname),
from: publisherProvider,
final class PublisherProvider
extends
$FunctionalProvider<
AsyncValue<SnPublisher>,
SnPublisher,
FutureOr<SnPublisher>
>
with $FutureModifier<SnPublisher>, $FutureProvider<SnPublisher> {
const PublisherProvider._({
required PublisherFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherHash,
dependencies: PublisherFamily._dependencies,
allTransitiveDependencies: PublisherFamily._allTransitiveDependencies,
uname: uname,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String uname;
@override
Override overrideWith(
FutureOr<SnPublisher> Function(PublisherRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherProvider._internal(
(ref) => create(ref as PublisherRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
);
String debugGetCreateSourceHash() => _$publisherHash();
@override
String toString() {
return r'publisherProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnPublisher> createElement() {
return _PublisherProviderElement(this);
$FutureProviderElement<SnPublisher> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnPublisher> create(Ref ref) {
final argument = this.argument as String;
return publisher(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherProvider && other.uname == uname;
return other is PublisherProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherRef on AutoDisposeFutureProviderRef<SnPublisher> {
/// The parameter `uname` of this provider.
String get uname;
}
String _$publisherHash() => r'a1da21f0275421382e2882fd52c4e061c4675cf7';
class _PublisherProviderElement
extends AutoDisposeFutureProviderElement<SnPublisher>
with PublisherRef {
_PublisherProviderElement(super.provider);
final class PublisherFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnPublisher>, String> {
const PublisherFamily._()
: super(
retry: null,
name: r'publisherProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PublisherProvider call(String uname) =>
PublisherProvider._(argument: uname, from: this);
@override
String get uname => (origin as PublisherProvider).uname;
String toString() => r'publisherProvider';
}
@ProviderFor(publisherBadges)
const publisherBadgesProvider = PublisherBadgesFamily._();
final class PublisherBadgesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnAccountBadge>>,
List<SnAccountBadge>,
FutureOr<List<SnAccountBadge>>
>
with
$FutureModifier<List<SnAccountBadge>>,
$FutureProvider<List<SnAccountBadge>> {
const PublisherBadgesProvider._({
required PublisherBadgesFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherBadgesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$publisherBadgesHash();
@override
String toString() {
return r'publisherBadgesProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<List<SnAccountBadge>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnAccountBadge>> create(Ref ref) {
final argument = this.argument as String;
return publisherBadges(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherBadgesProvider && other.argument == argument;
}
@override
int get hashCode {
return argument.hashCode;
}
}
String _$publisherBadgesHash() => r'26776fd6cb611953f52bdb6a7dfa004c34d5cd8e';
/// See also [publisherBadges].
@ProviderFor(publisherBadges)
const publisherBadgesProvider = PublisherBadgesFamily();
/// See also [publisherBadges].
class PublisherBadgesFamily extends Family<AsyncValue<List<SnAccountBadge>>> {
/// See also [publisherBadges].
const PublisherBadgesFamily();
/// See also [publisherBadges].
PublisherBadgesProvider call(String pubName) {
return PublisherBadgesProvider(pubName);
}
@override
PublisherBadgesProvider getProviderOverride(
covariant PublisherBadgesProvider provider,
) {
return call(provider.pubName);
}
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'publisherBadgesProvider';
}
/// See also [publisherBadges].
class PublisherBadgesProvider
extends AutoDisposeFutureProvider<List<SnAccountBadge>> {
/// See also [publisherBadges].
PublisherBadgesProvider(String pubName)
: this._internal(
(ref) => publisherBadges(ref as PublisherBadgesRef, pubName),
from: publisherBadgesProvider,
final class PublisherBadgesFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<List<SnAccountBadge>>, String> {
const PublisherBadgesFamily._()
: super(
retry: null,
name: r'publisherBadgesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherBadgesHash,
dependencies: PublisherBadgesFamily._dependencies,
allTransitiveDependencies:
PublisherBadgesFamily._allTransitiveDependencies,
pubName: pubName,
);
PublisherBadgesProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String pubName;
@override
Override overrideWith(
FutureOr<List<SnAccountBadge>> Function(PublisherBadgesRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherBadgesProvider._internal(
(ref) => create(ref as PublisherBadgesRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
PublisherBadgesProvider call(String pubName) =>
PublisherBadgesProvider._(argument: pubName, from: this);
@override
AutoDisposeFutureProviderElement<List<SnAccountBadge>> createElement() {
return _PublisherBadgesProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PublisherBadgesProvider && other.pubName == pubName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
}
String toString() => r'publisherBadgesProvider';
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherBadgesRef on AutoDisposeFutureProviderRef<List<SnAccountBadge>> {
/// The parameter `pubName` of this provider.
String get pubName;
}
class _PublisherBadgesProviderElement
extends AutoDisposeFutureProviderElement<List<SnAccountBadge>>
with PublisherBadgesRef {
_PublisherBadgesProviderElement(super.provider);
@override
String get pubName => (origin as PublisherBadgesProvider).pubName;
}
String _$publisherSubscriptionStatusHash() =>
r'634262ce519e1c8288267df11e08e1d4acaa4a44';
/// See also [publisherSubscriptionStatus].
@ProviderFor(publisherSubscriptionStatus)
const publisherSubscriptionStatusProvider = PublisherSubscriptionStatusFamily();
const publisherSubscriptionStatusProvider =
PublisherSubscriptionStatusFamily._();
/// See also [publisherSubscriptionStatus].
class PublisherSubscriptionStatusFamily
extends Family<AsyncValue<SnSubscriptionStatus>> {
/// See also [publisherSubscriptionStatus].
const PublisherSubscriptionStatusFamily();
/// See also [publisherSubscriptionStatus].
PublisherSubscriptionStatusProvider call(String pubName) {
return PublisherSubscriptionStatusProvider(pubName);
}
@override
PublisherSubscriptionStatusProvider getProviderOverride(
covariant PublisherSubscriptionStatusProvider provider,
) {
return call(provider.pubName);
}
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'publisherSubscriptionStatusProvider';
}
/// See also [publisherSubscriptionStatus].
class PublisherSubscriptionStatusProvider
extends AutoDisposeFutureProvider<SnSubscriptionStatus> {
/// See also [publisherSubscriptionStatus].
PublisherSubscriptionStatusProvider(String pubName)
: this._internal(
(ref) => publisherSubscriptionStatus(
ref as PublisherSubscriptionStatusRef,
pubName,
),
from: publisherSubscriptionStatusProvider,
final class PublisherSubscriptionStatusProvider
extends
$FunctionalProvider<
AsyncValue<SnSubscriptionStatus>,
SnSubscriptionStatus,
FutureOr<SnSubscriptionStatus>
>
with
$FutureModifier<SnSubscriptionStatus>,
$FutureProvider<SnSubscriptionStatus> {
const PublisherSubscriptionStatusProvider._({
required PublisherSubscriptionStatusFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherSubscriptionStatusProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherSubscriptionStatusHash,
dependencies: PublisherSubscriptionStatusFamily._dependencies,
allTransitiveDependencies:
PublisherSubscriptionStatusFamily._allTransitiveDependencies,
pubName: pubName,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherSubscriptionStatusProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String pubName;
@override
Override overrideWith(
FutureOr<SnSubscriptionStatus> Function(
PublisherSubscriptionStatusRef provider,
)
create,
) {
return ProviderOverride(
origin: this,
override: PublisherSubscriptionStatusProvider._internal(
(ref) => create(ref as PublisherSubscriptionStatusRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
String debugGetCreateSourceHash() => _$publisherSubscriptionStatusHash();
@override
String toString() {
return r'publisherSubscriptionStatusProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnSubscriptionStatus> createElement() {
return _PublisherSubscriptionStatusProviderElement(this);
$FutureProviderElement<SnSubscriptionStatus> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<SnSubscriptionStatus> create(Ref ref) {
final argument = this.argument as String;
return publisherSubscriptionStatus(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherSubscriptionStatusProvider &&
other.pubName == pubName;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherSubscriptionStatusRef
on AutoDisposeFutureProviderRef<SnSubscriptionStatus> {
/// The parameter `pubName` of this provider.
String get pubName;
}
String _$publisherSubscriptionStatusHash() =>
r'634262ce519e1c8288267df11e08e1d4acaa4a44';
class _PublisherSubscriptionStatusProviderElement
extends AutoDisposeFutureProviderElement<SnSubscriptionStatus>
with PublisherSubscriptionStatusRef {
_PublisherSubscriptionStatusProviderElement(super.provider);
final class PublisherSubscriptionStatusFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnSubscriptionStatus>, String> {
const PublisherSubscriptionStatusFamily._()
: super(
retry: null,
name: r'publisherSubscriptionStatusProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PublisherSubscriptionStatusProvider call(String pubName) =>
PublisherSubscriptionStatusProvider._(argument: pubName, from: this);
@override
String get pubName => (origin as PublisherSubscriptionStatusProvider).pubName;
String toString() => r'publisherSubscriptionStatusProvider';
}
String _$publisherAppbarForcegroundColorHash() =>
r'cd9a9816177a6eecc2bc354acebbbd48892ffdd7';
/// See also [publisherAppbarForcegroundColor].
@ProviderFor(publisherAppbarForcegroundColor)
const publisherAppbarForcegroundColorProvider =
PublisherAppbarForcegroundColorFamily();
PublisherAppbarForcegroundColorFamily._();
/// See also [publisherAppbarForcegroundColor].
class PublisherAppbarForcegroundColorFamily extends Family<AsyncValue<Color?>> {
/// See also [publisherAppbarForcegroundColor].
const PublisherAppbarForcegroundColorFamily();
/// See also [publisherAppbarForcegroundColor].
PublisherAppbarForcegroundColorProvider call(String pubName) {
return PublisherAppbarForcegroundColorProvider(pubName);
}
@override
PublisherAppbarForcegroundColorProvider getProviderOverride(
covariant PublisherAppbarForcegroundColorProvider provider,
) {
return call(provider.pubName);
}
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'publisherAppbarForcegroundColorProvider';
}
/// See also [publisherAppbarForcegroundColor].
class PublisherAppbarForcegroundColorProvider
extends AutoDisposeFutureProvider<Color?> {
/// See also [publisherAppbarForcegroundColor].
PublisherAppbarForcegroundColorProvider(String pubName)
: this._internal(
(ref) => publisherAppbarForcegroundColor(
ref as PublisherAppbarForcegroundColorRef,
pubName,
),
from: publisherAppbarForcegroundColorProvider,
final class PublisherAppbarForcegroundColorProvider
extends $FunctionalProvider<AsyncValue<Color?>, Color?, FutureOr<Color?>>
with $FutureModifier<Color?>, $FutureProvider<Color?> {
const PublisherAppbarForcegroundColorProvider._({
required PublisherAppbarForcegroundColorFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherAppbarForcegroundColorProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherAppbarForcegroundColorHash,
dependencies: PublisherAppbarForcegroundColorFamily._dependencies,
allTransitiveDependencies:
PublisherAppbarForcegroundColorFamily._allTransitiveDependencies,
pubName: pubName,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
PublisherAppbarForcegroundColorProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.pubName,
}) : super.internal();
final String pubName;
@override
Override overrideWith(
FutureOr<Color?> Function(PublisherAppbarForcegroundColorRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: PublisherAppbarForcegroundColorProvider._internal(
(ref) => create(ref as PublisherAppbarForcegroundColorRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
pubName: pubName,
),
);
String debugGetCreateSourceHash() => _$publisherAppbarForcegroundColorHash();
@override
String toString() {
return r'publisherAppbarForcegroundColorProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<Color?> createElement() {
return _PublisherAppbarForcegroundColorProviderElement(this);
$FutureProviderElement<Color?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<Color?> create(Ref ref) {
final argument = this.argument as String;
return publisherAppbarForcegroundColor(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherAppbarForcegroundColorProvider &&
other.pubName == pubName;
other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, pubName.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherAppbarForcegroundColorRef
on AutoDisposeFutureProviderRef<Color?> {
/// The parameter `pubName` of this provider.
String get pubName;
}
String _$publisherAppbarForcegroundColorHash() =>
r'cd9a9816177a6eecc2bc354acebbbd48892ffdd7';
class _PublisherAppbarForcegroundColorProviderElement
extends AutoDisposeFutureProviderElement<Color?>
with PublisherAppbarForcegroundColorRef {
_PublisherAppbarForcegroundColorProviderElement(super.provider);
@override
String get pubName =>
(origin as PublisherAppbarForcegroundColorProvider).pubName;
}
String _$publisherHeatmapHash() => r'86db275ce3861a2855b5ec35fbfef85fc47b23a6';
/// See also [publisherHeatmap].
@ProviderFor(publisherHeatmap)
const publisherHeatmapProvider = PublisherHeatmapFamily();
/// See also [publisherHeatmap].
class PublisherHeatmapFamily extends Family<AsyncValue<SnHeatmap?>> {
/// See also [publisherHeatmap].
const PublisherHeatmapFamily();
/// See also [publisherHeatmap].
PublisherHeatmapProvider call(String uname) {
return PublisherHeatmapProvider(uname);
}
@override
PublisherHeatmapProvider getProviderOverride(
covariant PublisherHeatmapProvider provider,
) {
return call(provider.uname);
}
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'publisherHeatmapProvider';
}
/// See also [publisherHeatmap].
class PublisherHeatmapProvider extends AutoDisposeFutureProvider<SnHeatmap?> {
/// See also [publisherHeatmap].
PublisherHeatmapProvider(String uname)
: this._internal(
(ref) => publisherHeatmap(ref as PublisherHeatmapRef, uname),
from: publisherHeatmapProvider,
name: r'publisherHeatmapProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$publisherHeatmapHash,
dependencies: PublisherHeatmapFamily._dependencies,
allTransitiveDependencies:
PublisherHeatmapFamily._allTransitiveDependencies,
uname: uname,
);
PublisherHeatmapProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.uname,
}) : super.internal();
final String uname;
@override
Override overrideWith(
FutureOr<SnHeatmap?> Function(PublisherHeatmapRef provider) create,
) {
return ProviderOverride(
origin: this,
override: PublisherHeatmapProvider._internal(
(ref) => create(ref as PublisherHeatmapRef),
from: from,
name: null,
final class PublisherAppbarForcegroundColorFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<Color?>, String> {
const PublisherAppbarForcegroundColorFamily._()
: super(
retry: null,
name: r'publisherAppbarForcegroundColorProvider',
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
uname: uname,
),
$allTransitiveDependencies: null,
isAutoDispose: true,
);
}
PublisherAppbarForcegroundColorProvider call(String pubName) =>
PublisherAppbarForcegroundColorProvider._(argument: pubName, from: this);
@override
AutoDisposeFutureProviderElement<SnHeatmap?> createElement() {
return _PublisherHeatmapProviderElement(this);
String toString() => r'publisherAppbarForcegroundColorProvider';
}
@ProviderFor(publisherHeatmap)
const publisherHeatmapProvider = PublisherHeatmapFamily._();
final class PublisherHeatmapProvider
extends
$FunctionalProvider<
AsyncValue<SnHeatmap?>,
SnHeatmap?,
FutureOr<SnHeatmap?>
>
with $FutureModifier<SnHeatmap?>, $FutureProvider<SnHeatmap?> {
const PublisherHeatmapProvider._({
required PublisherHeatmapFamily super.from,
required String super.argument,
}) : super(
retry: null,
name: r'publisherHeatmapProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$publisherHeatmapHash();
@override
String toString() {
return r'publisherHeatmapProvider'
''
'($argument)';
}
@$internal
@override
$FutureProviderElement<SnHeatmap?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnHeatmap?> create(Ref ref) {
final argument = this.argument as String;
return publisherHeatmap(ref, argument);
}
@override
bool operator ==(Object other) {
return other is PublisherHeatmapProvider && other.uname == uname;
return other is PublisherHeatmapProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, uname.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PublisherHeatmapRef on AutoDisposeFutureProviderRef<SnHeatmap?> {
/// The parameter `uname` of this provider.
String get uname;
}
String _$publisherHeatmapHash() => r'86db275ce3861a2855b5ec35fbfef85fc47b23a6';
class _PublisherHeatmapProviderElement
extends AutoDisposeFutureProviderElement<SnHeatmap?>
with PublisherHeatmapRef {
_PublisherHeatmapProviderElement(super.provider);
final class PublisherHeatmapFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnHeatmap?>, String> {
const PublisherHeatmapFamily._()
: super(
retry: null,
name: r'publisherHeatmapProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
PublisherHeatmapProvider call(String uname) =>
PublisherHeatmapProvider._(argument: uname, from: this);
@override
String get uname => (origin as PublisherHeatmapProvider).uname;
String toString() => r'publisherHeatmapProvider';
}
// 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

View File

@@ -22,14 +22,12 @@ import 'package:island/widgets/alert.dart';
import 'package:island/widgets/app_scaffold.dart';
import 'package:island/widgets/content/cloud_files.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
import 'package:island/pods/paging.dart';
import 'package:island/widgets/paging/pagination_list.dart';
import 'package:styled_widget/styled_widget.dart';
part 'realm_detail.g.dart';
@riverpod
Future<Color?> realmAppbarForegroundColor(Ref ref, String realmSlug) async {
final realmAppbarForegroundColorProvider = FutureProvider.autoDispose
.family<Color?, String>((ref, realmSlug) async {
final realm = await ref.watch(realmProvider(realmSlug).future);
if (realm?.background == null) return null;
final colors = await ColorExtractionService.getColorsFromImage(
@@ -40,14 +38,18 @@ Future<Color?> realmAppbarForegroundColor(Ref ref, String realmSlug) async {
);
if (colors.isEmpty) return null;
final dominantColor = colors.first;
return dominantColor.computeLuminance() > 0.5 ? Colors.black : Colors.white;
}
return dominantColor.computeLuminance() > 0.5
? Colors.black
: Colors.white;
});
@riverpod
Future<SnRealmMember?> realmIdentity(Ref ref, String realmSlug) async {
final realmIdentityProvider = FutureProvider.autoDispose
.family<SnRealmMember?, String>((ref, realmSlug) async {
try {
final apiClient = ref.watch(apiClientProvider);
final response = await apiClient.get('/pass/realms/$realmSlug/members/me');
final response = await apiClient.get(
'/pass/realms/$realmSlug/members/me',
);
return SnRealmMember.fromJson(response.data);
} catch (err) {
if (err is DioException && err.response?.statusCode == 404) {
@@ -55,14 +57,16 @@ Future<SnRealmMember?> realmIdentity(Ref ref, String realmSlug) async {
}
rethrow;
}
}
});
@riverpod
Future<List<SnChatRoom>> realmChatRooms(Ref ref, String realmSlug) async {
final realmChatRoomsProvider = FutureProvider.autoDispose
.family<List<SnChatRoom>, String>((ref, realmSlug) async {
final apiClient = ref.watch(apiClientProvider);
final response = await apiClient.get('/sphere/realms/$realmSlug/chat');
return (response.data as List).map((e) => SnChatRoom.fromJson(e)).toList();
}
return (response.data as List)
.map((e) => SnChatRoom.fromJson(e))
.toList();
});
class RealmDetailScreen extends HookConsumerWidget {
final String slug;
@@ -520,49 +524,34 @@ class _RealmActionMenu extends HookConsumerWidget {
}
}
@riverpod
class RealmMemberListNotifier extends _$RealmMemberListNotifier
with CursorPagingNotifierMixin<SnRealmMember> {
static const int _pageSize = 20;
ValueNotifier<int> totalCount = ValueNotifier(0);
final realmMemberListNotifierProvider = AsyncNotifierProvider.autoDispose
.family<RealmMemberListNotifier, List<SnRealmMember>, String>(
RealmMemberListNotifier.new,
);
class RealmMemberListNotifier extends AsyncNotifier<List<SnRealmMember>>
with AsyncPaginationController<SnRealmMember> {
String arg;
RealmMemberListNotifier(this.arg);
static const int pageSize = 20;
@override
Future<CursorPagingData<SnRealmMember>> build(String realmSlug) async {
totalCount.value = 0;
return fetch();
}
@override
Future<CursorPagingData<SnRealmMember>> fetch({String? cursor}) async {
Future<List<SnRealmMember>> fetch() async {
final apiClient = ref.read(apiClientProvider);
final offset = cursor != null ? int.parse(cursor) : 0;
final response = await apiClient.get(
'/pass/realms/$realmSlug/members',
'/pass/realms/$arg/members',
queryParameters: {
'offset': offset,
'take': _pageSize,
'offset': fetchedCount,
'take': pageSize,
'withStatus': true,
},
);
final total = int.parse(response.headers.value('X-Total') ?? '0');
totalCount.value = total;
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
final List<dynamic> data = response.data;
final members = data.map((e) => SnRealmMember.fromJson(e)).toList();
final hasMore = offset + members.length < total;
final nextCursor = hasMore ? (offset + members.length).toString() : null;
return CursorPagingData(
items: members,
hasMore: hasMore,
nextCursor: nextCursor,
);
}
void dispose() {
totalCount.dispose();
return data.map((e) => SnRealmMember.fromJson(e)).toList();
}
}
@@ -574,11 +563,10 @@ class _RealmMemberListSheet extends HookConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final realmIdentity = ref.watch(realmIdentityProvider(realmSlug));
final memberListProvider = realmMemberListNotifierProvider(realmSlug);
final memberListNotifier = ref.watch(memberListProvider.notifier);
useEffect(() {
return memberListNotifier.dispose;
}, []);
// memberListNotifier is not watched here to prevent unnecessary rebuilds of this widget
// when we only need it for passing to PaginationList as a Refreshable
// However, we used useEffect to dispose it, but AutoDispose handles it.
// So we remove the useEffect and the watch.
Future<void> invitePerson() async {
final result = await showModalBottomSheet(
@@ -606,17 +594,19 @@ class _RealmMemberListSheet extends HookConsumerWidget {
padding: EdgeInsets.only(top: 16, left: 20, right: 16, bottom: 12),
child: Row(
children: [
ListenableBuilder(
listenable: memberListNotifier.totalCount,
builder:
(context, _) => Text(
'members'.plural(memberListNotifier.totalCount.value),
key: ValueKey(memberListNotifier),
Consumer(
builder: (context, ref, _) {
// effective watch to rebuild when data changes (and totalCount updates)
ref.watch(memberListProvider);
final notifier = ref.read(memberListProvider.notifier);
return Text(
'members'.plural(notifier.totalCount ?? 0),
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w600,
letterSpacing: -0.5,
),
),
);
},
),
const Spacer(),
IconButton(
@@ -643,19 +633,10 @@ class _RealmMemberListSheet extends HookConsumerWidget {
Widget buildMemberListContent() {
return Expanded(
child: PagingHelperView(
child: PaginationList(
provider: memberListProvider,
futureRefreshable: memberListProvider.future,
notifierRefreshable: memberListProvider.notifier,
contentBuilder: (data, widgetCount, endItemView) {
return ListView.builder(
itemCount: widgetCount,
itemBuilder: (context, index) {
if (index == data.items.length) {
return endItemView;
}
final member = data.items[index];
notifier: memberListProvider.notifier,
itemBuilder: (context, index, member) {
return ListTile(
contentPadding: EdgeInsets.only(left: 16, right: 12),
leading: AccountPfcGestureDetector(
@@ -742,8 +723,6 @@ class _RealmMemberListSheet extends HookConsumerWidget {
),
);
},
);
},
),
);
}

View File

@@ -1,552 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'realm_detail.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$realmAppbarForegroundColorHash() =>
r'8131c047a984318a4cc3fbb5daa5ef0ce44dfae5';
/// 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 [realmAppbarForegroundColor].
@ProviderFor(realmAppbarForegroundColor)
const realmAppbarForegroundColorProvider = RealmAppbarForegroundColorFamily();
/// See also [realmAppbarForegroundColor].
class RealmAppbarForegroundColorFamily extends Family<AsyncValue<Color?>> {
/// See also [realmAppbarForegroundColor].
const RealmAppbarForegroundColorFamily();
/// See also [realmAppbarForegroundColor].
RealmAppbarForegroundColorProvider call(String realmSlug) {
return RealmAppbarForegroundColorProvider(realmSlug);
}
@override
RealmAppbarForegroundColorProvider getProviderOverride(
covariant RealmAppbarForegroundColorProvider provider,
) {
return call(provider.realmSlug);
}
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'realmAppbarForegroundColorProvider';
}
/// See also [realmAppbarForegroundColor].
class RealmAppbarForegroundColorProvider
extends AutoDisposeFutureProvider<Color?> {
/// See also [realmAppbarForegroundColor].
RealmAppbarForegroundColorProvider(String realmSlug)
: this._internal(
(ref) => realmAppbarForegroundColor(
ref as RealmAppbarForegroundColorRef,
realmSlug,
),
from: realmAppbarForegroundColorProvider,
name: r'realmAppbarForegroundColorProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$realmAppbarForegroundColorHash,
dependencies: RealmAppbarForegroundColorFamily._dependencies,
allTransitiveDependencies:
RealmAppbarForegroundColorFamily._allTransitiveDependencies,
realmSlug: realmSlug,
);
RealmAppbarForegroundColorProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.realmSlug,
}) : super.internal();
final String realmSlug;
@override
Override overrideWith(
FutureOr<Color?> Function(RealmAppbarForegroundColorRef provider) create,
) {
return ProviderOverride(
origin: this,
override: RealmAppbarForegroundColorProvider._internal(
(ref) => create(ref as RealmAppbarForegroundColorRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
realmSlug: realmSlug,
),
);
}
@override
AutoDisposeFutureProviderElement<Color?> createElement() {
return _RealmAppbarForegroundColorProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is RealmAppbarForegroundColorProvider &&
other.realmSlug == realmSlug;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, realmSlug.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RealmAppbarForegroundColorRef on AutoDisposeFutureProviderRef<Color?> {
/// The parameter `realmSlug` of this provider.
String get realmSlug;
}
class _RealmAppbarForegroundColorProviderElement
extends AutoDisposeFutureProviderElement<Color?>
with RealmAppbarForegroundColorRef {
_RealmAppbarForegroundColorProviderElement(super.provider);
@override
String get realmSlug =>
(origin as RealmAppbarForegroundColorProvider).realmSlug;
}
String _$realmIdentityHash() => r'd5a3ecc6eeec291cebbfc9a45d8aac7195366381';
/// See also [realmIdentity].
@ProviderFor(realmIdentity)
const realmIdentityProvider = RealmIdentityFamily();
/// See also [realmIdentity].
class RealmIdentityFamily extends Family<AsyncValue<SnRealmMember?>> {
/// See also [realmIdentity].
const RealmIdentityFamily();
/// See also [realmIdentity].
RealmIdentityProvider call(String realmSlug) {
return RealmIdentityProvider(realmSlug);
}
@override
RealmIdentityProvider getProviderOverride(
covariant RealmIdentityProvider provider,
) {
return call(provider.realmSlug);
}
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'realmIdentityProvider';
}
/// See also [realmIdentity].
class RealmIdentityProvider extends AutoDisposeFutureProvider<SnRealmMember?> {
/// See also [realmIdentity].
RealmIdentityProvider(String realmSlug)
: this._internal(
(ref) => realmIdentity(ref as RealmIdentityRef, realmSlug),
from: realmIdentityProvider,
name: r'realmIdentityProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$realmIdentityHash,
dependencies: RealmIdentityFamily._dependencies,
allTransitiveDependencies:
RealmIdentityFamily._allTransitiveDependencies,
realmSlug: realmSlug,
);
RealmIdentityProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.realmSlug,
}) : super.internal();
final String realmSlug;
@override
Override overrideWith(
FutureOr<SnRealmMember?> Function(RealmIdentityRef provider) create,
) {
return ProviderOverride(
origin: this,
override: RealmIdentityProvider._internal(
(ref) => create(ref as RealmIdentityRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
realmSlug: realmSlug,
),
);
}
@override
AutoDisposeFutureProviderElement<SnRealmMember?> createElement() {
return _RealmIdentityProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is RealmIdentityProvider && other.realmSlug == realmSlug;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, realmSlug.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RealmIdentityRef on AutoDisposeFutureProviderRef<SnRealmMember?> {
/// The parameter `realmSlug` of this provider.
String get realmSlug;
}
class _RealmIdentityProviderElement
extends AutoDisposeFutureProviderElement<SnRealmMember?>
with RealmIdentityRef {
_RealmIdentityProviderElement(super.provider);
@override
String get realmSlug => (origin as RealmIdentityProvider).realmSlug;
}
String _$realmChatRoomsHash() => r'5f199906fb287b109e2a2d2a81dcb6675bdcb816';
/// See also [realmChatRooms].
@ProviderFor(realmChatRooms)
const realmChatRoomsProvider = RealmChatRoomsFamily();
/// See also [realmChatRooms].
class RealmChatRoomsFamily extends Family<AsyncValue<List<SnChatRoom>>> {
/// See also [realmChatRooms].
const RealmChatRoomsFamily();
/// See also [realmChatRooms].
RealmChatRoomsProvider call(String realmSlug) {
return RealmChatRoomsProvider(realmSlug);
}
@override
RealmChatRoomsProvider getProviderOverride(
covariant RealmChatRoomsProvider provider,
) {
return call(provider.realmSlug);
}
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'realmChatRoomsProvider';
}
/// See also [realmChatRooms].
class RealmChatRoomsProvider
extends AutoDisposeFutureProvider<List<SnChatRoom>> {
/// See also [realmChatRooms].
RealmChatRoomsProvider(String realmSlug)
: this._internal(
(ref) => realmChatRooms(ref as RealmChatRoomsRef, realmSlug),
from: realmChatRoomsProvider,
name: r'realmChatRoomsProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$realmChatRoomsHash,
dependencies: RealmChatRoomsFamily._dependencies,
allTransitiveDependencies:
RealmChatRoomsFamily._allTransitiveDependencies,
realmSlug: realmSlug,
);
RealmChatRoomsProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.realmSlug,
}) : super.internal();
final String realmSlug;
@override
Override overrideWith(
FutureOr<List<SnChatRoom>> Function(RealmChatRoomsRef provider) create,
) {
return ProviderOverride(
origin: this,
override: RealmChatRoomsProvider._internal(
(ref) => create(ref as RealmChatRoomsRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
realmSlug: realmSlug,
),
);
}
@override
AutoDisposeFutureProviderElement<List<SnChatRoom>> createElement() {
return _RealmChatRoomsProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is RealmChatRoomsProvider && other.realmSlug == realmSlug;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, realmSlug.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RealmChatRoomsRef on AutoDisposeFutureProviderRef<List<SnChatRoom>> {
/// The parameter `realmSlug` of this provider.
String get realmSlug;
}
class _RealmChatRoomsProviderElement
extends AutoDisposeFutureProviderElement<List<SnChatRoom>>
with RealmChatRoomsRef {
_RealmChatRoomsProviderElement(super.provider);
@override
String get realmSlug => (origin as RealmChatRoomsProvider).realmSlug;
}
String _$realmMemberListNotifierHash() =>
r'ab38c550c43cbf93d4c3e92e6658d76f40252c1f';
abstract class _$RealmMemberListNotifier
extends BuildlessAutoDisposeAsyncNotifier<CursorPagingData<SnRealmMember>> {
late final String realmSlug;
FutureOr<CursorPagingData<SnRealmMember>> build(String realmSlug);
}
/// See also [RealmMemberListNotifier].
@ProviderFor(RealmMemberListNotifier)
const realmMemberListNotifierProvider = RealmMemberListNotifierFamily();
/// See also [RealmMemberListNotifier].
class RealmMemberListNotifierFamily
extends Family<AsyncValue<CursorPagingData<SnRealmMember>>> {
/// See also [RealmMemberListNotifier].
const RealmMemberListNotifierFamily();
/// See also [RealmMemberListNotifier].
RealmMemberListNotifierProvider call(String realmSlug) {
return RealmMemberListNotifierProvider(realmSlug);
}
@override
RealmMemberListNotifierProvider getProviderOverride(
covariant RealmMemberListNotifierProvider provider,
) {
return call(provider.realmSlug);
}
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'realmMemberListNotifierProvider';
}
/// See also [RealmMemberListNotifier].
class RealmMemberListNotifierProvider
extends
AutoDisposeAsyncNotifierProviderImpl<
RealmMemberListNotifier,
CursorPagingData<SnRealmMember>
> {
/// See also [RealmMemberListNotifier].
RealmMemberListNotifierProvider(String realmSlug)
: this._internal(
() => RealmMemberListNotifier()..realmSlug = realmSlug,
from: realmMemberListNotifierProvider,
name: r'realmMemberListNotifierProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$realmMemberListNotifierHash,
dependencies: RealmMemberListNotifierFamily._dependencies,
allTransitiveDependencies:
RealmMemberListNotifierFamily._allTransitiveDependencies,
realmSlug: realmSlug,
);
RealmMemberListNotifierProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.realmSlug,
}) : super.internal();
final String realmSlug;
@override
FutureOr<CursorPagingData<SnRealmMember>> runNotifierBuild(
covariant RealmMemberListNotifier notifier,
) {
return notifier.build(realmSlug);
}
@override
Override overrideWith(RealmMemberListNotifier Function() create) {
return ProviderOverride(
origin: this,
override: RealmMemberListNotifierProvider._internal(
() => create()..realmSlug = realmSlug,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
realmSlug: realmSlug,
),
);
}
@override
AutoDisposeAsyncNotifierProviderElement<
RealmMemberListNotifier,
CursorPagingData<SnRealmMember>
>
createElement() {
return _RealmMemberListNotifierProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is RealmMemberListNotifierProvider &&
other.realmSlug == realmSlug;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, realmSlug.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RealmMemberListNotifierRef
on AutoDisposeAsyncNotifierProviderRef<CursorPagingData<SnRealmMember>> {
/// The parameter `realmSlug` of this provider.
String get realmSlug;
}
class _RealmMemberListNotifierProviderElement
extends
AutoDisposeAsyncNotifierProviderElement<
RealmMemberListNotifier,
CursorPagingData<SnRealmMember>
>
with RealmMemberListNotifierRef {
_RealmMemberListNotifierProviderElement(super.provider);
@override
String get realmSlug => (origin as RealmMemberListNotifierProvider).realmSlug;
}
// 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

View File

@@ -47,13 +47,14 @@ class RealmListScreen extends HookConsumerWidget {
// Set FAB type to realm
final fabMenuNotifier = ref.read(fabMenuTypeProvider.notifier);
Future(() {
fabMenuNotifier.state = FabMenuType.realm;
fabMenuNotifier.setMenuType(FabMenuType.realm);
});
return () {
// Clean up: reset FAB type to main
final fabMenu = ref.read(fabMenuTypeProvider);
WidgetsBinding.instance.addPostFrameCallback((_) {
if (fabMenuNotifier.state == FabMenuType.realm) {
fabMenuNotifier.state = FabMenuType.main;
if (fabMenu == FabMenuType.realm) {
fabMenuNotifier.setMenuType(FabMenuType.main);
}
});
};

View File

@@ -6,174 +6,155 @@ part of 'realms.dart';
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(realmsJoined)
const realmsJoinedProvider = RealmsJoinedProvider._();
final class RealmsJoinedProvider
extends
$FunctionalProvider<
AsyncValue<List<SnRealm>>,
List<SnRealm>,
FutureOr<List<SnRealm>>
>
with $FutureModifier<List<SnRealm>>, $FutureProvider<List<SnRealm>> {
const RealmsJoinedProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'realmsJoinedProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$realmsJoinedHash();
@$internal
@override
$FutureProviderElement<List<SnRealm>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnRealm>> create(Ref ref) {
return realmsJoined(ref);
}
}
String _$realmsJoinedHash() => r'b15029acd38f03bbbb8708adb78f25ac357a0421';
/// See also [realmsJoined].
@ProviderFor(realmsJoined)
final realmsJoinedProvider = AutoDisposeFutureProvider<List<SnRealm>>.internal(
realmsJoined,
name: r'realmsJoinedProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$realmsJoinedHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef RealmsJoinedRef = AutoDisposeFutureProviderRef<List<SnRealm>>;
String _$realmHash() => r'71a126ab2810566646e1629290c1ce9ffa0839e3';
/// 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 [realm].
@ProviderFor(realm)
const realmProvider = RealmFamily();
const realmProvider = RealmFamily._();
/// See also [realm].
class RealmFamily extends Family<AsyncValue<SnRealm?>> {
/// See also [realm].
const RealmFamily();
/// See also [realm].
RealmProvider call(String? identifier) {
return RealmProvider(identifier);
}
@override
RealmProvider getProviderOverride(covariant RealmProvider provider) {
return call(provider.identifier);
}
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'realmProvider';
}
/// See also [realm].
class RealmProvider extends AutoDisposeFutureProvider<SnRealm?> {
/// See also [realm].
RealmProvider(String? identifier)
: this._internal(
(ref) => realm(ref as RealmRef, identifier),
from: realmProvider,
final class RealmProvider
extends
$FunctionalProvider<AsyncValue<SnRealm?>, SnRealm?, FutureOr<SnRealm?>>
with $FutureModifier<SnRealm?>, $FutureProvider<SnRealm?> {
const RealmProvider._({
required RealmFamily super.from,
required String? super.argument,
}) : super(
retry: null,
name: r'realmProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$realmHash,
dependencies: RealmFamily._dependencies,
allTransitiveDependencies: RealmFamily._allTransitiveDependencies,
identifier: identifier,
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
RealmProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.identifier,
}) : super.internal();
final String? identifier;
@override
Override overrideWith(FutureOr<SnRealm?> Function(RealmRef provider) create) {
return ProviderOverride(
origin: this,
override: RealmProvider._internal(
(ref) => create(ref as RealmRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
identifier: identifier,
),
);
String debugGetCreateSourceHash() => _$realmHash();
@override
String toString() {
return r'realmProvider'
''
'($argument)';
}
@$internal
@override
AutoDisposeFutureProviderElement<SnRealm?> createElement() {
return _RealmProviderElement(this);
$FutureProviderElement<SnRealm?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<SnRealm?> create(Ref ref) {
final argument = this.argument as String?;
return realm(ref, argument);
}
@override
bool operator ==(Object other) {
return other is RealmProvider && other.identifier == identifier;
return other is RealmProvider && other.argument == argument;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, identifier.hashCode);
return _SystemHash.finish(hash);
return argument.hashCode;
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin RealmRef on AutoDisposeFutureProviderRef<SnRealm?> {
/// The parameter `identifier` of this provider.
String? get identifier;
}
String _$realmHash() => r'71a126ab2810566646e1629290c1ce9ffa0839e3';
class _RealmProviderElement extends AutoDisposeFutureProviderElement<SnRealm?>
with RealmRef {
_RealmProviderElement(super.provider);
final class RealmFamily extends $Family
with $FunctionalFamilyOverride<FutureOr<SnRealm?>, String?> {
const RealmFamily._()
: super(
retry: null,
name: r'realmProvider',
dependencies: null,
$allTransitiveDependencies: null,
isAutoDispose: true,
);
RealmProvider call(String? identifier) =>
RealmProvider._(argument: identifier, from: this);
@override
String? get identifier => (origin as RealmProvider).identifier;
String toString() => r'realmProvider';
}
@ProviderFor(realmInvites)
const realmInvitesProvider = RealmInvitesProvider._();
final class RealmInvitesProvider
extends
$FunctionalProvider<
AsyncValue<List<SnRealmMember>>,
List<SnRealmMember>,
FutureOr<List<SnRealmMember>>
>
with
$FutureModifier<List<SnRealmMember>>,
$FutureProvider<List<SnRealmMember>> {
const RealmInvitesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'realmInvitesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$realmInvitesHash();
@$internal
@override
$FutureProviderElement<List<SnRealmMember>> $createElement(
$ProviderPointer pointer,
) => $FutureProviderElement(pointer);
@override
FutureOr<List<SnRealmMember>> create(Ref ref) {
return realmInvites(ref);
}
}
String _$realmInvitesHash() => r'92cce0978c7ca8813e27ae42fc6f3a93a09a8962';
/// See also [realmInvites].
@ProviderFor(realmInvites)
final realmInvitesProvider =
AutoDisposeFutureProvider<List<SnRealmMember>>.internal(
realmInvites,
name: r'realmInvitesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$realmInvitesHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef RealmInvitesRef = AutoDisposeFutureProviderRef<List<SnRealmMember>>;
// 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

View File

@@ -52,7 +52,7 @@ class SettingsScreen extends HookConsumerWidget {
final serverUrl = ref.watch(serverUrlProvider);
final prefs = ref.watch(sharedPreferencesProvider);
final controller = TextEditingController(text: serverUrl);
final settings = ref.watch(appSettingsNotifierProvider);
final settings = ref.watch(appSettingsProvider);
final isDesktop =
!kIsWeb && (Platform.isWindows || Platform.isMacOS || Platform.isLinux);
final isWide = isWideScreen(context);
@@ -137,9 +137,7 @@ class SettingsScreen extends HookConsumerWidget {
value: settings.themeMode,
onChanged: (String? value) {
if (value != null) {
ref
.read(appSettingsNotifierProvider.notifier)
.setThemeMode(value);
ref.read(appSettingsProvider.notifier).setThemeMode(value);
showSnackBar('settingsApplied'.tr());
}
},
@@ -170,9 +168,7 @@ class SettingsScreen extends HookConsumerWidget {
suffixIcon: IconButton(
icon: const Icon(Symbols.restart_alt),
onPressed: () {
ref
.read(appSettingsNotifierProvider.notifier)
.setCustomFonts(null);
ref.read(appSettingsProvider.notifier).setCustomFonts(null);
showSnackBar('settingsApplied'.tr());
},
),
@@ -183,7 +179,7 @@ class SettingsScreen extends HookConsumerWidget {
),
onSubmitted: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomFonts(value.isEmpty ? null : value);
showSnackBar('settingsApplied'.tr());
},
@@ -218,7 +214,7 @@ class SettingsScreen extends HookConsumerWidget {
onChanged: (String? value) {
if (value != null) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setMessageDisplayStyle(value);
showSnackBar('settingsApplied'.tr());
}
@@ -280,7 +276,7 @@ class SettingsScreen extends HookConsumerWidget {
TextButton(
onPressed: () {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setAppColorScheme(selectedColor.value);
Navigator.of(context).pop();
},
@@ -330,7 +326,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(current.copyWith(primary: color?.value));
},
),
@@ -344,7 +340,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(current.copyWith(secondary: color?.value));
},
),
@@ -358,7 +354,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(current.copyWith(tertiary: color?.value));
},
),
@@ -372,7 +368,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(current.copyWith(surface: color?.value));
},
),
@@ -386,7 +382,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(
current.copyWith(background: color?.value),
);
@@ -402,7 +398,7 @@ class SettingsScreen extends HookConsumerWidget {
onColorChanged: (color) {
final current = settings.customColors ?? ThemeColors();
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setCustomColors(current.copyWith(error: color?.value));
},
),
@@ -412,9 +408,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: const Icon(Symbols.restart_alt).padding(right: 2),
contentPadding: EdgeInsets.symmetric(horizontal: 20),
onTap: () {
ref
.read(appSettingsNotifierProvider.notifier)
.setCustomColors(null);
ref.read(appSettingsProvider.notifier).setCustomColors(null);
showSnackBar('settingsApplied'.tr());
},
),
@@ -448,9 +442,7 @@ class SettingsScreen extends HookConsumerWidget {
value: settings.fabPosition,
onChanged: (String? value) {
if (value != null) {
ref
.read(appSettingsNotifierProvider.notifier)
.setFabPosition(value);
ref.read(appSettingsProvider.notifier).setFabPosition(value);
showSnackBar('settingsApplied'.tr());
}
},
@@ -481,7 +473,7 @@ class SettingsScreen extends HookConsumerWidget {
label: '${(settings.cardTransparency * 100).round()}%',
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setAppTransparentBackground(value);
},
),
@@ -533,7 +525,7 @@ class SettingsScreen extends HookConsumerWidget {
value: settings.showBackgroundImage,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setShowBackgroundImage(value);
},
),
@@ -609,7 +601,7 @@ class SettingsScreen extends HookConsumerWidget {
? colorScheme.primary
: colorScheme.primary;
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setAppColorScheme(color.value);
if (context.mounted) {
hideLoadingModal(context);
@@ -699,7 +691,7 @@ class SettingsScreen extends HookConsumerWidget {
value: currentPoolId,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setDefaultPoolId(value);
showSnackBar('settingsApplied'.tr());
},
@@ -738,9 +730,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.autoTranslate,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setAutoTranslate(value);
ref.read(appSettingsProvider.notifier).setAutoTranslate(value);
},
),
),
@@ -754,9 +744,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.soundEffects,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setSoundEffects(value);
ref.read(appSettingsProvider.notifier).setSoundEffects(value);
},
),
),
@@ -770,9 +758,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.aprilFoolFeatures,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setAprilFoolFeatures(value);
ref.read(appSettingsProvider.notifier).setAprilFoolFeatures(value);
},
),
),
@@ -790,9 +776,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.enterToSend,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setEnterToSend(value);
ref.read(appSettingsProvider.notifier).setEnterToSend(value);
},
),
),
@@ -806,9 +790,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.appBarTransparent,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setAppBarTransparent(value);
ref.read(appSettingsProvider.notifier).setAppBarTransparent(value);
},
),
),
@@ -820,9 +802,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.dataSavingMode,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setDataSavingMode(value);
ref.read(appSettingsProvider.notifier).setDataSavingMode(value);
},
),
),
@@ -836,9 +816,7 @@ class SettingsScreen extends HookConsumerWidget {
trailing: Switch(
value: settings.disableAnimation,
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.setDisableAnimation(value);
ref.read(appSettingsProvider.notifier).setDisableAnimation(value);
},
),
),
@@ -865,7 +843,7 @@ class SettingsScreen extends HookConsumerWidget {
label: '${(settings.windowOpacity * 100).round()}%',
onChanged: (value) {
ref
.read(appSettingsNotifierProvider.notifier)
.read(appSettingsProvider.notifier)
.setWindowOpacity(value);
},
),

Some files were not shown because too many files have changed in this diff Show More