From 903008d397d2435f46b1b6a95d060e2611568969 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 19 Jul 2025 12:10:23 +0800 Subject: [PATCH] :bug: Dozens of microservices releated changes --- lib/pods/webfeed.dart | 8 ++--- lib/screens/creators/hub.dart | 37 +++++++++++++++------ lib/screens/creators/stickers/stickers.dart | 28 ++++++++++------ lib/screens/developers/hub.dart | 13 +++++--- lib/screens/realm/realm_detail.dart | 24 ++++++++----- lib/screens/realm/realms.dart | 7 ++-- lib/screens/wallet.dart | 4 +-- lib/widgets/content/cloud_files.dart | 5 ++- lib/widgets/realm/realm_list.dart | 2 +- 9 files changed, 83 insertions(+), 45 deletions(-) diff --git a/lib/pods/webfeed.dart b/lib/pods/webfeed.dart index cb477d7..42f474c 100644 --- a/lib/pods/webfeed.dart +++ b/lib/pods/webfeed.dart @@ -39,7 +39,7 @@ class WebFeedNotifier try { final client = ref.read(apiClientProvider); final response = await client.get( - '/publishers/${arg.pubName}/feeds/${arg.feedId}', + '/sphere/publishers/${arg.pubName}/feeds/${arg.feedId}', ); return SnWebFeed.fromJson(response.data); } catch (e) { @@ -51,7 +51,7 @@ class WebFeedNotifier state = const AsyncValue.loading(); try { final client = ref.read(apiClientProvider); - final url = '/publishers/${feed.publisherId}/feeds'; + final url = '/sphere/publishers/${feed.publisherId}/feeds'; final response = feed.id.isEmpty @@ -98,7 +98,7 @@ class WebFeedNotifier try { final client = ref.read(apiClientProvider); await client.post( - '/publishers/${arg.pubName}/feeds/$feedId/scrap', + '/sphere/publishers/${arg.pubName}/feeds/$feedId/scrap', options: Options( sendTimeout: const Duration(seconds: 60), receiveTimeout: const Duration(seconds: 180), @@ -107,7 +107,7 @@ class WebFeedNotifier // Reload the feed final response = await client.get( - '/publishers/${arg.pubName}/feeds/$feedId', + '/sphere/publishers/${arg.pubName}/feeds/$feedId', ); state = AsyncValue.data(SnWebFeed.fromJson(response.data)); } catch (error, stackTrace) { diff --git a/lib/screens/creators/hub.dart b/lib/screens/creators/hub.dart index 46ec4c5..808d021 100644 --- a/lib/screens/creators/hub.dart +++ b/lib/screens/creators/hub.dart @@ -83,7 +83,7 @@ class PublisherMemberListNotifier extends _$PublisherMemberListNotifier final offset = cursor != null ? int.parse(cursor) : 0; final response = await apiClient.get( - '/publishers/$uname/members', + '/sphere/publishers/$uname/members', queryParameters: {'offset': offset, 'take': _pageSize}, ); @@ -143,14 +143,19 @@ class CreatorHubScreen extends HookConsumerWidget { ); void updatePublisher() { - context.pushNamed('creatorEdit', pathParameters: {'name': currentPublisher.value!.name}).then(( - value, - ) async { - if (value == null) return; - final data = await ref.refresh(publishersManagedProvider.future); - currentPublisher.value = - data.where((e) => e.id == currentPublisher.value!.id).firstOrNull; - }); + context + .pushNamed( + 'creatorEdit', + pathParameters: {'name': currentPublisher.value!.name}, + ) + .then((value) async { + if (value == null) return; + final data = await ref.refresh(publishersManagedProvider.future); + currentPublisher.value = + data + .where((e) => e.id == currentPublisher.value!.id) + .firstOrNull; + }); } void deletePublisher() { @@ -350,7 +355,12 @@ class CreatorHubScreen extends HookConsumerWidget { horizontal: 24, ), onTap: () { - context.pushNamed('creatorStickers', pathParameters: {'name': currentPublisher.value!.name}); + context.pushNamed( + 'creatorStickers', + pathParameters: { + 'name': currentPublisher.value!.name, + }, + ); }, ), ListTile( @@ -362,7 +372,12 @@ class CreatorHubScreen extends HookConsumerWidget { horizontal: 24, ), onTap: () { - context.pushNamed('creatorPosts', pathParameters: {'name': currentPublisher.value!.name}); + context.pushNamed( + 'creatorPosts', + pathParameters: { + 'name': currentPublisher.value!.name, + }, + ); }, ), ListTile( diff --git a/lib/screens/creators/stickers/stickers.dart b/lib/screens/creators/stickers/stickers.dart index 80d8a7d..c96a244 100644 --- a/lib/screens/creators/stickers/stickers.dart +++ b/lib/screens/creators/stickers/stickers.dart @@ -28,13 +28,16 @@ class StickersScreen extends HookConsumerWidget { actions: [ IconButton( onPressed: () { - context.pushNamed('creatorStickerPackNew', queryParameters: {'pubName': pubName}).then(( - value, - ) { - if (value != null) { - ref.invalidate(stickerPacksNotifierProvider(pubName)); - } - }); + context + .pushNamed( + 'creatorStickerPackNew', + queryParameters: {'pubName': pubName}, + ) + .then((value) { + if (value != null) { + ref.invalidate(stickerPacksNotifierProvider(pubName)); + } + }); }, icon: const Icon(Symbols.add_circle), ), @@ -71,7 +74,10 @@ class SliverStickerPacksList extends HookConsumerWidget { subtitle: Text(sticker.description), trailing: const Icon(Symbols.chevron_right), onTap: () { - context.pushNamed('creatorStickerPackDetail', pathParameters: {'pubName': pubName, 'packId': sticker.id}); + context.pushNamed( + 'creatorStickerPackDetail', + pathParameters: {'pubName': pubName, 'packId': sticker.id}, + ); }, ); }, @@ -99,7 +105,7 @@ class StickerPacksNotifier extends _$StickerPacksNotifier try { final response = await client.get( - '/stickers', + '/sphere/stickers', queryParameters: { 'offset': offset, 'take': _pageSize, @@ -129,7 +135,7 @@ class StickerPacksNotifier extends _$StickerPacksNotifier Future stickerPack(Ref ref, String? packId) async { if (packId == null) return null; final apiClient = ref.watch(apiClientProvider); - final resp = await apiClient.get('/stickers/$packId'); + final resp = await apiClient.get('/sphere/stickers/$packId'); return SnStickerPack.fromJson(resp.data); } @@ -175,7 +181,7 @@ class EditStickerPacksScreen extends HookConsumerWidget { submitting.value = true; final apiClient = ref.watch(apiClientProvider); final resp = await apiClient.request( - '/stickers', + '/sphere/stickers', data: { 'name': nameController.text, 'description': descriptionController.text, diff --git a/lib/screens/developers/hub.dart b/lib/screens/developers/hub.dart index 9176cdb..ba862e9 100644 --- a/lib/screens/developers/hub.dart +++ b/lib/screens/developers/hub.dart @@ -25,14 +25,14 @@ part 'hub.g.dart'; Future developerStats(Ref ref, String? uname) async { if (uname == null) return null; final apiClient = ref.watch(apiClientProvider); - final resp = await apiClient.get('/developers/$uname/stats'); + final resp = await apiClient.get('/sphere/developers/$uname/stats'); return DeveloperStats.fromJson(resp.data); } @riverpod Future> developers(Ref ref) async { final client = ref.watch(apiClientProvider); - final resp = await client.get('/developers'); + final resp = await client.get('/sphere/developers'); return resp.data .map((e) => SnPublisher.fromJson(e)) .cast() @@ -243,7 +243,12 @@ class DeveloperHubScreen extends HookConsumerWidget { horizontal: 24, ), onTap: () { - context.pushNamed('developerApps', pathParameters: {'name': currentDeveloper.value!.name}); + context.pushNamed( + 'developerApps', + pathParameters: { + 'name': currentDeveloper.value!.name, + }, + ); }, ), ], @@ -334,7 +339,7 @@ class _DeveloperEnrollmentSheet extends HookConsumerWidget { Future enroll(SnPublisher publisher) async { try { final client = ref.read(apiClientProvider); - await client.post('/developers/${publisher.name}/enroll'); + await client.post('/sphere/developers/${publisher.name}/enroll'); if (context.mounted) { Navigator.pop(context, true); } diff --git a/lib/screens/realm/realm_detail.dart b/lib/screens/realm/realm_detail.dart index f657538..08db45e 100644 --- a/lib/screens/realm/realm_detail.dart +++ b/lib/screens/realm/realm_detail.dart @@ -166,7 +166,7 @@ class RealmDetailScreen extends HookConsumerWidget { apiClientProvider, ); await apiClient.post( - '/realms/$slug/members/me', + '/sphere/realms/$slug/members/me', ); ref.invalidate( realmIdentityProvider(slug), @@ -213,7 +213,10 @@ class RealmDetailScreen extends HookConsumerWidget { return ChatRoomListTile( room: rooms[index], onTap: () { - context.pushNamed('chatRoom', pathParameters: {'id': rooms[index].id}); + context.pushNamed( + 'chatRoom', + pathParameters: {'id': rooms[index].id}, + ); }, ); }, childCount: rooms.length), @@ -251,7 +254,10 @@ class _RealmActionMenu extends HookConsumerWidget { if (isModerator) PopupMenuItem( onTap: () { - context.pushReplacement('/sphere/realms/$realmSlug/edit'); + context.pushReplacementNamed( + 'realmEdit', + pathParameters: {'slug': realmSlug}, + ); }, child: Row( children: [ @@ -319,7 +325,7 @@ class _RealmActionMenu extends HookConsumerWidget { if (confirm) { final client = ref.watch(apiClientProvider); client.delete( - '/realms/$realmSlug/members/me', + '/sphere/realms/$realmSlug/members/me', ); ref.invalidate(realmsJoinedProvider); if (context.mounted) { @@ -389,7 +395,7 @@ class RealmMemberListNotifier extends _$RealmMemberListNotifier final offset = cursor != null ? int.parse(cursor) : 0; final response = await apiClient.get( - '/realms/$realmSlug/members', + '/sphere/realms/$realmSlug/members', queryParameters: {'offset': offset, 'take': _pageSize}, ); @@ -432,7 +438,7 @@ class RealmMemberNotifier extends StateNotifier { try { final response = await _apiClient.get( - '/realms/$realmSlug/members', + '/sphere/realms/$realmSlug/members', queryParameters: {'offset': offset, 'take': take}, ); @@ -487,7 +493,7 @@ class _RealmMemberListSheet extends HookConsumerWidget { try { final apiClient = ref.watch(apiClientProvider); await apiClient.post( - '/realms/invites/$realmSlug', + '/sphere/realms/invites/$realmSlug', data: {'related_user_id': result.id, 'role': 0}, ); // Refresh both providers @@ -619,7 +625,7 @@ class _RealmMemberListSheet extends HookConsumerWidget { apiClientProvider, ); await apiClient.delete( - '/realms/$realmSlug/members/${member.accountId}', + '/sphere/realms/$realmSlug/members/${member.accountId}', ); // Refresh both providers memberNotifier.reset(); @@ -769,7 +775,7 @@ class _RealmMemberRoleSheet extends HookConsumerWidget { final apiClient = ref.read(apiClientProvider); await apiClient.patch( - '/realms/$realmSlug/members/${member.accountId}/role', + '/sphere/realms/$realmSlug/members/${member.accountId}/role', data: newRole, ); diff --git a/lib/screens/realm/realms.dart b/lib/screens/realm/realms.dart index 7788134..4568d37 100644 --- a/lib/screens/realm/realms.dart +++ b/lib/screens/realm/realms.dart @@ -108,7 +108,10 @@ class RealmListScreen extends HookConsumerWidget { title: Text(value[item].name), subtitle: Text(value[item].description), onTap: () { - context.pushNamed('realmDetail', pathParameters: {'slug': value[item].slug}); + context.pushNamed( + 'realmDetail', + pathParameters: {'slug': value[item].slug}, + ); }, contentPadding: const EdgeInsets.only( left: 16, @@ -253,7 +256,7 @@ class EditRealmScreen extends HookConsumerWidget { try { final client = ref.watch(apiClientProvider); final resp = await client.request( - slug == null ? '/realms' : '/realms/$slug', + '/sphere${slug == null ? '/realms' : '/realms/$slug'}', data: { 'slug': slugController.text, 'name': nameController.text, diff --git a/lib/screens/wallet.dart b/lib/screens/wallet.dart index 5f2aaeb..69869ab 100644 --- a/lib/screens/wallet.dart +++ b/lib/screens/wallet.dart @@ -51,7 +51,7 @@ class TransactionListNotifier extends _$TransactionListNotifier final queryParams = {'offset': offset, 'take': _pageSize}; final response = await client.get( - '/wallets/transactions', + '/id/wallets/transactions', queryParameters: queryParams, ); final total = int.parse(response.headers.value('X-Total') ?? '0'); @@ -110,7 +110,7 @@ class WalletScreen extends HookConsumerWidget { ), ], ), - ); + ).center(); } return Column( diff --git a/lib/widgets/content/cloud_files.dart b/lib/widgets/content/cloud_files.dart index cf4ed01..feb4e3e 100644 --- a/lib/widgets/content/cloud_files.dart +++ b/lib/widgets/content/cloud_files.dart @@ -27,7 +27,10 @@ class CloudFileWidget extends ConsumerWidget { final serverUrl = ref.watch(serverUrlProvider); final uri = '$serverUrl/drive/files/${item.id}'; - var ratio = double.parse(item.fileMeta?['ratio'] ?? 1); + var ratio = + item.fileMeta?['ratio'] is num + ? item.fileMeta!['ratio'].toDouble() + : double.parse(item.fileMeta?['ratio'] ?? 1); if (ratio == 0) ratio = 1.0; final content = switch (item.mimeType?.split('/').firstOrNull) { "image" => AspectRatio( diff --git a/lib/widgets/realm/realm_list.dart b/lib/widgets/realm/realm_list.dart index aeecfc8..a20e2c2 100644 --- a/lib/widgets/realm/realm_list.dart +++ b/lib/widgets/realm/realm_list.dart @@ -34,7 +34,7 @@ class RealmListNotifier extends _$RealmListNotifier }; final response = await client.get( - '/discovery/realms', + '/sphere/discovery/realms', queryParameters: queryParams, ); final total = int.parse(response.headers.value('X-Total') ?? '0');