Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
d7746d14e4
|
|||
|
648d5225f6
|
|||
|
9d4d0f2e48
|
|||
|
fe386163f4
|
|||
|
ac2cee10e5
|
|||
|
9c370647dd
|
|||
|
7516e197fe
|
|||
|
71c372ab6c
|
|||
|
25f23f7f93
|
|||
|
51853698b9
|
|||
|
39ed5393ab
|
|||
|
782b3f1b08
|
|||
|
3ef2f13dd3
|
|||
|
36b0f55a47
|
|||
|
bc7a6e865e
|
|||
|
2ff60fc4ff
|
|||
|
ea93aa144e
|
|||
|
e4cd0c99df
|
|||
|
dff84dde58
|
|||
|
16c7b7e764
|
|||
|
240509ceff
|
|||
|
91da9768c1
|
|||
|
60b8e2bcad
|
|||
|
504e4d55ad
|
|||
|
38a15bb62a
|
|||
|
9d03faf594
|
|||
|
fd79c11d18
|
|||
|
c4ac256896
|
|||
|
c1fc8ea3fe
|
|||
|
29574ada88
|
|||
|
7369f5d88c
|
|||
|
5b3c138ebe
|
|||
|
562bdf62e9
|
|||
|
a73672925e
|
|||
|
c585522c35
|
|||
|
6aba84e506
|
|||
|
c6f104afc7
|
|||
|
4181fd0090
|
|||
|
84bca9601a
|
|||
|
31b83b2d27
|
|||
|
dfcb089c69
|
|||
|
fe365e8c6d
|
|||
|
b5262137ad
|
|||
|
11e93314c7
|
|||
|
c8658bc0ca
|
|||
|
b2f689693b
|
@@ -12,6 +12,8 @@
|
|||||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||||
android:maxSdkVersion="29" />
|
android:maxSdkVersion="29" />
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
||||||
@@ -159,4 +161,4 @@
|
|||||||
<data android:mimeType="text/plain" />
|
<data android:mimeType="text/plain" />
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -618,6 +618,7 @@
|
|||||||
"tagsHint": "Enter tags, separated by commas",
|
"tagsHint": "Enter tags, separated by commas",
|
||||||
"categories": "Categories",
|
"categories": "Categories",
|
||||||
"categoriesHint": "Enter categories, separated by commas",
|
"categoriesHint": "Enter categories, separated by commas",
|
||||||
|
"categoriesAndTags": "Categories & Tags",
|
||||||
"chatNotJoined": "You have not joined this chat yet.",
|
"chatNotJoined": "You have not joined this chat yet.",
|
||||||
"chatUnableJoin": "You can't join this chat due to it's access control settings.",
|
"chatUnableJoin": "You can't join this chat due to it's access control settings.",
|
||||||
"chatJoin": "Join the Chat",
|
"chatJoin": "Join the Chat",
|
||||||
@@ -1020,6 +1021,8 @@
|
|||||||
"uploadFile": "Upload File",
|
"uploadFile": "Upload File",
|
||||||
"authDeviceChallenges": "Device Usage",
|
"authDeviceChallenges": "Device Usage",
|
||||||
"authDeviceHint": "Swipe left to edit label, swipe right to logout device.",
|
"authDeviceHint": "Swipe left to edit label, swipe right to logout device.",
|
||||||
|
"authSessionLogout": "Logout Session",
|
||||||
|
"authSessionLogoutHint": "Are you sure you want to logout this session? This will terminate this specific login session.",
|
||||||
"settingsMessageDisplayStyle": "Message Display Style",
|
"settingsMessageDisplayStyle": "Message Display Style",
|
||||||
"auto": "Auto",
|
"auto": "Auto",
|
||||||
"manual": "Manual",
|
"manual": "Manual",
|
||||||
@@ -1489,5 +1492,7 @@
|
|||||||
"accountActivationAlert": "Remember to activate your account",
|
"accountActivationAlert": "Remember to activate your account",
|
||||||
"accountActivationAlertHint": "Unactivated account may leads to various of permission issues, activate your account by clicking the link we sent to your email inbox.",
|
"accountActivationAlertHint": "Unactivated account may leads to various of permission issues, activate your account by clicking the link we sent to your email inbox.",
|
||||||
"accountActivationResendHint": "Didn't see it? Try click the button below to resend one. If you need to update your email while your account was unactivated, feel free to contact our customer service.",
|
"accountActivationResendHint": "Didn't see it? Try click the button below to resend one. If you need to update your email while your account was unactivated, feel free to contact our customer service.",
|
||||||
"accountActivationResend": "Resend"
|
"accountActivationResend": "Resend",
|
||||||
|
"ipAddress": "IP Address",
|
||||||
|
"noFurtherData": "No further data"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1489,5 +1489,6 @@
|
|||||||
"accountActivationAlert": "请记住激活您的账户",
|
"accountActivationAlert": "请记住激活您的账户",
|
||||||
"accountActivationAlertHint": "未激活的账户可能会导致各种权限问题,请点击我们发送到您邮箱收件箱的链接来激活您的账户。",
|
"accountActivationAlertHint": "未激活的账户可能会导致各种权限问题,请点击我们发送到您邮箱收件箱的链接来激活您的账户。",
|
||||||
"accountActivationResendHint": "没收到?请尝试点击下方按钮重新发送。如果您在账户未激活期间需要更新邮箱,请随时联系我们的客服。",
|
"accountActivationResendHint": "没收到?请尝试点击下方按钮重新发送。如果您在账户未激活期间需要更新邮箱,请随时联系我们的客服。",
|
||||||
"accountActivationResend": "重新发送"
|
"accountActivationResend": "重新发送",
|
||||||
|
"noFurtherData": "已经到底了"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -257,6 +257,8 @@ PODS:
|
|||||||
- path_provider_foundation (0.0.1):
|
- path_provider_foundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
|
- permission_handler_apple (9.3.0):
|
||||||
|
- Flutter
|
||||||
- pointer_interceptor_ios (0.0.1):
|
- pointer_interceptor_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- PromisesObjC (2.4.0)
|
- PromisesObjC (2.4.0)
|
||||||
@@ -268,9 +270,9 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- record_ios (1.1.0):
|
- record_ios (1.1.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
- SDWebImage (5.21.3):
|
- SDWebImage (5.21.5):
|
||||||
- SDWebImage/Core (= 5.21.3)
|
- SDWebImage/Core (= 5.21.5)
|
||||||
- SDWebImage/Core (5.21.3)
|
- SDWebImage/Core (5.21.5)
|
||||||
- share_plus (0.0.1):
|
- share_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- shared_preferences_foundation (0.0.1):
|
- shared_preferences_foundation (0.0.1):
|
||||||
@@ -281,25 +283,25 @@ PODS:
|
|||||||
- sqflite_darwin (0.0.4):
|
- sqflite_darwin (0.0.4):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (3.50.4):
|
- sqlite3 (3.51.1):
|
||||||
- sqlite3/common (= 3.50.4)
|
- sqlite3/common (= 3.51.1)
|
||||||
- sqlite3/common (3.50.4)
|
- sqlite3/common (3.51.1)
|
||||||
- sqlite3/dbstatvtab (3.50.4):
|
- sqlite3/dbstatvtab (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/fts5 (3.50.4):
|
- sqlite3/fts5 (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/math (3.50.4):
|
- sqlite3/math (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/perf-threadsafe (3.50.4):
|
- sqlite3/perf-threadsafe (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/rtree (3.50.4):
|
- sqlite3/rtree (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3/session (3.50.4):
|
- sqlite3/session (3.51.1):
|
||||||
- sqlite3/common
|
- sqlite3/common
|
||||||
- sqlite3_flutter_libs (0.0.1):
|
- sqlite3_flutter_libs (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- sqlite3 (~> 3.50.4)
|
- sqlite3 (~> 3.51.1)
|
||||||
- sqlite3/dbstatvtab
|
- sqlite3/dbstatvtab
|
||||||
- sqlite3/fts5
|
- sqlite3/fts5
|
||||||
- sqlite3/math
|
- sqlite3/math
|
||||||
@@ -351,6 +353,7 @@ DEPENDENCIES:
|
|||||||
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
|
||||||
- pasteboard (from `.symlinks/plugins/pasteboard/ios`)
|
- pasteboard (from `.symlinks/plugins/pasteboard/ios`)
|
||||||
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
|
||||||
|
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
|
||||||
- pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`)
|
- pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`)
|
||||||
- protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`)
|
- protocol_handler_ios (from `.symlinks/plugins/protocol_handler_ios/ios`)
|
||||||
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
|
- receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
|
||||||
@@ -458,6 +461,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/pasteboard/ios"
|
:path: ".symlinks/plugins/pasteboard/ios"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
:path: ".symlinks/plugins/path_provider_foundation/darwin"
|
||||||
|
permission_handler_apple:
|
||||||
|
:path: ".symlinks/plugins/permission_handler_apple/ios"
|
||||||
pointer_interceptor_ios:
|
pointer_interceptor_ios:
|
||||||
:path: ".symlinks/plugins/pointer_interceptor_ios/ios"
|
:path: ".symlinks/plugins/pointer_interceptor_ios/ios"
|
||||||
protocol_handler_ios:
|
protocol_handler_ios:
|
||||||
@@ -539,19 +544,20 @@ SPEC CHECKSUMS:
|
|||||||
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499
|
||||||
pasteboard: 49088aeb6119d51f976a421db60d8e1ab079b63c
|
pasteboard: 49088aeb6119d51f976a421db60d8e1ab079b63c
|
||||||
path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880
|
path_provider_foundation: bb55f6dbba17d0dccd6737fe6f7f34fbd0376880
|
||||||
|
permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d
|
||||||
pointer_interceptor_ios: da06a662d5bfd329602b45b2ab41bc0fb5fdb0f0
|
pointer_interceptor_ios: da06a662d5bfd329602b45b2ab41bc0fb5fdb0f0
|
||||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||||
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
|
PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851
|
||||||
protocol_handler_ios: 59f23ee71f3ec602d67902ca7f669a80957888d5
|
protocol_handler_ios: 59f23ee71f3ec602d67902ca7f669a80957888d5
|
||||||
receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
|
receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00
|
||||||
record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374
|
record_ios: f75fa1d57f840012775c0e93a38a7f3ceea1a374
|
||||||
SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a
|
SDWebImage: e9c98383c7572d713c1a0d7dd2783b10599b9838
|
||||||
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
|
share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a
|
||||||
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
|
shared_preferences_foundation: 7036424c3d8ec98dfe75ff1667cb0cd531ec82bb
|
||||||
sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
|
sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
|
||||||
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
|
||||||
sqlite3: 73513155ec6979715d3904ef53a8d68892d4032b
|
sqlite3: 8d708bc63e9f4ce48f0ad9d6269e478c5ced1d9b
|
||||||
sqlite3_flutter_libs: 83f8e9f5b6554077f1d93119fe20ebaa5f3a9ef1
|
sqlite3_flutter_libs: d13b8b3003f18f596e542bcb9482d105577eff41
|
||||||
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
|
||||||
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
|
||||||
syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14
|
syncfusion_flutter_pdfviewer: 90dc48305d2e33d4aa20681d1e98ddeda891bc14
|
||||||
|
|||||||
@@ -358,23 +358,29 @@ class AppDatabase extends _$AppDatabase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> saveChatRooms(List<SnChatRoom> rooms) async {
|
Future<void> saveChatRooms(
|
||||||
|
List<SnChatRoom> rooms, {
|
||||||
|
bool override = false,
|
||||||
|
}) async {
|
||||||
await transaction(() async {
|
await transaction(() async {
|
||||||
// 1. Identify rooms to remove
|
if (override) {
|
||||||
final remoteRoomIds = rooms.map((r) => r.id).toSet();
|
// 1. Identify rooms to remove
|
||||||
final currentRooms = await select(chatRooms).get();
|
final remoteRoomIds = rooms.map((r) => r.id).toSet();
|
||||||
final currentRoomIds = currentRooms.map((r) => r.id).toSet();
|
final currentRooms = await select(chatRooms).get();
|
||||||
final idsToRemove = currentRoomIds.difference(remoteRoomIds);
|
final currentRoomIds = currentRooms.map((r) => r.id).toSet();
|
||||||
|
final idsToRemove = currentRoomIds.difference(remoteRoomIds);
|
||||||
|
|
||||||
if (idsToRemove.isNotEmpty) {
|
if (idsToRemove.isNotEmpty) {
|
||||||
final idsList = idsToRemove.toList();
|
final idsList = idsToRemove.toList();
|
||||||
// Remove messages
|
// Remove messages
|
||||||
await (delete(chatMessages)..where((t) => t.roomId.isIn(idsList))).go();
|
await (delete(chatMessages)
|
||||||
// Remove members
|
..where((t) => t.roomId.isIn(idsList))).go();
|
||||||
await (delete(chatMembers)
|
// Remove members
|
||||||
..where((t) => t.chatRoomId.isIn(idsList))).go();
|
await (delete(chatMembers)
|
||||||
// Remove rooms
|
..where((t) => t.chatRoomId.isIn(idsList))).go();
|
||||||
await (delete(chatRooms)..where((t) => t.id.isIn(idsList))).go();
|
// Remove rooms
|
||||||
|
await (delete(chatRooms)..where((t) => t.id.isIn(idsList))).go();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Upsert remote rooms
|
// 2. Upsert remote rooms
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -211,7 +211,7 @@ class IslandApp extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final theme = ref.watch(themeProvider);
|
final theme = ref.watch(themeProvider);
|
||||||
final settings = ref.watch(appSettingsNotifierProvider);
|
final settings = ref.watch(appSettingsProvider);
|
||||||
|
|
||||||
// Convert string theme mode to ThemeMode enum
|
// Convert string theme mode to ThemeMode enum
|
||||||
ThemeMode getThemeMode() {
|
ThemeMode getThemeMode() {
|
||||||
|
|||||||
@@ -12,18 +12,16 @@ _SnAbuseReport _$SnAbuseReportFromJson(Map<String, dynamic> json) =>
|
|||||||
resourceIdentifier: json['resource_identifier'] as String,
|
resourceIdentifier: json['resource_identifier'] as String,
|
||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
reason: json['reason'] as String,
|
reason: json['reason'] as String,
|
||||||
resolvedAt:
|
resolvedAt: json['resolved_at'] == null
|
||||||
json['resolved_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['resolved_at'] as String),
|
||||||
: DateTime.parse(json['resolved_at'] as String),
|
|
||||||
resolution: json['resolution'] as String?,
|
resolution: json['resolution'] as String?,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAbuseReportToJson(_SnAbuseReport instance) =>
|
Map<String, dynamic> _$SnAbuseReportToJson(_SnAbuseReport instance) =>
|
||||||
|
|||||||
@@ -216,20 +216,20 @@ sealed class SnAuthDevice with _$SnAuthDevice {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
sealed class SnAuthDeviceWithChallenge with _$SnAuthDeviceWithChallenge {
|
sealed class SnAuthDeviceWithSession with _$SnAuthDeviceWithSession {
|
||||||
const factory SnAuthDeviceWithChallenge({
|
const factory SnAuthDeviceWithSession({
|
||||||
required String id,
|
required String id,
|
||||||
required String deviceId,
|
required String deviceId,
|
||||||
required String deviceName,
|
required String deviceName,
|
||||||
required String? deviceLabel,
|
required String? deviceLabel,
|
||||||
required String accountId,
|
required String accountId,
|
||||||
required int platform,
|
required int platform,
|
||||||
required List<SnAuthChallenge> challenges,
|
required List<SnAuthSession> sessions,
|
||||||
@Default(false) bool isCurrent,
|
@Default(false) bool isCurrent,
|
||||||
}) = _SnAuthDeviceWithChallengee;
|
}) = _SnAuthDeviceWithSessione;
|
||||||
|
|
||||||
factory SnAuthDeviceWithChallenge.fromJson(Map<String, dynamic> json) =>
|
factory SnAuthDeviceWithSession.fromJson(Map<String, dynamic> json) =>
|
||||||
_$SnAuthDeviceWithChallengeFromJson(json);
|
_$SnAuthDeviceWithSessionFromJson(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
@freezed
|
@freezed
|
||||||
|
|||||||
@@ -3068,51 +3068,51 @@ as bool,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SnAuthDeviceWithChallenge _$SnAuthDeviceWithChallengeFromJson(
|
SnAuthDeviceWithSession _$SnAuthDeviceWithSessionFromJson(
|
||||||
Map<String, dynamic> json
|
Map<String, dynamic> json
|
||||||
) {
|
) {
|
||||||
return _SnAuthDeviceWithChallengee.fromJson(
|
return _SnAuthDeviceWithSessione.fromJson(
|
||||||
json
|
json
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
mixin _$SnAuthDeviceWithChallenge {
|
mixin _$SnAuthDeviceWithSession {
|
||||||
|
|
||||||
String get id; String get deviceId; String get deviceName; String? get deviceLabel; String get accountId; int get platform; List<SnAuthChallenge> get challenges; bool get isCurrent;
|
String get id; String get deviceId; String get deviceName; String? get deviceLabel; String get accountId; int get platform; List<SnAuthSession> get sessions; bool get isCurrent;
|
||||||
/// Create a copy of SnAuthDeviceWithChallenge
|
/// Create a copy of SnAuthDeviceWithSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
$SnAuthDeviceWithChallengeCopyWith<SnAuthDeviceWithChallenge> get copyWith => _$SnAuthDeviceWithChallengeCopyWithImpl<SnAuthDeviceWithChallenge>(this as SnAuthDeviceWithChallenge, _$identity);
|
$SnAuthDeviceWithSessionCopyWith<SnAuthDeviceWithSession> get copyWith => _$SnAuthDeviceWithSessionCopyWithImpl<SnAuthDeviceWithSession>(this as SnAuthDeviceWithSession, _$identity);
|
||||||
|
|
||||||
/// Serializes this SnAuthDeviceWithChallenge to a JSON map.
|
/// Serializes this SnAuthDeviceWithSession to a JSON map.
|
||||||
Map<String, dynamic> toJson();
|
Map<String, dynamic> toJson();
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthDeviceWithChallenge&&(identical(other.id, id) || other.id == id)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.deviceName, deviceName) || other.deviceName == deviceName)&&(identical(other.deviceLabel, deviceLabel) || other.deviceLabel == deviceLabel)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other.challenges, challenges)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthDeviceWithSession&&(identical(other.id, id) || other.id == id)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.deviceName, deviceName) || other.deviceName == deviceName)&&(identical(other.deviceLabel, deviceLabel) || other.deviceLabel == deviceLabel)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other.sessions, sessions)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,deviceId,deviceName,deviceLabel,accountId,platform,const DeepCollectionEquality().hash(challenges),isCurrent);
|
int get hashCode => Object.hash(runtimeType,id,deviceId,deviceName,deviceLabel,accountId,platform,const DeepCollectionEquality().hash(sessions),isCurrent);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnAuthDeviceWithChallenge(id: $id, deviceId: $deviceId, deviceName: $deviceName, deviceLabel: $deviceLabel, accountId: $accountId, platform: $platform, challenges: $challenges, isCurrent: $isCurrent)';
|
return 'SnAuthDeviceWithSession(id: $id, deviceId: $deviceId, deviceName: $deviceName, deviceLabel: $deviceLabel, accountId: $accountId, platform: $platform, sessions: $sessions, isCurrent: $isCurrent)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
abstract mixin class $SnAuthDeviceWithChallengeCopyWith<$Res> {
|
abstract mixin class $SnAuthDeviceWithSessionCopyWith<$Res> {
|
||||||
factory $SnAuthDeviceWithChallengeCopyWith(SnAuthDeviceWithChallenge value, $Res Function(SnAuthDeviceWithChallenge) _then) = _$SnAuthDeviceWithChallengeCopyWithImpl;
|
factory $SnAuthDeviceWithSessionCopyWith(SnAuthDeviceWithSession value, $Res Function(SnAuthDeviceWithSession) _then) = _$SnAuthDeviceWithSessionCopyWithImpl;
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthChallenge> challenges, bool isCurrent
|
String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthSession> sessions, bool isCurrent
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -3120,16 +3120,16 @@ $Res call({
|
|||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
class _$SnAuthDeviceWithChallengeCopyWithImpl<$Res>
|
class _$SnAuthDeviceWithSessionCopyWithImpl<$Res>
|
||||||
implements $SnAuthDeviceWithChallengeCopyWith<$Res> {
|
implements $SnAuthDeviceWithSessionCopyWith<$Res> {
|
||||||
_$SnAuthDeviceWithChallengeCopyWithImpl(this._self, this._then);
|
_$SnAuthDeviceWithSessionCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
final SnAuthDeviceWithChallenge _self;
|
final SnAuthDeviceWithSession _self;
|
||||||
final $Res Function(SnAuthDeviceWithChallenge) _then;
|
final $Res Function(SnAuthDeviceWithSession) _then;
|
||||||
|
|
||||||
/// Create a copy of SnAuthDeviceWithChallenge
|
/// Create a copy of SnAuthDeviceWithSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? deviceId = null,Object? deviceName = null,Object? deviceLabel = freezed,Object? accountId = null,Object? platform = null,Object? challenges = null,Object? isCurrent = null,}) {
|
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? deviceId = null,Object? deviceName = null,Object? deviceLabel = freezed,Object? accountId = null,Object? platform = null,Object? sessions = null,Object? isCurrent = null,}) {
|
||||||
return _then(_self.copyWith(
|
return _then(_self.copyWith(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
|
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -3137,8 +3137,8 @@ as String,deviceName: null == deviceName ? _self.deviceName : deviceName // igno
|
|||||||
as String,deviceLabel: freezed == deviceLabel ? _self.deviceLabel : deviceLabel // ignore: cast_nullable_to_non_nullable
|
as String,deviceLabel: freezed == deviceLabel ? _self.deviceLabel : deviceLabel // ignore: cast_nullable_to_non_nullable
|
||||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
|
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
|
||||||
as int,challenges: null == challenges ? _self.challenges : challenges // ignore: cast_nullable_to_non_nullable
|
as int,sessions: null == sessions ? _self.sessions : sessions // ignore: cast_nullable_to_non_nullable
|
||||||
as List<SnAuthChallenge>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
|
as List<SnAuthSession>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
|
||||||
as bool,
|
as bool,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -3146,8 +3146,8 @@ as bool,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Adds pattern-matching-related methods to [SnAuthDeviceWithChallenge].
|
/// Adds pattern-matching-related methods to [SnAuthDeviceWithSession].
|
||||||
extension SnAuthDeviceWithChallengePatterns on SnAuthDeviceWithChallenge {
|
extension SnAuthDeviceWithSessionPatterns on SnAuthDeviceWithSession {
|
||||||
/// A variant of `map` that fallback to returning `orElse`.
|
/// A variant of `map` that fallback to returning `orElse`.
|
||||||
///
|
///
|
||||||
/// It is equivalent to doing:
|
/// It is equivalent to doing:
|
||||||
@@ -3160,10 +3160,10 @@ extension SnAuthDeviceWithChallengePatterns on SnAuthDeviceWithChallenge {
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthDeviceWithChallengee value)? $default,{required TResult orElse(),}){
|
@optionalTypeArgs TResult maybeMap<TResult extends Object?>(TResult Function( _SnAuthDeviceWithSessione value)? $default,{required TResult orElse(),}){
|
||||||
final _that = this;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee() when $default != null:
|
case _SnAuthDeviceWithSessione() when $default != null:
|
||||||
return $default(_that);case _:
|
return $default(_that);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
|
|
||||||
@@ -3182,10 +3182,10 @@ return $default(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthDeviceWithChallengee value) $default,){
|
@optionalTypeArgs TResult map<TResult extends Object?>(TResult Function( _SnAuthDeviceWithSessione value) $default,){
|
||||||
final _that = this;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee():
|
case _SnAuthDeviceWithSessione():
|
||||||
return $default(_that);}
|
return $default(_that);}
|
||||||
}
|
}
|
||||||
/// A variant of `map` that fallback to returning `null`.
|
/// A variant of `map` that fallback to returning `null`.
|
||||||
@@ -3200,10 +3200,10 @@ return $default(_that);}
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthDeviceWithChallengee value)? $default,){
|
@optionalTypeArgs TResult? mapOrNull<TResult extends Object?>(TResult? Function( _SnAuthDeviceWithSessione value)? $default,){
|
||||||
final _that = this;
|
final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee() when $default != null:
|
case _SnAuthDeviceWithSessione() when $default != null:
|
||||||
return $default(_that);case _:
|
return $default(_that);case _:
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
@@ -3221,10 +3221,10 @@ return $default(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthChallenge> challenges, bool isCurrent)? $default,{required TResult orElse(),}) {final _that = this;
|
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthSession> sessions, bool isCurrent)? $default,{required TResult orElse(),}) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee() when $default != null:
|
case _SnAuthDeviceWithSessione() when $default != null:
|
||||||
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.challenges,_that.isCurrent);case _:
|
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.sessions,_that.isCurrent);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3242,10 +3242,10 @@ return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthChallenge> challenges, bool isCurrent) $default,) {final _that = this;
|
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthSession> sessions, bool isCurrent) $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee():
|
case _SnAuthDeviceWithSessione():
|
||||||
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.challenges,_that.isCurrent);}
|
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.sessions,_that.isCurrent);}
|
||||||
}
|
}
|
||||||
/// A variant of `when` that fallback to returning `null`
|
/// A variant of `when` that fallback to returning `null`
|
||||||
///
|
///
|
||||||
@@ -3259,10 +3259,10 @@ return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthChallenge> challenges, bool isCurrent)? $default,) {final _that = this;
|
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthSession> sessions, bool isCurrent)? $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthDeviceWithChallengee() when $default != null:
|
case _SnAuthDeviceWithSessione() when $default != null:
|
||||||
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.challenges,_that.isCurrent);case _:
|
return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that.accountId,_that.platform,_that.sessions,_that.isCurrent);case _:
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3273,9 +3273,9 @@ return $default(_that.id,_that.deviceId,_that.deviceName,_that.deviceLabel,_that
|
|||||||
/// @nodoc
|
/// @nodoc
|
||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
|
|
||||||
class _SnAuthDeviceWithChallengee implements SnAuthDeviceWithChallenge {
|
class _SnAuthDeviceWithSessione implements SnAuthDeviceWithSession {
|
||||||
const _SnAuthDeviceWithChallengee({required this.id, required this.deviceId, required this.deviceName, required this.deviceLabel, required this.accountId, required this.platform, required final List<SnAuthChallenge> challenges, this.isCurrent = false}): _challenges = challenges;
|
const _SnAuthDeviceWithSessione({required this.id, required this.deviceId, required this.deviceName, required this.deviceLabel, required this.accountId, required this.platform, required final List<SnAuthSession> sessions, this.isCurrent = false}): _sessions = sessions;
|
||||||
factory _SnAuthDeviceWithChallengee.fromJson(Map<String, dynamic> json) => _$SnAuthDeviceWithChallengeeFromJson(json);
|
factory _SnAuthDeviceWithSessione.fromJson(Map<String, dynamic> json) => _$SnAuthDeviceWithSessioneFromJson(json);
|
||||||
|
|
||||||
@override final String id;
|
@override final String id;
|
||||||
@override final String deviceId;
|
@override final String deviceId;
|
||||||
@@ -3283,49 +3283,49 @@ class _SnAuthDeviceWithChallengee implements SnAuthDeviceWithChallenge {
|
|||||||
@override final String? deviceLabel;
|
@override final String? deviceLabel;
|
||||||
@override final String accountId;
|
@override final String accountId;
|
||||||
@override final int platform;
|
@override final int platform;
|
||||||
final List<SnAuthChallenge> _challenges;
|
final List<SnAuthSession> _sessions;
|
||||||
@override List<SnAuthChallenge> get challenges {
|
@override List<SnAuthSession> get sessions {
|
||||||
if (_challenges is EqualUnmodifiableListView) return _challenges;
|
if (_sessions is EqualUnmodifiableListView) return _sessions;
|
||||||
// ignore: implicit_dynamic_type
|
// ignore: implicit_dynamic_type
|
||||||
return EqualUnmodifiableListView(_challenges);
|
return EqualUnmodifiableListView(_sessions);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override@JsonKey() final bool isCurrent;
|
@override@JsonKey() final bool isCurrent;
|
||||||
|
|
||||||
/// Create a copy of SnAuthDeviceWithChallenge
|
/// Create a copy of SnAuthDeviceWithSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
_$SnAuthDeviceWithChallengeeCopyWith<_SnAuthDeviceWithChallengee> get copyWith => __$SnAuthDeviceWithChallengeeCopyWithImpl<_SnAuthDeviceWithChallengee>(this, _$identity);
|
_$SnAuthDeviceWithSessioneCopyWith<_SnAuthDeviceWithSessione> get copyWith => __$SnAuthDeviceWithSessioneCopyWithImpl<_SnAuthDeviceWithSessione>(this, _$identity);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Map<String, dynamic> toJson() {
|
Map<String, dynamic> toJson() {
|
||||||
return _$SnAuthDeviceWithChallengeeToJson(this, );
|
return _$SnAuthDeviceWithSessioneToJson(this, );
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthDeviceWithChallengee&&(identical(other.id, id) || other.id == id)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.deviceName, deviceName) || other.deviceName == deviceName)&&(identical(other.deviceLabel, deviceLabel) || other.deviceLabel == deviceLabel)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other._challenges, _challenges)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthDeviceWithSessione&&(identical(other.id, id) || other.id == id)&&(identical(other.deviceId, deviceId) || other.deviceId == deviceId)&&(identical(other.deviceName, deviceName) || other.deviceName == deviceName)&&(identical(other.deviceLabel, deviceLabel) || other.deviceLabel == deviceLabel)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.platform, platform) || other.platform == platform)&&const DeepCollectionEquality().equals(other._sessions, _sessions)&&(identical(other.isCurrent, isCurrent) || other.isCurrent == isCurrent));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,deviceId,deviceName,deviceLabel,accountId,platform,const DeepCollectionEquality().hash(_challenges),isCurrent);
|
int get hashCode => Object.hash(runtimeType,id,deviceId,deviceName,deviceLabel,accountId,platform,const DeepCollectionEquality().hash(_sessions),isCurrent);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnAuthDeviceWithChallenge(id: $id, deviceId: $deviceId, deviceName: $deviceName, deviceLabel: $deviceLabel, accountId: $accountId, platform: $platform, challenges: $challenges, isCurrent: $isCurrent)';
|
return 'SnAuthDeviceWithSession(id: $id, deviceId: $deviceId, deviceName: $deviceName, deviceLabel: $deviceLabel, accountId: $accountId, platform: $platform, sessions: $sessions, isCurrent: $isCurrent)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
abstract mixin class _$SnAuthDeviceWithChallengeeCopyWith<$Res> implements $SnAuthDeviceWithChallengeCopyWith<$Res> {
|
abstract mixin class _$SnAuthDeviceWithSessioneCopyWith<$Res> implements $SnAuthDeviceWithSessionCopyWith<$Res> {
|
||||||
factory _$SnAuthDeviceWithChallengeeCopyWith(_SnAuthDeviceWithChallengee value, $Res Function(_SnAuthDeviceWithChallengee) _then) = __$SnAuthDeviceWithChallengeeCopyWithImpl;
|
factory _$SnAuthDeviceWithSessioneCopyWith(_SnAuthDeviceWithSessione value, $Res Function(_SnAuthDeviceWithSessione) _then) = __$SnAuthDeviceWithSessioneCopyWithImpl;
|
||||||
@override @useResult
|
@override @useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthChallenge> challenges, bool isCurrent
|
String id, String deviceId, String deviceName, String? deviceLabel, String accountId, int platform, List<SnAuthSession> sessions, bool isCurrent
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -3333,25 +3333,25 @@ $Res call({
|
|||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
class __$SnAuthDeviceWithChallengeeCopyWithImpl<$Res>
|
class __$SnAuthDeviceWithSessioneCopyWithImpl<$Res>
|
||||||
implements _$SnAuthDeviceWithChallengeeCopyWith<$Res> {
|
implements _$SnAuthDeviceWithSessioneCopyWith<$Res> {
|
||||||
__$SnAuthDeviceWithChallengeeCopyWithImpl(this._self, this._then);
|
__$SnAuthDeviceWithSessioneCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
final _SnAuthDeviceWithChallengee _self;
|
final _SnAuthDeviceWithSessione _self;
|
||||||
final $Res Function(_SnAuthDeviceWithChallengee) _then;
|
final $Res Function(_SnAuthDeviceWithSessione) _then;
|
||||||
|
|
||||||
/// Create a copy of SnAuthDeviceWithChallenge
|
/// Create a copy of SnAuthDeviceWithSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? deviceId = null,Object? deviceName = null,Object? deviceLabel = freezed,Object? accountId = null,Object? platform = null,Object? challenges = null,Object? isCurrent = null,}) {
|
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? deviceId = null,Object? deviceName = null,Object? deviceLabel = freezed,Object? accountId = null,Object? platform = null,Object? sessions = null,Object? isCurrent = null,}) {
|
||||||
return _then(_SnAuthDeviceWithChallengee(
|
return _then(_SnAuthDeviceWithSessione(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
|
as String,deviceId: null == deviceId ? _self.deviceId : deviceId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,deviceName: null == deviceName ? _self.deviceName : deviceName // ignore: cast_nullable_to_non_nullable
|
as String,deviceName: null == deviceName ? _self.deviceName : deviceName // ignore: cast_nullable_to_non_nullable
|
||||||
as String,deviceLabel: freezed == deviceLabel ? _self.deviceLabel : deviceLabel // ignore: cast_nullable_to_non_nullable
|
as String,deviceLabel: freezed == deviceLabel ? _self.deviceLabel : deviceLabel // ignore: cast_nullable_to_non_nullable
|
||||||
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
as String?,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
|
as String,platform: null == platform ? _self.platform : platform // ignore: cast_nullable_to_non_nullable
|
||||||
as int,challenges: null == challenges ? _self._challenges : challenges // ignore: cast_nullable_to_non_nullable
|
as int,sessions: null == sessions ? _self._sessions : sessions // ignore: cast_nullable_to_non_nullable
|
||||||
as List<SnAuthChallenge>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
|
as List<SnAuthSession>,isCurrent: null == isCurrent ? _self.isCurrent : isCurrent // ignore: cast_nullable_to_non_nullable
|
||||||
as bool,
|
as bool,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,11 @@ _SnAccount _$SnAccountFromJson(Map<String, dynamic> json) => _SnAccount(
|
|||||||
isSuperuser: json['is_superuser'] as bool,
|
isSuperuser: json['is_superuser'] as bool,
|
||||||
automatedId: json['automated_id'] as String?,
|
automatedId: json['automated_id'] as String?,
|
||||||
profile: SnAccountProfile.fromJson(json['profile'] as Map<String, dynamic>),
|
profile: SnAccountProfile.fromJson(json['profile'] as Map<String, dynamic>),
|
||||||
perkSubscription:
|
perkSubscription: json['perk_subscription'] == null
|
||||||
json['perk_subscription'] == null
|
? null
|
||||||
? null
|
: SnWalletSubscriptionRef.fromJson(
|
||||||
: SnWalletSubscriptionRef.fromJson(
|
json['perk_subscription'] as Map<String, dynamic>,
|
||||||
json['perk_subscription'] as Map<String, dynamic>,
|
),
|
||||||
),
|
|
||||||
badges:
|
badges:
|
||||||
(json['badges'] as List<dynamic>?)
|
(json['badges'] as List<dynamic>?)
|
||||||
?.map((e) => SnAccountBadge.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnAccountBadge.fromJson(e as Map<String, dynamic>))
|
||||||
@@ -31,16 +30,14 @@ _SnAccount _$SnAccountFromJson(Map<String, dynamic> json) => _SnAccount(
|
|||||||
?.map((e) => SnContactMethod.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnContactMethod.fromJson(e as Map<String, dynamic>))
|
||||||
.toList() ??
|
.toList() ??
|
||||||
const [],
|
const [],
|
||||||
activatedAt:
|
activatedAt: json['activated_at'] == null
|
||||||
json['activated_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['activated_at'] as String),
|
||||||
: DateTime.parse(json['activated_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAccountToJson(_SnAccount instance) =>
|
Map<String, dynamic> _$SnAccountToJson(_SnAccount instance) =>
|
||||||
@@ -73,8 +70,9 @@ _UsernameColor _$UsernameColorFromJson(Map<String, dynamic> json) =>
|
|||||||
type: json['type'] as String? ?? 'plain',
|
type: json['type'] as String? ?? 'plain',
|
||||||
value: json['value'] as String?,
|
value: json['value'] as String?,
|
||||||
direction: json['direction'] as String?,
|
direction: json['direction'] as String?,
|
||||||
colors:
|
colors: (json['colors'] as List<dynamic>?)
|
||||||
(json['colors'] as List<dynamic>?)?.map((e) => e as String).toList(),
|
?.map((e) => e as String)
|
||||||
|
.toList(),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$UsernameColorToJson(_UsernameColor instance) =>
|
Map<String, dynamic> _$UsernameColorToJson(_UsernameColor instance) =>
|
||||||
@@ -85,69 +83,55 @@ Map<String, dynamic> _$UsernameColorToJson(_UsernameColor instance) =>
|
|||||||
'colors': instance.colors,
|
'colors': instance.colors,
|
||||||
};
|
};
|
||||||
|
|
||||||
_SnAccountProfile _$SnAccountProfileFromJson(Map<String, dynamic> json) =>
|
_SnAccountProfile _$SnAccountProfileFromJson(
|
||||||
_SnAccountProfile(
|
Map<String, dynamic> json,
|
||||||
id: json['id'] as String,
|
) => _SnAccountProfile(
|
||||||
firstName: json['first_name'] as String? ?? '',
|
id: json['id'] as String,
|
||||||
middleName: json['middle_name'] as String? ?? '',
|
firstName: json['first_name'] as String? ?? '',
|
||||||
lastName: json['last_name'] as String? ?? '',
|
middleName: json['middle_name'] as String? ?? '',
|
||||||
bio: json['bio'] as String? ?? '',
|
lastName: json['last_name'] as String? ?? '',
|
||||||
gender: json['gender'] as String? ?? '',
|
bio: json['bio'] as String? ?? '',
|
||||||
pronouns: json['pronouns'] as String? ?? '',
|
gender: json['gender'] as String? ?? '',
|
||||||
location: json['location'] as String? ?? '',
|
pronouns: json['pronouns'] as String? ?? '',
|
||||||
timeZone: json['time_zone'] as String? ?? '',
|
location: json['location'] as String? ?? '',
|
||||||
birthday:
|
timeZone: json['time_zone'] as String? ?? '',
|
||||||
json['birthday'] == null
|
birthday: json['birthday'] == null
|
||||||
? null
|
? null
|
||||||
: DateTime.parse(json['birthday'] as String),
|
: DateTime.parse(json['birthday'] as String),
|
||||||
links:
|
links: json['links'] == null
|
||||||
json['links'] == null
|
? const []
|
||||||
? const []
|
: const ProfileLinkConverter().fromJson(json['links']),
|
||||||
: const ProfileLinkConverter().fromJson(json['links']),
|
lastSeenAt: json['last_seen_at'] == null
|
||||||
lastSeenAt:
|
? null
|
||||||
json['last_seen_at'] == null
|
: DateTime.parse(json['last_seen_at'] as String),
|
||||||
? null
|
activeBadge: json['active_badge'] == null
|
||||||
: DateTime.parse(json['last_seen_at'] as String),
|
? null
|
||||||
activeBadge:
|
: SnAccountBadge.fromJson(json['active_badge'] as Map<String, dynamic>),
|
||||||
json['active_badge'] == null
|
experience: (json['experience'] as num).toInt(),
|
||||||
? null
|
level: (json['level'] as num).toInt(),
|
||||||
: SnAccountBadge.fromJson(
|
socialCredits: (json['social_credits'] as num?)?.toDouble() ?? 100,
|
||||||
json['active_badge'] as Map<String, dynamic>,
|
socialCreditsLevel: (json['social_credits_level'] as num?)?.toInt() ?? 0,
|
||||||
),
|
levelingProgress: (json['leveling_progress'] as num).toDouble(),
|
||||||
experience: (json['experience'] as num).toInt(),
|
picture: json['picture'] == null
|
||||||
level: (json['level'] as num).toInt(),
|
? null
|
||||||
socialCredits: (json['social_credits'] as num?)?.toDouble() ?? 100,
|
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
||||||
socialCreditsLevel: (json['social_credits_level'] as num?)?.toInt() ?? 0,
|
background: json['background'] == null
|
||||||
levelingProgress: (json['leveling_progress'] as num).toDouble(),
|
? null
|
||||||
picture:
|
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
||||||
json['picture'] == null
|
verification: json['verification'] == null
|
||||||
? null
|
? null
|
||||||
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
: SnVerificationMark.fromJson(
|
||||||
background:
|
json['verification'] as Map<String, dynamic>,
|
||||||
json['background'] == null
|
),
|
||||||
? null
|
usernameColor: json['username_color'] == null
|
||||||
: SnCloudFile.fromJson(
|
? null
|
||||||
json['background'] as Map<String, dynamic>,
|
: UsernameColor.fromJson(json['username_color'] as Map<String, dynamic>),
|
||||||
),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
verification:
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
json['verification'] == null
|
deletedAt: json['deleted_at'] == null
|
||||||
? null
|
? null
|
||||||
: SnVerificationMark.fromJson(
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['verification'] as Map<String, dynamic>,
|
);
|
||||||
),
|
|
||||||
usernameColor:
|
|
||||||
json['username_color'] == null
|
|
||||||
? null
|
|
||||||
: UsernameColor.fromJson(
|
|
||||||
json['username_color'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
|
||||||
deletedAt:
|
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAccountProfileToJson(_SnAccountProfile instance) =>
|
Map<String, dynamic> _$SnAccountProfileToJson(_SnAccountProfile instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
@@ -188,17 +172,15 @@ _SnAccountStatus _$SnAccountStatusFromJson(Map<String, dynamic> json) =>
|
|||||||
isCustomized: json['is_customized'] as bool,
|
isCustomized: json['is_customized'] as bool,
|
||||||
label: json['label'] as String? ?? "",
|
label: json['label'] as String? ?? "",
|
||||||
meta: json['meta'] as Map<String, dynamic>?,
|
meta: json['meta'] as Map<String, dynamic>?,
|
||||||
clearedAt:
|
clearedAt: json['cleared_at'] == null
|
||||||
json['cleared_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['cleared_at'] as String),
|
||||||
: DateTime.parse(json['cleared_at'] as String),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAccountStatusToJson(_SnAccountStatus instance) =>
|
Map<String, dynamic> _$SnAccountStatusToJson(_SnAccountStatus instance) =>
|
||||||
@@ -225,21 +207,18 @@ _SnAccountBadge _$SnAccountBadgeFromJson(Map<String, dynamic> json) =>
|
|||||||
label: json['label'] as String?,
|
label: json['label'] as String?,
|
||||||
caption: json['caption'] as String?,
|
caption: json['caption'] as String?,
|
||||||
meta: json['meta'] as Map<String, dynamic>,
|
meta: json['meta'] as Map<String, dynamic>,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
activatedAt:
|
activatedAt: json['activated_at'] == null
|
||||||
json['activated_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['activated_at'] as String),
|
||||||
: DateTime.parse(json['activated_at'] as String),
|
deletedAt: json['deleted_at'] == null
|
||||||
deletedAt:
|
? null
|
||||||
json['deleted_at'] == null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAccountBadgeToJson(_SnAccountBadge instance) =>
|
Map<String, dynamic> _$SnAccountBadgeToJson(_SnAccountBadge instance) =>
|
||||||
@@ -261,20 +240,18 @@ _SnContactMethod _$SnContactMethodFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnContactMethod(
|
_SnContactMethod(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
verifiedAt:
|
verifiedAt: json['verified_at'] == null
|
||||||
json['verified_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['verified_at'] as String),
|
||||||
: DateTime.parse(json['verified_at'] as String),
|
|
||||||
isPrimary: json['is_primary'] as bool,
|
isPrimary: json['is_primary'] as bool,
|
||||||
isPublic: json['is_public'] as bool,
|
isPublic: json['is_public'] as bool,
|
||||||
content: json['content'] as String,
|
content: json['content'] as String,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnContactMethodToJson(_SnContactMethod instance) =>
|
Map<String, dynamic> _$SnContactMethodToJson(_SnContactMethod instance) =>
|
||||||
@@ -295,10 +272,9 @@ _SnNotification _$SnNotificationFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnNotification(
|
_SnNotification(
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
topic: json['topic'] as String,
|
topic: json['topic'] as String,
|
||||||
title: json['title'] as String,
|
title: json['title'] as String,
|
||||||
@@ -306,10 +282,9 @@ _SnNotification _$SnNotificationFromJson(Map<String, dynamic> json) =>
|
|||||||
content: json['content'] as String,
|
content: json['content'] as String,
|
||||||
meta: json['meta'] as Map<String, dynamic>? ?? const {},
|
meta: json['meta'] as Map<String, dynamic>? ?? const {},
|
||||||
priority: (json['priority'] as num).toInt(),
|
priority: (json['priority'] as num).toInt(),
|
||||||
viewedAt:
|
viewedAt: json['viewed_at'] == null
|
||||||
json['viewed_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['viewed_at'] as String),
|
||||||
: DateTime.parse(json['viewed_at'] as String),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -367,24 +342,23 @@ Map<String, dynamic> _$SnAuthDeviceToJson(_SnAuthDevice instance) =>
|
|||||||
'is_current': instance.isCurrent,
|
'is_current': instance.isCurrent,
|
||||||
};
|
};
|
||||||
|
|
||||||
_SnAuthDeviceWithChallengee _$SnAuthDeviceWithChallengeeFromJson(
|
_SnAuthDeviceWithSessione _$SnAuthDeviceWithSessioneFromJson(
|
||||||
Map<String, dynamic> json,
|
Map<String, dynamic> json,
|
||||||
) => _SnAuthDeviceWithChallengee(
|
) => _SnAuthDeviceWithSessione(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
deviceId: json['device_id'] as String,
|
deviceId: json['device_id'] as String,
|
||||||
deviceName: json['device_name'] as String,
|
deviceName: json['device_name'] as String,
|
||||||
deviceLabel: json['device_label'] as String?,
|
deviceLabel: json['device_label'] as String?,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
platform: (json['platform'] as num).toInt(),
|
platform: (json['platform'] as num).toInt(),
|
||||||
challenges:
|
sessions: (json['sessions'] as List<dynamic>)
|
||||||
(json['challenges'] as List<dynamic>)
|
.map((e) => SnAuthSession.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnAuthChallenge.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
isCurrent: json['is_current'] as bool? ?? false,
|
isCurrent: json['is_current'] as bool? ?? false,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAuthDeviceWithChallengeeToJson(
|
Map<String, dynamic> _$SnAuthDeviceWithSessioneToJson(
|
||||||
_SnAuthDeviceWithChallengee instance,
|
_SnAuthDeviceWithSessione instance,
|
||||||
) => <String, dynamic>{
|
) => <String, dynamic>{
|
||||||
'id': instance.id,
|
'id': instance.id,
|
||||||
'device_id': instance.deviceId,
|
'device_id': instance.deviceId,
|
||||||
@@ -392,7 +366,7 @@ Map<String, dynamic> _$SnAuthDeviceWithChallengeeToJson(
|
|||||||
'device_label': instance.deviceLabel,
|
'device_label': instance.deviceLabel,
|
||||||
'account_id': instance.accountId,
|
'account_id': instance.accountId,
|
||||||
'platform': instance.platform,
|
'platform': instance.platform,
|
||||||
'challenges': instance.challenges.map((e) => e.toJson()).toList(),
|
'sessions': instance.sessions.map((e) => e.toJson()).toList(),
|
||||||
'is_current': instance.isCurrent,
|
'is_current': instance.isCurrent,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -405,10 +379,9 @@ _SnExperienceRecord _$SnExperienceRecordFromJson(Map<String, dynamic> json) =>
|
|||||||
bonusMultiplier: (json['bonus_multiplier'] as num?)?.toDouble() ?? 1.0,
|
bonusMultiplier: (json['bonus_multiplier'] as num?)?.toDouble() ?? 1.0,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnExperienceRecordToJson(_SnExperienceRecord instance) =>
|
Map<String, dynamic> _$SnExperienceRecordToJson(_SnExperienceRecord instance) =>
|
||||||
@@ -430,16 +403,14 @@ _SnSocialCreditRecord _$SnSocialCreditRecordFromJson(
|
|||||||
delta: (json['delta'] as num).toDouble(),
|
delta: (json['delta'] as num).toDouble(),
|
||||||
reasonType: json['reason_type'] as String,
|
reasonType: json['reason_type'] as String,
|
||||||
reason: json['reason'] as String,
|
reason: json['reason'] as String,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnSocialCreditRecordToJson(
|
Map<String, dynamic> _$SnSocialCreditRecordToJson(
|
||||||
@@ -460,10 +431,9 @@ _SnFriendOverviewItem _$SnFriendOverviewItemFromJson(
|
|||||||
) => _SnFriendOverviewItem(
|
) => _SnFriendOverviewItem(
|
||||||
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
status: SnAccountStatus.fromJson(json['status'] as Map<String, dynamic>),
|
status: SnAccountStatus.fromJson(json['status'] as Map<String, dynamic>),
|
||||||
activities:
|
activities: (json['activities'] as List<dynamic>)
|
||||||
(json['activities'] as List<dynamic>)
|
.map((e) => SnPresenceActivity.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnPresenceActivity.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnFriendOverviewItemToJson(
|
Map<String, dynamic> _$SnFriendOverviewItemToJson(
|
||||||
|
|||||||
@@ -12,10 +12,9 @@ _SnNotableDay _$SnNotableDayFromJson(Map<String, dynamic> json) =>
|
|||||||
localName: json['local_name'] as String,
|
localName: json['local_name'] as String,
|
||||||
globalName: json['global_name'] as String,
|
globalName: json['global_name'] as String,
|
||||||
countryCode: json['country_code'] as String,
|
countryCode: json['country_code'] as String,
|
||||||
holidays:
|
holidays: (json['holidays'] as List<dynamic>)
|
||||||
(json['holidays'] as List<dynamic>)
|
.map((e) => (e as num).toInt())
|
||||||
.map((e) => (e as num).toInt())
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnNotableDayToJson(_SnNotableDay instance) =>
|
Map<String, dynamic> _$SnNotableDayToJson(_SnNotableDay instance) =>
|
||||||
@@ -35,10 +34,9 @@ _SnTimelineEvent _$SnTimelineEventFromJson(Map<String, dynamic> json) =>
|
|||||||
data: json['data'],
|
data: json['data'],
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnTimelineEventToJson(_SnTimelineEvent instance) =>
|
Map<String, dynamic> _$SnTimelineEventToJson(_SnTimelineEvent instance) =>
|
||||||
@@ -56,21 +54,18 @@ _SnCheckInResult _$SnCheckInResultFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnCheckInResult(
|
_SnCheckInResult(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
level: (json['level'] as num).toInt(),
|
level: (json['level'] as num).toInt(),
|
||||||
tips:
|
tips: (json['tips'] as List<dynamic>)
|
||||||
(json['tips'] as List<dynamic>)
|
.map((e) => SnFortuneTip.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnFortuneTip.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnCheckInResultToJson(_SnCheckInResult instance) =>
|
Map<String, dynamic> _$SnCheckInResultToJson(_SnCheckInResult instance) =>
|
||||||
@@ -103,16 +98,14 @@ _SnEventCalendarEntry _$SnEventCalendarEntryFromJson(
|
|||||||
Map<String, dynamic> json,
|
Map<String, dynamic> json,
|
||||||
) => _SnEventCalendarEntry(
|
) => _SnEventCalendarEntry(
|
||||||
date: DateTime.parse(json['date'] as String),
|
date: DateTime.parse(json['date'] as String),
|
||||||
checkInResult:
|
checkInResult: json['check_in_result'] == null
|
||||||
json['check_in_result'] == null
|
? null
|
||||||
? null
|
: SnCheckInResult.fromJson(
|
||||||
: SnCheckInResult.fromJson(
|
json['check_in_result'] as Map<String, dynamic>,
|
||||||
json['check_in_result'] as Map<String, dynamic>,
|
),
|
||||||
),
|
statuses: (json['statuses'] as List<dynamic>)
|
||||||
statuses:
|
.map((e) => SnAccountStatus.fromJson(e as Map<String, dynamic>))
|
||||||
(json['statuses'] as List<dynamic>)
|
.toList(),
|
||||||
.map((e) => SnAccountStatus.fromJson(e as Map<String, dynamic>))
|
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnEventCalendarEntryToJson(
|
Map<String, dynamic> _$SnEventCalendarEntryToJson(
|
||||||
@@ -141,10 +134,9 @@ _SnPresenceActivity _$SnPresenceActivityFromJson(Map<String, dynamic> json) =>
|
|||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPresenceActivityToJson(_SnPresenceActivity instance) =>
|
Map<String, dynamic> _$SnPresenceActivityToJson(_SnPresenceActivity instance) =>
|
||||||
|
|||||||
@@ -59,8 +59,9 @@ sealed class SnAuthSession with _$SnAuthSession {
|
|||||||
required DateTime? expiredAt,
|
required DateTime? expiredAt,
|
||||||
required List<dynamic> audiences,
|
required List<dynamic> audiences,
|
||||||
required List<dynamic> scopes,
|
required List<dynamic> scopes,
|
||||||
required String ipAddress,
|
required String? ipAddress,
|
||||||
required String userAgent,
|
required String? userAgent,
|
||||||
|
required GeoIpLocation? location,
|
||||||
required int type,
|
required int type,
|
||||||
required String accountId,
|
required String accountId,
|
||||||
required DateTime createdAt,
|
required DateTime createdAt,
|
||||||
|
|||||||
@@ -885,7 +885,7 @@ $GeoIpLocationCopyWith<$Res>? get location {
|
|||||||
/// @nodoc
|
/// @nodoc
|
||||||
mixin _$SnAuthSession {
|
mixin _$SnAuthSession {
|
||||||
|
|
||||||
String get id; String? get label; DateTime get lastGrantedAt; DateTime? get expiredAt; List<dynamic> get audiences; List<dynamic> get scopes; String get ipAddress; String get userAgent; int get type; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
|
String get id; String? get label; DateTime get lastGrantedAt; DateTime? get expiredAt; List<dynamic> get audiences; List<dynamic> get scopes; String? get ipAddress; String? get userAgent; GeoIpLocation? get location; int get type; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
|
||||||
/// Create a copy of SnAuthSession
|
/// Create a copy of SnAuthSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@@ -898,16 +898,16 @@ $SnAuthSessionCopyWith<SnAuthSession> get copyWith => _$SnAuthSessionCopyWithImp
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthSession&&(identical(other.id, id) || other.id == id)&&(identical(other.label, label) || other.label == label)&&(identical(other.lastGrantedAt, lastGrantedAt) || other.lastGrantedAt == lastGrantedAt)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&const DeepCollectionEquality().equals(other.audiences, audiences)&&const DeepCollectionEquality().equals(other.scopes, scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.type, type) || other.type == type)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAuthSession&&(identical(other.id, id) || other.id == id)&&(identical(other.label, label) || other.label == label)&&(identical(other.lastGrantedAt, lastGrantedAt) || other.lastGrantedAt == lastGrantedAt)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&const DeepCollectionEquality().equals(other.audiences, audiences)&&const DeepCollectionEquality().equals(other.scopes, scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.location, location) || other.location == location)&&(identical(other.type, type) || other.type == type)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,label,lastGrantedAt,expiredAt,const DeepCollectionEquality().hash(audiences),const DeepCollectionEquality().hash(scopes),ipAddress,userAgent,type,accountId,createdAt,updatedAt,deletedAt);
|
int get hashCode => Object.hash(runtimeType,id,label,lastGrantedAt,expiredAt,const DeepCollectionEquality().hash(audiences),const DeepCollectionEquality().hash(scopes),ipAddress,userAgent,location,type,accountId,createdAt,updatedAt,deletedAt);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnAuthSession(id: $id, label: $label, lastGrantedAt: $lastGrantedAt, expiredAt: $expiredAt, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, type: $type, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
|
return 'SnAuthSession(id: $id, label: $label, lastGrantedAt: $lastGrantedAt, expiredAt: $expiredAt, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, location: $location, type: $type, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -918,11 +918,11 @@ abstract mixin class $SnAuthSessionCopyWith<$Res> {
|
|||||||
factory $SnAuthSessionCopyWith(SnAuthSession value, $Res Function(SnAuthSession) _then) = _$SnAuthSessionCopyWithImpl;
|
factory $SnAuthSessionCopyWith(SnAuthSession value, $Res Function(SnAuthSession) _then) = _$SnAuthSessionCopyWithImpl;
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
|
String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String? ipAddress, String? userAgent, GeoIpLocation? location, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$GeoIpLocationCopyWith<$Res>? get location;
|
||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -935,7 +935,7 @@ class _$SnAuthSessionCopyWithImpl<$Res>
|
|||||||
|
|
||||||
/// Create a copy of SnAuthSession
|
/// Create a copy of SnAuthSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? label = freezed,Object? lastGrantedAt = null,Object? expiredAt = freezed,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? type = null,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
|
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? label = freezed,Object? lastGrantedAt = null,Object? expiredAt = freezed,Object? audiences = null,Object? scopes = null,Object? ipAddress = freezed,Object? userAgent = freezed,Object? location = freezed,Object? type = null,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
|
||||||
return _then(_self.copyWith(
|
return _then(_self.copyWith(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
|
as String,label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -943,9 +943,10 @@ as String?,lastGrantedAt: null == lastGrantedAt ? _self.lastGrantedAt : lastGran
|
|||||||
as DateTime,expiredAt: freezed == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,expiredAt: freezed == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime?,audiences: null == audiences ? _self.audiences : audiences // ignore: cast_nullable_to_non_nullable
|
as DateTime?,audiences: null == audiences ? _self.audiences : audiences // ignore: cast_nullable_to_non_nullable
|
||||||
as List<dynamic>,scopes: null == scopes ? _self.scopes : scopes // ignore: cast_nullable_to_non_nullable
|
as List<dynamic>,scopes: null == scopes ? _self.scopes : scopes // ignore: cast_nullable_to_non_nullable
|
||||||
as List<dynamic>,ipAddress: null == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
|
as List<dynamic>,ipAddress: freezed == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
|
||||||
as String,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
|
as String?,userAgent: freezed == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
|
||||||
as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
as String?,location: freezed == location ? _self.location : location // ignore: cast_nullable_to_non_nullable
|
||||||
|
as GeoIpLocation?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
||||||
as int,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
as int,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -953,7 +954,19 @@ as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ign
|
|||||||
as DateTime?,
|
as DateTime?,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
/// Create a copy of SnAuthSession
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$GeoIpLocationCopyWith<$Res>? get location {
|
||||||
|
if (_self.location == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $GeoIpLocationCopyWith<$Res>(_self.location!, (value) {
|
||||||
|
return _then(_self.copyWith(location: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1032,10 +1045,10 @@ return $default(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this;
|
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String? ipAddress, String? userAgent, GeoIpLocation? location, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,{required TResult orElse(),}) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthSession() when $default != null:
|
case _SnAuthSession() when $default != null:
|
||||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
|
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.location,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1053,10 +1066,10 @@ return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.a
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this;
|
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String? ipAddress, String? userAgent, GeoIpLocation? location, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt) $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthSession():
|
case _SnAuthSession():
|
||||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
|
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.location,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
|
||||||
}
|
}
|
||||||
/// A variant of `when` that fallback to returning `null`
|
/// A variant of `when` that fallback to returning `null`
|
||||||
///
|
///
|
||||||
@@ -1070,10 +1083,10 @@ return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.a
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this;
|
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String? ipAddress, String? userAgent, GeoIpLocation? location, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt)? $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnAuthSession() when $default != null:
|
case _SnAuthSession() when $default != null:
|
||||||
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
|
return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.location,_that.type,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1085,7 +1098,7 @@ return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.a
|
|||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
|
|
||||||
class _SnAuthSession implements SnAuthSession {
|
class _SnAuthSession implements SnAuthSession {
|
||||||
const _SnAuthSession({required this.id, required this.label, required this.lastGrantedAt, required this.expiredAt, required final List<dynamic> audiences, required final List<dynamic> scopes, required this.ipAddress, required this.userAgent, required this.type, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt}): _audiences = audiences,_scopes = scopes;
|
const _SnAuthSession({required this.id, required this.label, required this.lastGrantedAt, required this.expiredAt, required final List<dynamic> audiences, required final List<dynamic> scopes, required this.ipAddress, required this.userAgent, required this.location, required this.type, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt}): _audiences = audiences,_scopes = scopes;
|
||||||
factory _SnAuthSession.fromJson(Map<String, dynamic> json) => _$SnAuthSessionFromJson(json);
|
factory _SnAuthSession.fromJson(Map<String, dynamic> json) => _$SnAuthSessionFromJson(json);
|
||||||
|
|
||||||
@override final String id;
|
@override final String id;
|
||||||
@@ -1106,8 +1119,9 @@ class _SnAuthSession implements SnAuthSession {
|
|||||||
return EqualUnmodifiableListView(_scopes);
|
return EqualUnmodifiableListView(_scopes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override final String ipAddress;
|
@override final String? ipAddress;
|
||||||
@override final String userAgent;
|
@override final String? userAgent;
|
||||||
|
@override final GeoIpLocation? location;
|
||||||
@override final int type;
|
@override final int type;
|
||||||
@override final String accountId;
|
@override final String accountId;
|
||||||
@override final DateTime createdAt;
|
@override final DateTime createdAt;
|
||||||
@@ -1127,16 +1141,16 @@ Map<String, dynamic> toJson() {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthSession&&(identical(other.id, id) || other.id == id)&&(identical(other.label, label) || other.label == label)&&(identical(other.lastGrantedAt, lastGrantedAt) || other.lastGrantedAt == lastGrantedAt)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&const DeepCollectionEquality().equals(other._audiences, _audiences)&&const DeepCollectionEquality().equals(other._scopes, _scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.type, type) || other.type == type)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAuthSession&&(identical(other.id, id) || other.id == id)&&(identical(other.label, label) || other.label == label)&&(identical(other.lastGrantedAt, lastGrantedAt) || other.lastGrantedAt == lastGrantedAt)&&(identical(other.expiredAt, expiredAt) || other.expiredAt == expiredAt)&&const DeepCollectionEquality().equals(other._audiences, _audiences)&&const DeepCollectionEquality().equals(other._scopes, _scopes)&&(identical(other.ipAddress, ipAddress) || other.ipAddress == ipAddress)&&(identical(other.userAgent, userAgent) || other.userAgent == userAgent)&&(identical(other.location, location) || other.location == location)&&(identical(other.type, type) || other.type == type)&&(identical(other.accountId, accountId) || other.accountId == accountId)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,label,lastGrantedAt,expiredAt,const DeepCollectionEquality().hash(_audiences),const DeepCollectionEquality().hash(_scopes),ipAddress,userAgent,type,accountId,createdAt,updatedAt,deletedAt);
|
int get hashCode => Object.hash(runtimeType,id,label,lastGrantedAt,expiredAt,const DeepCollectionEquality().hash(_audiences),const DeepCollectionEquality().hash(_scopes),ipAddress,userAgent,location,type,accountId,createdAt,updatedAt,deletedAt);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnAuthSession(id: $id, label: $label, lastGrantedAt: $lastGrantedAt, expiredAt: $expiredAt, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, type: $type, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
|
return 'SnAuthSession(id: $id, label: $label, lastGrantedAt: $lastGrantedAt, expiredAt: $expiredAt, audiences: $audiences, scopes: $scopes, ipAddress: $ipAddress, userAgent: $userAgent, location: $location, type: $type, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1147,11 +1161,11 @@ abstract mixin class _$SnAuthSessionCopyWith<$Res> implements $SnAuthSessionCopy
|
|||||||
factory _$SnAuthSessionCopyWith(_SnAuthSession value, $Res Function(_SnAuthSession) _then) = __$SnAuthSessionCopyWithImpl;
|
factory _$SnAuthSessionCopyWith(_SnAuthSession value, $Res Function(_SnAuthSession) _then) = __$SnAuthSessionCopyWithImpl;
|
||||||
@override @useResult
|
@override @useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String ipAddress, String userAgent, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
|
String id, String? label, DateTime lastGrantedAt, DateTime? expiredAt, List<dynamic> audiences, List<dynamic> scopes, String? ipAddress, String? userAgent, GeoIpLocation? location, int type, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@override $GeoIpLocationCopyWith<$Res>? get location;
|
||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -1164,7 +1178,7 @@ class __$SnAuthSessionCopyWithImpl<$Res>
|
|||||||
|
|
||||||
/// Create a copy of SnAuthSession
|
/// Create a copy of SnAuthSession
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? label = freezed,Object? lastGrantedAt = null,Object? expiredAt = freezed,Object? audiences = null,Object? scopes = null,Object? ipAddress = null,Object? userAgent = null,Object? type = null,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
|
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? label = freezed,Object? lastGrantedAt = null,Object? expiredAt = freezed,Object? audiences = null,Object? scopes = null,Object? ipAddress = freezed,Object? userAgent = freezed,Object? location = freezed,Object? type = null,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
|
||||||
return _then(_SnAuthSession(
|
return _then(_SnAuthSession(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
|
as String,label: freezed == label ? _self.label : label // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -1172,9 +1186,10 @@ as String?,lastGrantedAt: null == lastGrantedAt ? _self.lastGrantedAt : lastGran
|
|||||||
as DateTime,expiredAt: freezed == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,expiredAt: freezed == expiredAt ? _self.expiredAt : expiredAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime?,audiences: null == audiences ? _self._audiences : audiences // ignore: cast_nullable_to_non_nullable
|
as DateTime?,audiences: null == audiences ? _self._audiences : audiences // ignore: cast_nullable_to_non_nullable
|
||||||
as List<dynamic>,scopes: null == scopes ? _self._scopes : scopes // ignore: cast_nullable_to_non_nullable
|
as List<dynamic>,scopes: null == scopes ? _self._scopes : scopes // ignore: cast_nullable_to_non_nullable
|
||||||
as List<dynamic>,ipAddress: null == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
|
as List<dynamic>,ipAddress: freezed == ipAddress ? _self.ipAddress : ipAddress // ignore: cast_nullable_to_non_nullable
|
||||||
as String,userAgent: null == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
|
as String?,userAgent: freezed == userAgent ? _self.userAgent : userAgent // ignore: cast_nullable_to_non_nullable
|
||||||
as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
as String?,location: freezed == location ? _self.location : location // ignore: cast_nullable_to_non_nullable
|
||||||
|
as GeoIpLocation?,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
||||||
as int,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
as int,accountId: null == accountId ? _self.accountId : accountId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
as String,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -1183,7 +1198,19 @@ as DateTime?,
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a copy of SnAuthSession
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$GeoIpLocationCopyWith<$Res>? get location {
|
||||||
|
if (_self.location == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $GeoIpLocationCopyWith<$Res>(_self.location!, (value) {
|
||||||
|
return _then(_self.copyWith(location: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -34,35 +34,29 @@ Map<String, dynamic> _$GeoIpLocationToJson(_GeoIpLocation instance) =>
|
|||||||
_SnAuthChallenge _$SnAuthChallengeFromJson(Map<String, dynamic> json) =>
|
_SnAuthChallenge _$SnAuthChallengeFromJson(Map<String, dynamic> json) =>
|
||||||
_SnAuthChallenge(
|
_SnAuthChallenge(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
stepRemain: (json['step_remain'] as num).toInt(),
|
stepRemain: (json['step_remain'] as num).toInt(),
|
||||||
stepTotal: (json['step_total'] as num).toInt(),
|
stepTotal: (json['step_total'] as num).toInt(),
|
||||||
failedAttempts: (json['failed_attempts'] as num).toInt(),
|
failedAttempts: (json['failed_attempts'] as num).toInt(),
|
||||||
blacklistFactors:
|
blacklistFactors: (json['blacklist_factors'] as List<dynamic>)
|
||||||
(json['blacklist_factors'] as List<dynamic>)
|
.map((e) => e as String)
|
||||||
.map((e) => e as String)
|
.toList(),
|
||||||
.toList(),
|
|
||||||
audiences: json['audiences'] as List<dynamic>,
|
audiences: json['audiences'] as List<dynamic>,
|
||||||
scopes: json['scopes'] as List<dynamic>,
|
scopes: json['scopes'] as List<dynamic>,
|
||||||
ipAddress: json['ip_address'] as String,
|
ipAddress: json['ip_address'] as String,
|
||||||
userAgent: json['user_agent'] as String,
|
userAgent: json['user_agent'] as String,
|
||||||
nonce: json['nonce'] as String?,
|
nonce: json['nonce'] as String?,
|
||||||
location:
|
location: json['location'] == null
|
||||||
json['location'] == null
|
? null
|
||||||
? null
|
: GeoIpLocation.fromJson(json['location'] as Map<String, dynamic>),
|
||||||
: GeoIpLocation.fromJson(
|
|
||||||
json['location'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAuthChallengeToJson(_SnAuthChallenge instance) =>
|
Map<String, dynamic> _$SnAuthChallengeToJson(_SnAuthChallenge instance) =>
|
||||||
@@ -90,22 +84,23 @@ _SnAuthSession _$SnAuthSessionFromJson(Map<String, dynamic> json) =>
|
|||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
label: json['label'] as String?,
|
label: json['label'] as String?,
|
||||||
lastGrantedAt: DateTime.parse(json['last_granted_at'] as String),
|
lastGrantedAt: DateTime.parse(json['last_granted_at'] as String),
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
audiences: json['audiences'] as List<dynamic>,
|
audiences: json['audiences'] as List<dynamic>,
|
||||||
scopes: json['scopes'] as List<dynamic>,
|
scopes: json['scopes'] as List<dynamic>,
|
||||||
ipAddress: json['ip_address'] as String,
|
ipAddress: json['ip_address'] as String?,
|
||||||
userAgent: json['user_agent'] as String,
|
userAgent: json['user_agent'] as String?,
|
||||||
|
location: json['location'] == null
|
||||||
|
? null
|
||||||
|
: GeoIpLocation.fromJson(json['location'] as Map<String, dynamic>),
|
||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAuthSessionToJson(_SnAuthSession instance) =>
|
Map<String, dynamic> _$SnAuthSessionToJson(_SnAuthSession instance) =>
|
||||||
@@ -118,6 +113,7 @@ Map<String, dynamic> _$SnAuthSessionToJson(_SnAuthSession instance) =>
|
|||||||
'scopes': instance.scopes,
|
'scopes': instance.scopes,
|
||||||
'ip_address': instance.ipAddress,
|
'ip_address': instance.ipAddress,
|
||||||
'user_agent': instance.userAgent,
|
'user_agent': instance.userAgent,
|
||||||
|
'location': instance.location?.toJson(),
|
||||||
'type': instance.type,
|
'type': instance.type,
|
||||||
'account_id': instance.accountId,
|
'account_id': instance.accountId,
|
||||||
'created_at': instance.createdAt.toIso8601String(),
|
'created_at': instance.createdAt.toIso8601String(),
|
||||||
@@ -131,18 +127,15 @@ _SnAuthFactor _$SnAuthFactorFromJson(Map<String, dynamic> json) =>
|
|||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
expiredAt: json['expired_at'] == null
|
||||||
expiredAt:
|
? null
|
||||||
json['expired_at'] == null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
? null
|
enabledAt: json['enabled_at'] == null
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
? null
|
||||||
enabledAt:
|
: DateTime.parse(json['enabled_at'] as String),
|
||||||
json['enabled_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['enabled_at'] as String),
|
|
||||||
trustworthy: (json['trustworthy'] as num).toInt(),
|
trustworthy: (json['trustworthy'] as num).toInt(),
|
||||||
createdResponse: json['created_response'] as Map<String, dynamic>?,
|
createdResponse: json['created_response'] as Map<String, dynamic>?,
|
||||||
);
|
);
|
||||||
@@ -170,10 +163,9 @@ _SnAccountConnection _$SnAccountConnectionFromJson(Map<String, dynamic> json) =>
|
|||||||
lastUsedAt: DateTime.parse(json['last_used_at'] as String),
|
lastUsedAt: DateTime.parse(json['last_used_at'] as String),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnAccountConnectionToJson(
|
Map<String, dynamic> _$SnAccountConnectionToJson(
|
||||||
|
|||||||
@@ -10,10 +10,9 @@ AutoCompletionAccountResponse _$AutoCompletionAccountResponseFromJson(
|
|||||||
Map<String, dynamic> json,
|
Map<String, dynamic> json,
|
||||||
) => AutoCompletionAccountResponse(
|
) => AutoCompletionAccountResponse(
|
||||||
type: json['type'] as String,
|
type: json['type'] as String,
|
||||||
items:
|
items: (json['items'] as List<dynamic>)
|
||||||
(json['items'] as List<dynamic>)
|
.map((e) => AutoCompletionItem.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => AutoCompletionItem.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
$type: json['runtimeType'] as String?,
|
$type: json['runtimeType'] as String?,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -29,10 +28,9 @@ AutoCompletionStickerResponse _$AutoCompletionStickerResponseFromJson(
|
|||||||
Map<String, dynamic> json,
|
Map<String, dynamic> json,
|
||||||
) => AutoCompletionStickerResponse(
|
) => AutoCompletionStickerResponse(
|
||||||
type: json['type'] as String,
|
type: json['type'] as String,
|
||||||
items:
|
items: (json['items'] as List<dynamic>)
|
||||||
(json['items'] as List<dynamic>)
|
.map((e) => AutoCompletionItem.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => AutoCompletionItem.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
$type: json['runtimeType'] as String?,
|
$type: json['runtimeType'] as String?,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,9 @@ _Bot _$BotFromJson(Map<String, dynamic> json) => _Bot(
|
|||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
developer:
|
developer: json['developer'] == null
|
||||||
json['developer'] == null
|
? null
|
||||||
? null
|
: SnDeveloper.fromJson(json['developer'] as Map<String, dynamic>),
|
||||||
: SnDeveloper.fromJson(json['developer'] as Map<String, dynamic>),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$BotToJson(_Bot instance) => <String, dynamic>{
|
Map<String, dynamic> _$BotToJson(_Bot instance) => <String, dynamic>{
|
||||||
@@ -74,10 +73,9 @@ _BotSecret _$BotSecretFromJson(Map<String, dynamic> json) => _BotSecret(
|
|||||||
id: json['id'] as String? ?? '',
|
id: json['id'] as String? ?? '',
|
||||||
secret: json['secret'] as String? ?? '',
|
secret: json['secret'] as String? ?? '',
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
botId: json['bot_id'] as String? ?? '',
|
botId: json['bot_id'] as String? ?? '',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -13,30 +13,25 @@ _SnChatRoom _$SnChatRoomFromJson(Map<String, dynamic> json) => _SnChatRoom(
|
|||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
isPublic: json['is_public'] as bool? ?? false,
|
isPublic: json['is_public'] as bool? ?? false,
|
||||||
isCommunity: json['is_community'] as bool? ?? false,
|
isCommunity: json['is_community'] as bool? ?? false,
|
||||||
picture:
|
picture: json['picture'] == null
|
||||||
json['picture'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
background: json['background'] == null
|
||||||
background:
|
? null
|
||||||
json['background'] == null
|
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
||||||
? null
|
|
||||||
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
|
||||||
realmId: json['realm_id'] as String?,
|
realmId: json['realm_id'] as String?,
|
||||||
accountId: json['account_id'] as String?,
|
accountId: json['account_id'] as String?,
|
||||||
realm:
|
realm: json['realm'] == null
|
||||||
json['realm'] == null
|
? null
|
||||||
? null
|
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
||||||
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
members: (json['members'] as List<dynamic>?)
|
||||||
members:
|
?.map((e) => SnChatMember.fromJson(e as Map<String, dynamic>))
|
||||||
(json['members'] as List<dynamic>?)
|
.toList(),
|
||||||
?.map((e) => SnChatMember.fromJson(e as Map<String, dynamic>))
|
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnChatRoomToJson(_SnChatRoom instance) =>
|
Map<String, dynamic> _$SnChatRoomToJson(_SnChatRoom instance) =>
|
||||||
@@ -62,10 +57,9 @@ _SnChatMessage _$SnChatMessageFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnChatMessage(
|
_SnChatMessage(
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
type: json['type'] as String? ?? 'text',
|
type: json['type'] as String? ?? 'text',
|
||||||
content: json['content'] as String?,
|
content: json['content'] as String?,
|
||||||
@@ -76,10 +70,9 @@ _SnChatMessage _$SnChatMessageFromJson(Map<String, dynamic> json) =>
|
|||||||
?.map((e) => e as String)
|
?.map((e) => e as String)
|
||||||
.toList() ??
|
.toList() ??
|
||||||
const [],
|
const [],
|
||||||
editedAt:
|
editedAt: json['edited_at'] == null
|
||||||
json['edited_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['edited_at'] as String),
|
||||||
: DateTime.parse(json['edited_at'] as String),
|
|
||||||
attachments:
|
attachments:
|
||||||
(json['attachments'] as List<dynamic>?)
|
(json['attachments'] as List<dynamic>?)
|
||||||
?.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
||||||
@@ -122,10 +115,9 @@ _SnChatReaction _$SnChatReactionFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnChatReaction(
|
_SnChatReaction(
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
messageId: json['message_id'] as String,
|
messageId: json['message_id'] as String,
|
||||||
senderId: json['sender_id'] as String,
|
senderId: json['sender_id'] as String,
|
||||||
@@ -151,42 +143,33 @@ _SnChatMember _$SnChatMemberFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnChatMember(
|
_SnChatMember(
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
chatRoomId: json['chat_room_id'] as String,
|
chatRoomId: json['chat_room_id'] as String,
|
||||||
chatRoom:
|
chatRoom: json['chat_room'] == null
|
||||||
json['chat_room'] == null
|
? null
|
||||||
? null
|
: SnChatRoom.fromJson(json['chat_room'] as Map<String, dynamic>),
|
||||||
: SnChatRoom.fromJson(json['chat_room'] as Map<String, dynamic>),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
nick: json['nick'] as String?,
|
nick: json['nick'] as String?,
|
||||||
notify: (json['notify'] as num).toInt(),
|
notify: (json['notify'] as num).toInt(),
|
||||||
joinedAt:
|
joinedAt: json['joined_at'] == null
|
||||||
json['joined_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['joined_at'] as String),
|
||||||
: DateTime.parse(json['joined_at'] as String),
|
breakUntil: json['break_until'] == null
|
||||||
breakUntil:
|
? null
|
||||||
json['break_until'] == null
|
: DateTime.parse(json['break_until'] as String),
|
||||||
? null
|
timeoutUntil: json['timeout_until'] == null
|
||||||
: DateTime.parse(json['break_until'] as String),
|
? null
|
||||||
timeoutUntil:
|
: DateTime.parse(json['timeout_until'] as String),
|
||||||
json['timeout_until'] == null
|
status: json['status'] == null
|
||||||
? null
|
? null
|
||||||
: DateTime.parse(json['timeout_until'] as String),
|
: SnAccountStatus.fromJson(json['status'] as Map<String, dynamic>),
|
||||||
status:
|
lastTyped: json['last_typed'] == null
|
||||||
json['status'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['last_typed'] as String),
|
||||||
: SnAccountStatus.fromJson(
|
|
||||||
json['status'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
lastTyped:
|
|
||||||
json['last_typed'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['last_typed'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnChatMemberToJson(_SnChatMember instance) =>
|
Map<String, dynamic> _$SnChatMemberToJson(_SnChatMember instance) =>
|
||||||
@@ -211,12 +194,11 @@ Map<String, dynamic> _$SnChatMemberToJson(_SnChatMember instance) =>
|
|||||||
_SnChatSummary _$SnChatSummaryFromJson(Map<String, dynamic> json) =>
|
_SnChatSummary _$SnChatSummaryFromJson(Map<String, dynamic> json) =>
|
||||||
_SnChatSummary(
|
_SnChatSummary(
|
||||||
unreadCount: (json['unread_count'] as num).toInt(),
|
unreadCount: (json['unread_count'] as num).toInt(),
|
||||||
lastMessage:
|
lastMessage: json['last_message'] == null
|
||||||
json['last_message'] == null
|
? null
|
||||||
? null
|
: SnChatMessage.fromJson(
|
||||||
: SnChatMessage.fromJson(
|
json['last_message'] as Map<String, dynamic>,
|
||||||
json['last_message'] as Map<String, dynamic>,
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnChatSummaryToJson(_SnChatSummary instance) =>
|
Map<String, dynamic> _$SnChatSummaryToJson(_SnChatSummary instance) =>
|
||||||
@@ -251,10 +233,9 @@ _ChatRealtimeJoinResponse _$ChatRealtimeJoinResponseFromJson(
|
|||||||
callId: json['call_id'] as String,
|
callId: json['call_id'] as String,
|
||||||
roomName: json['room_name'] as String,
|
roomName: json['room_name'] as String,
|
||||||
isAdmin: json['is_admin'] as bool,
|
isAdmin: json['is_admin'] as bool,
|
||||||
participants:
|
participants: (json['participants'] as List<dynamic>)
|
||||||
(json['participants'] as List<dynamic>)
|
.map((e) => CallParticipant.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => CallParticipant.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$ChatRealtimeJoinResponseToJson(
|
Map<String, dynamic> _$ChatRealtimeJoinResponseToJson(
|
||||||
@@ -288,14 +269,12 @@ _SnRealtimeCall _$SnRealtimeCallFromJson(Map<String, dynamic> json) =>
|
|||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
endedAt: json['ended_at'] == null
|
||||||
endedAt:
|
? null
|
||||||
json['ended_at'] == null
|
: DateTime.parse(json['ended_at'] as String),
|
||||||
? null
|
|
||||||
: DateTime.parse(json['ended_at'] as String),
|
|
||||||
senderId: json['sender_id'] as String,
|
senderId: json['sender_id'] as String,
|
||||||
sender: SnChatMember.fromJson(json['sender'] as Map<String, dynamic>),
|
sender: SnChatMember.fromJson(json['sender'] as Map<String, dynamic>),
|
||||||
roomId: json['room_id'] as String,
|
roomId: json['room_id'] as String,
|
||||||
|
|||||||
@@ -12,30 +12,25 @@ _CustomApp _$CustomAppFromJson(Map<String, dynamic> json) => _CustomApp(
|
|||||||
name: json['name'] as String? ?? '',
|
name: json['name'] as String? ?? '',
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
status: (json['status'] as num?)?.toInt() ?? 0,
|
status: (json['status'] as num?)?.toInt() ?? 0,
|
||||||
picture:
|
picture: json['picture'] == null
|
||||||
json['picture'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
background: json['background'] == null
|
||||||
background:
|
? null
|
||||||
json['background'] == null
|
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
||||||
? null
|
verification: json['verification'] == null
|
||||||
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
? null
|
||||||
verification:
|
: SnVerificationMark.fromJson(
|
||||||
json['verification'] == null
|
json['verification'] as Map<String, dynamic>,
|
||||||
? null
|
),
|
||||||
: SnVerificationMark.fromJson(
|
oauthConfig: json['oauth_config'] == null
|
||||||
json['verification'] as Map<String, dynamic>,
|
? null
|
||||||
),
|
: CustomAppOauthConfig.fromJson(
|
||||||
oauthConfig:
|
json['oauth_config'] as Map<String, dynamic>,
|
||||||
json['oauth_config'] == null
|
),
|
||||||
? null
|
links: json['links'] == null
|
||||||
: CustomAppOauthConfig.fromJson(
|
? null
|
||||||
json['oauth_config'] as Map<String, dynamic>,
|
: CustomAppLinks.fromJson(json['links'] as Map<String, dynamic>),
|
||||||
),
|
|
||||||
links:
|
|
||||||
json['links'] == null
|
|
||||||
? null
|
|
||||||
: CustomAppLinks.fromJson(json['links'] as Map<String, dynamic>),
|
|
||||||
secrets:
|
secrets:
|
||||||
(json['secrets'] as List<dynamic>?)
|
(json['secrets'] as List<dynamic>?)
|
||||||
?.map((e) => CustomAppSecret.fromJson(e as Map<String, dynamic>))
|
?.map((e) => CustomAppSecret.fromJson(e as Map<String, dynamic>))
|
||||||
@@ -83,10 +78,9 @@ _CustomAppOauthConfig _$CustomAppOauthConfigFromJson(
|
|||||||
?.map((e) => e as String)
|
?.map((e) => e as String)
|
||||||
.toList() ??
|
.toList() ??
|
||||||
const [],
|
const [],
|
||||||
postLogoutRedirectUris:
|
postLogoutRedirectUris: (json['post_logout_redirect_uris'] as List<dynamic>?)
|
||||||
(json['post_logout_redirect_uris'] as List<dynamic>?)
|
?.map((e) => e as String)
|
||||||
?.map((e) => e as String)
|
.toList(),
|
||||||
.toList(),
|
|
||||||
allowedScopes:
|
allowedScopes:
|
||||||
(json['allowed_scopes'] as List<dynamic>?)
|
(json['allowed_scopes'] as List<dynamic>?)
|
||||||
?.map((e) => e as String)
|
?.map((e) => e as String)
|
||||||
@@ -118,10 +112,9 @@ _CustomAppSecret _$CustomAppSecretFromJson(Map<String, dynamic> json) =>
|
|||||||
id: json['id'] as String? ?? '',
|
id: json['id'] as String? ?? '',
|
||||||
secret: json['secret'] as String? ?? '',
|
secret: json['secret'] as String? ?? '',
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
isOidc: json['is_oidc'] as bool? ?? false,
|
isOidc: json['is_oidc'] as bool? ?? false,
|
||||||
appId: json['app_id'] as String? ?? '',
|
appId: json['app_id'] as String? ?? '',
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,10 +9,9 @@ part of 'developer.dart';
|
|||||||
_SnDeveloper _$SnDeveloperFromJson(Map<String, dynamic> json) => _SnDeveloper(
|
_SnDeveloper _$SnDeveloperFromJson(Map<String, dynamic> json) => _SnDeveloper(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
publisher:
|
publisher: json['publisher'] == null
|
||||||
json['publisher'] == null
|
? null
|
||||||
? null
|
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
||||||
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnDeveloperToJson(_SnDeveloper instance) =>
|
Map<String, dynamic> _$SnDeveloperToJson(_SnDeveloper instance) =>
|
||||||
|
|||||||
@@ -22,10 +22,9 @@ _DriveTask _$DriveTaskFromJson(Map<String, dynamic> json) => _DriveTask(
|
|||||||
transmissionProgress: (json['transmission_progress'] as num?)?.toDouble(),
|
transmissionProgress: (json['transmission_progress'] as num?)?.toDouble(),
|
||||||
errorMessage: json['error_message'] as String?,
|
errorMessage: json['error_message'] as String?,
|
||||||
statusMessage: json['status_message'] as String?,
|
statusMessage: json['status_message'] as String?,
|
||||||
result:
|
result: json['result'] == null
|
||||||
json['result'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['result'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['result'] as Map<String, dynamic>),
|
|
||||||
poolId: json['pool_id'] as String?,
|
poolId: json['pool_id'] as String?,
|
||||||
bundleId: json['bundle_id'] as String?,
|
bundleId: json['bundle_id'] as String?,
|
||||||
encryptPassword: json['encrypt_password'] as String?,
|
encryptPassword: json['encrypt_password'] as String?,
|
||||||
|
|||||||
@@ -17,10 +17,9 @@ _SnScrappedLink _$SnScrappedLinkFromJson(Map<String, dynamic> json) =>
|
|||||||
siteName: json['site_name'] as String?,
|
siteName: json['site_name'] as String?,
|
||||||
contentType: json['content_type'] as String?,
|
contentType: json['content_type'] as String?,
|
||||||
author: json['author'] as String?,
|
author: json['author'] as String?,
|
||||||
publishedDate:
|
publishedDate: json['published_date'] == null
|
||||||
json['published_date'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['published_date'] as String),
|
||||||
: DateTime.parse(json['published_date'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnScrappedLinkToJson(_SnScrappedLink instance) =>
|
Map<String, dynamic> _$SnScrappedLinkToJson(_SnScrappedLink instance) =>
|
||||||
|
|||||||
@@ -35,10 +35,9 @@ _SnCloudFile _$SnCloudFileFromJson(Map<String, dynamic> json) => _SnCloudFile(
|
|||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
fileMeta: json['file_meta'] as Map<String, dynamic>?,
|
fileMeta: json['file_meta'] as Map<String, dynamic>?,
|
||||||
userMeta: json['user_meta'] as Map<String, dynamic>?,
|
userMeta: json['user_meta'] as Map<String, dynamic>?,
|
||||||
pool:
|
pool: json['pool'] == null
|
||||||
json['pool'] == null
|
? null
|
||||||
? null
|
: SnFilePool.fromJson(json['pool'] as Map<String, dynamic>),
|
||||||
: SnFilePool.fromJson(json['pool'] as Map<String, dynamic>),
|
|
||||||
sensitiveMarks:
|
sensitiveMarks:
|
||||||
(json['sensitive_marks'] as List<dynamic>?)
|
(json['sensitive_marks'] as List<dynamic>?)
|
||||||
?.map((e) => (e as num).toInt())
|
?.map((e) => (e as num).toInt())
|
||||||
@@ -47,17 +46,15 @@ _SnCloudFile _$SnCloudFileFromJson(Map<String, dynamic> json) => _SnCloudFile(
|
|||||||
mimeType: json['mime_type'] as String?,
|
mimeType: json['mime_type'] as String?,
|
||||||
hash: json['hash'] as String?,
|
hash: json['hash'] as String?,
|
||||||
size: (json['size'] as num).toInt(),
|
size: (json['size'] as num).toInt(),
|
||||||
uploadedAt:
|
uploadedAt: json['uploaded_at'] == null
|
||||||
json['uploaded_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['uploaded_at'] as String),
|
||||||
: DateTime.parse(json['uploaded_at'] as String),
|
|
||||||
uploadedTo: json['uploaded_to'] as String?,
|
uploadedTo: json['uploaded_to'] as String?,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnCloudFileToJson(_SnCloudFile instance) =>
|
Map<String, dynamic> _$SnCloudFileToJson(_SnCloudFile instance) =>
|
||||||
@@ -87,10 +84,9 @@ _SnCloudFileIndex _$SnCloudFileIndexFromJson(Map<String, dynamic> json) =>
|
|||||||
file: SnCloudFile.fromJson(json['file'] as Map<String, dynamic>),
|
file: SnCloudFile.fromJson(json['file'] as Map<String, dynamic>),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnCloudFileIndexToJson(_SnCloudFileIndex instance) =>
|
Map<String, dynamic> _$SnCloudFileIndexToJson(_SnCloudFileIndex instance) =>
|
||||||
|
|||||||
@@ -16,18 +16,15 @@ _SnFilePool _$SnFilePoolFromJson(Map<String, dynamic> json) => _SnFilePool(
|
|||||||
isHidden: json['is_hidden'] as bool?,
|
isHidden: json['is_hidden'] as bool?,
|
||||||
accountId: json['account_id'] as String?,
|
accountId: json['account_id'] as String?,
|
||||||
resourceIdentifier: json['resource_identifier'] as String?,
|
resourceIdentifier: json['resource_identifier'] as String?,
|
||||||
createdAt:
|
createdAt: json['created_at'] == null
|
||||||
json['created_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['created_at'] as String),
|
||||||
: DateTime.parse(json['created_at'] as String),
|
updatedAt: json['updated_at'] == null
|
||||||
updatedAt:
|
? null
|
||||||
json['updated_at'] == null
|
: DateTime.parse(json['updated_at'] as String),
|
||||||
? null
|
deletedAt: json['deleted_at'] == null
|
||||||
: DateTime.parse(json['updated_at'] as String),
|
? null
|
||||||
deletedAt:
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnFilePoolToJson(_SnFilePool instance) =>
|
Map<String, dynamic> _$SnFilePoolToJson(_SnFilePool instance) =>
|
||||||
|
|||||||
@@ -10,10 +10,9 @@ _SnHeatmap _$SnHeatmapFromJson(Map<String, dynamic> json) => _SnHeatmap(
|
|||||||
unit: json['unit'] as String,
|
unit: json['unit'] as String,
|
||||||
periodStart: DateTime.parse(json['period_start'] as String),
|
periodStart: DateTime.parse(json['period_start'] as String),
|
||||||
periodEnd: DateTime.parse(json['period_end'] as String),
|
periodEnd: DateTime.parse(json['period_end'] as String),
|
||||||
items:
|
items: (json['items'] as List<dynamic>)
|
||||||
(json['items'] as List<dynamic>)
|
.map((e) => SnHeatmapItem.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnHeatmapItem.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnHeatmapToJson(_SnHeatmap instance) =>
|
Map<String, dynamic> _$SnHeatmapToJson(_SnHeatmap instance) =>
|
||||||
|
|||||||
@@ -8,31 +8,25 @@ part of 'poll.dart';
|
|||||||
|
|
||||||
_SnPollWithStats _$SnPollWithStatsFromJson(Map<String, dynamic> json) =>
|
_SnPollWithStats _$SnPollWithStatsFromJson(Map<String, dynamic> json) =>
|
||||||
_SnPollWithStats(
|
_SnPollWithStats(
|
||||||
userAnswer:
|
userAnswer: json['user_answer'] == null
|
||||||
json['user_answer'] == null
|
? null
|
||||||
? null
|
: SnPollAnswer.fromJson(json['user_answer'] as Map<String, dynamic>),
|
||||||
: SnPollAnswer.fromJson(
|
|
||||||
json['user_answer'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
stats: json['stats'] as Map<String, dynamic>? ?? const {},
|
stats: json['stats'] as Map<String, dynamic>? ?? const {},
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
questions:
|
questions: (json['questions'] as List<dynamic>)
|
||||||
(json['questions'] as List<dynamic>)
|
.map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
title: json['title'] as String?,
|
title: json['title'] as String?,
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
endedAt:
|
endedAt: json['ended_at'] == null
|
||||||
json['ended_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['ended_at'] as String),
|
||||||
: DateTime.parse(json['ended_at'] as String),
|
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPollWithStatsToJson(_SnPollWithStats instance) =>
|
Map<String, dynamic> _$SnPollWithStatsToJson(_SnPollWithStats instance) =>
|
||||||
@@ -52,27 +46,23 @@ Map<String, dynamic> _$SnPollWithStatsToJson(_SnPollWithStats instance) =>
|
|||||||
|
|
||||||
_SnPoll _$SnPollFromJson(Map<String, dynamic> json) => _SnPoll(
|
_SnPoll _$SnPollFromJson(Map<String, dynamic> json) => _SnPoll(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
questions:
|
questions: (json['questions'] as List<dynamic>)
|
||||||
(json['questions'] as List<dynamic>)
|
.map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
title: json['title'] as String?,
|
title: json['title'] as String?,
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
endedAt:
|
endedAt: json['ended_at'] == null
|
||||||
json['ended_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['ended_at'] as String),
|
||||||
: DateTime.parse(json['ended_at'] as String),
|
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
publisher:
|
publisher: json['publisher'] == null
|
||||||
json['publisher'] == null
|
? null
|
||||||
? null
|
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
||||||
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPollToJson(_SnPoll instance) => <String, dynamic>{
|
Map<String, dynamic> _$SnPollToJson(_SnPoll instance) => <String, dynamic>{
|
||||||
@@ -92,10 +82,9 @@ _SnPollQuestion _$SnPollQuestionFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnPollQuestion(
|
_SnPollQuestion(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
type: $enumDecode(_$SnPollQuestionTypeEnumMap, json['type']),
|
type: $enumDecode(_$SnPollQuestionTypeEnumMap, json['type']),
|
||||||
options:
|
options: (json['options'] as List<dynamic>?)
|
||||||
(json['options'] as List<dynamic>?)
|
?.map((e) => SnPollOption.fromJson(e as Map<String, dynamic>))
|
||||||
?.map((e) => SnPollOption.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
title: json['title'] as String,
|
title: json['title'] as String,
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
order: (json['order'] as num).toInt(),
|
order: (json['order'] as num).toInt(),
|
||||||
@@ -145,14 +134,12 @@ _SnPollAnswer _$SnPollAnswerFromJson(Map<String, dynamic> json) =>
|
|||||||
pollId: json['poll_id'] as String,
|
pollId: json['poll_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
account: json['account'] == null
|
||||||
account:
|
? null
|
||||||
json['account'] == null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
? null
|
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPollAnswerToJson(_SnPollAnswer instance) =>
|
Map<String, dynamic> _$SnPollAnswerToJson(_SnPollAnswer instance) =>
|
||||||
|
|||||||
@@ -11,25 +11,20 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
|
|||||||
title: json['title'] as String?,
|
title: json['title'] as String?,
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
language: json['language'] as String?,
|
language: json['language'] as String?,
|
||||||
editedAt:
|
editedAt: json['edited_at'] == null
|
||||||
json['edited_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['edited_at'] as String),
|
||||||
: DateTime.parse(json['edited_at'] as String),
|
publishedAt: json['published_at'] == null
|
||||||
publishedAt:
|
? null
|
||||||
json['published_at'] == null
|
: DateTime.parse(json['published_at'] as String),
|
||||||
? null
|
|
||||||
: DateTime.parse(json['published_at'] as String),
|
|
||||||
visibility: (json['visibility'] as num?)?.toInt() ?? 0,
|
visibility: (json['visibility'] as num?)?.toInt() ?? 0,
|
||||||
content: json['content'] as String?,
|
content: json['content'] as String?,
|
||||||
slug: json['slug'] as String?,
|
slug: json['slug'] as String?,
|
||||||
type: (json['type'] as num?)?.toInt() ?? 0,
|
type: (json['type'] as num?)?.toInt() ?? 0,
|
||||||
meta: json['meta'] as Map<String, dynamic>?,
|
meta: json['meta'] as Map<String, dynamic>?,
|
||||||
embedView:
|
embedView: json['embed_view'] == null
|
||||||
json['embed_view'] == null
|
? null
|
||||||
? null
|
: SnPostEmbedView.fromJson(json['embed_view'] as Map<String, dynamic>),
|
||||||
: SnPostEmbedView.fromJson(
|
|
||||||
json['embed_view'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
viewsUnique: (json['views_unique'] as num?)?.toInt() ?? 0,
|
viewsUnique: (json['views_unique'] as num?)?.toInt() ?? 0,
|
||||||
viewsTotal: (json['views_total'] as num?)?.toInt() ?? 0,
|
viewsTotal: (json['views_total'] as num?)?.toInt() ?? 0,
|
||||||
upvotes: (json['upvotes'] as num?)?.toInt() ?? 0,
|
upvotes: (json['upvotes'] as num?)?.toInt() ?? 0,
|
||||||
@@ -38,25 +33,21 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
|
|||||||
awardedScore: (json['awarded_score'] as num?)?.toInt() ?? 0,
|
awardedScore: (json['awarded_score'] as num?)?.toInt() ?? 0,
|
||||||
pinMode: (json['pin_mode'] as num?)?.toInt(),
|
pinMode: (json['pin_mode'] as num?)?.toInt(),
|
||||||
threadedPostId: json['threaded_post_id'] as String?,
|
threadedPostId: json['threaded_post_id'] as String?,
|
||||||
threadedPost:
|
threadedPost: json['threaded_post'] == null
|
||||||
json['threaded_post'] == null
|
? null
|
||||||
? null
|
: SnPost.fromJson(json['threaded_post'] as Map<String, dynamic>),
|
||||||
: SnPost.fromJson(json['threaded_post'] as Map<String, dynamic>),
|
|
||||||
repliedPostId: json['replied_post_id'] as String?,
|
repliedPostId: json['replied_post_id'] as String?,
|
||||||
repliedPost:
|
repliedPost: json['replied_post'] == null
|
||||||
json['replied_post'] == null
|
? null
|
||||||
? null
|
: SnPost.fromJson(json['replied_post'] as Map<String, dynamic>),
|
||||||
: SnPost.fromJson(json['replied_post'] as Map<String, dynamic>),
|
|
||||||
forwardedPostId: json['forwarded_post_id'] as String?,
|
forwardedPostId: json['forwarded_post_id'] as String?,
|
||||||
forwardedPost:
|
forwardedPost: json['forwarded_post'] == null
|
||||||
json['forwarded_post'] == null
|
? null
|
||||||
? null
|
: SnPost.fromJson(json['forwarded_post'] as Map<String, dynamic>),
|
||||||
: SnPost.fromJson(json['forwarded_post'] as Map<String, dynamic>),
|
|
||||||
realmId: json['realm_id'] as String?,
|
realmId: json['realm_id'] as String?,
|
||||||
realm:
|
realm: json['realm'] == null
|
||||||
json['realm'] == null
|
? null
|
||||||
? null
|
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
||||||
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
|
||||||
attachments:
|
attachments:
|
||||||
(json['attachments'] as List<dynamic>?)
|
(json['attachments'] as List<dynamic>?)
|
||||||
?.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
||||||
@@ -90,18 +81,15 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
|
|||||||
?.map((e) => SnPostFeaturedRecord.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnPostFeaturedRecord.fromJson(e as Map<String, dynamic>))
|
||||||
.toList() ??
|
.toList() ??
|
||||||
const [],
|
const [],
|
||||||
createdAt:
|
createdAt: json['created_at'] == null
|
||||||
json['created_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['created_at'] as String),
|
||||||
: DateTime.parse(json['created_at'] as String),
|
updatedAt: json['updated_at'] == null
|
||||||
updatedAt:
|
? null
|
||||||
json['updated_at'] == null
|
: DateTime.parse(json['updated_at'] as String),
|
||||||
? null
|
deletedAt: json['deleted_at'] == null
|
||||||
: DateTime.parse(json['updated_at'] as String),
|
? null
|
||||||
deletedAt:
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
repliedGone: json['replied_gone'] as bool? ?? false,
|
repliedGone: json['replied_gone'] as bool? ?? false,
|
||||||
forwardedGone: json['forwarded_gone'] as bool? ?? false,
|
forwardedGone: json['forwarded_gone'] as bool? ?? false,
|
||||||
isTruncated: json['is_truncated'] as bool? ?? false,
|
isTruncated: json['is_truncated'] as bool? ?? false,
|
||||||
@@ -214,18 +202,15 @@ _SnPostAward _$SnPostAwardFromJson(Map<String, dynamic> json) => _SnPostAward(
|
|||||||
message: json['message'] as String?,
|
message: json['message'] as String?,
|
||||||
postId: json['post_id'] as String,
|
postId: json['post_id'] as String,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt:
|
createdAt: json['created_at'] == null
|
||||||
json['created_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['created_at'] as String),
|
||||||
: DateTime.parse(json['created_at'] as String),
|
updatedAt: json['updated_at'] == null
|
||||||
updatedAt:
|
? null
|
||||||
json['updated_at'] == null
|
: DateTime.parse(json['updated_at'] as String),
|
||||||
? null
|
deletedAt: json['deleted_at'] == null
|
||||||
: DateTime.parse(json['updated_at'] as String),
|
? null
|
||||||
deletedAt:
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPostAwardToJson(_SnPostAward instance) =>
|
Map<String, dynamic> _$SnPostAwardToJson(_SnPostAward instance) =>
|
||||||
@@ -250,14 +235,12 @@ _SnPostReaction _$SnPostReactionFromJson(Map<String, dynamic> json) =>
|
|||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
deletedAt: json['deleted_at'] == null
|
||||||
deletedAt:
|
? null
|
||||||
json['deleted_at'] == null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPostReactionToJson(_SnPostReaction instance) =>
|
Map<String, dynamic> _$SnPostReactionToJson(_SnPostReaction instance) =>
|
||||||
@@ -278,17 +261,15 @@ _SnPostFeaturedRecord _$SnPostFeaturedRecordFromJson(
|
|||||||
) => _SnPostFeaturedRecord(
|
) => _SnPostFeaturedRecord(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
postId: json['post_id'] as String,
|
postId: json['post_id'] as String,
|
||||||
featuredAt:
|
featuredAt: json['featured_at'] == null
|
||||||
json['featured_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['featured_at'] as String),
|
||||||
: DateTime.parse(json['featured_at'] as String),
|
|
||||||
socialCredits: (json['social_credits'] as num).toInt(),
|
socialCredits: (json['social_credits'] as num).toInt(),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPostFeaturedRecordToJson(
|
Map<String, dynamic> _$SnPostFeaturedRecordToJson(
|
||||||
|
|||||||
@@ -17,10 +17,9 @@ _SnPublicationSite _$SnPublicationSiteFromJson(Map<String, dynamic> json) =>
|
|||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
pages:
|
pages: (json['pages'] as List<dynamic>)
|
||||||
(json['pages'] as List<dynamic>)
|
.map((e) => SnPublicationPage.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnPublicationPage.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPublicationSiteToJson(_SnPublicationSite instance) =>
|
Map<String, dynamic> _$SnPublicationSiteToJson(_SnPublicationSite instance) =>
|
||||||
|
|||||||
@@ -12,38 +12,31 @@ _SnPublisher _$SnPublisherFromJson(Map<String, dynamic> json) => _SnPublisher(
|
|||||||
name: json['name'] as String? ?? '',
|
name: json['name'] as String? ?? '',
|
||||||
nick: json['nick'] as String? ?? '',
|
nick: json['nick'] as String? ?? '',
|
||||||
bio: json['bio'] as String? ?? '',
|
bio: json['bio'] as String? ?? '',
|
||||||
picture:
|
picture: json['picture'] == null
|
||||||
json['picture'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
background: json['background'] == null
|
||||||
background:
|
? null
|
||||||
json['background'] == null
|
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
||||||
? null
|
account: json['account'] == null
|
||||||
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
? null
|
||||||
account:
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
json['account'] == null
|
|
||||||
? null
|
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
accountId: json['account_id'] as String?,
|
accountId: json['account_id'] as String?,
|
||||||
createdAt:
|
createdAt: json['created_at'] == null
|
||||||
json['created_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['created_at'] as String),
|
||||||
: DateTime.parse(json['created_at'] as String),
|
updatedAt: json['updated_at'] == null
|
||||||
updatedAt:
|
? null
|
||||||
json['updated_at'] == null
|
: DateTime.parse(json['updated_at'] as String),
|
||||||
? null
|
deletedAt: json['deleted_at'] == null
|
||||||
: DateTime.parse(json['updated_at'] as String),
|
? null
|
||||||
deletedAt:
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
realmId: json['realm_id'] as String?,
|
realmId: json['realm_id'] as String?,
|
||||||
verification:
|
verification: json['verification'] == null
|
||||||
json['verification'] == null
|
? null
|
||||||
? null
|
: SnVerificationMark.fromJson(
|
||||||
: SnVerificationMark.fromJson(
|
json['verification'] as Map<String, dynamic>,
|
||||||
json['verification'] as Map<String, dynamic>,
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPublisherToJson(_SnPublisher instance) =>
|
Map<String, dynamic> _$SnPublisherToJson(_SnPublisher instance) =>
|
||||||
@@ -67,26 +60,22 @@ Map<String, dynamic> _$SnPublisherToJson(_SnPublisher instance) =>
|
|||||||
_SnPublisherMember _$SnPublisherMemberFromJson(Map<String, dynamic> json) =>
|
_SnPublisherMember _$SnPublisherMemberFromJson(Map<String, dynamic> json) =>
|
||||||
_SnPublisherMember(
|
_SnPublisherMember(
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
publisher:
|
publisher: json['publisher'] == null
|
||||||
json['publisher'] == null
|
? null
|
||||||
? null
|
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
||||||
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
role: (json['role'] as num).toInt(),
|
role: (json['role'] as num).toInt(),
|
||||||
joinedAt:
|
joinedAt: json['joined_at'] == null
|
||||||
json['joined_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['joined_at'] as String),
|
||||||
: DateTime.parse(json['joined_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnPublisherMemberToJson(_SnPublisherMember instance) =>
|
Map<String, dynamic> _$SnPublisherMemberToJson(_SnPublisherMember instance) =>
|
||||||
|
|||||||
@@ -12,27 +12,23 @@ _SnRealm _$SnRealmFromJson(Map<String, dynamic> json) => _SnRealm(
|
|||||||
name: json['name'] as String? ?? '',
|
name: json['name'] as String? ?? '',
|
||||||
description: json['description'] as String? ?? '',
|
description: json['description'] as String? ?? '',
|
||||||
verifiedAs: json['verified_as'] as String?,
|
verifiedAs: json['verified_as'] as String?,
|
||||||
verifiedAt:
|
verifiedAt: json['verified_at'] == null
|
||||||
json['verified_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['verified_at'] as String),
|
||||||
: DateTime.parse(json['verified_at'] as String),
|
|
||||||
isCommunity: json['is_community'] as bool,
|
isCommunity: json['is_community'] as bool,
|
||||||
isPublic: json['is_public'] as bool,
|
isPublic: json['is_public'] as bool,
|
||||||
picture:
|
picture: json['picture'] == null
|
||||||
json['picture'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['picture'] as Map<String, dynamic>),
|
background: json['background'] == null
|
||||||
background:
|
? null
|
||||||
json['background'] == null
|
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
||||||
? null
|
|
||||||
: SnCloudFile.fromJson(json['background'] as Map<String, dynamic>),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnRealmToJson(_SnRealm instance) => <String, dynamic>{
|
Map<String, dynamic> _$SnRealmToJson(_SnRealm instance) => <String, dynamic>{
|
||||||
@@ -55,32 +51,25 @@ Map<String, dynamic> _$SnRealmToJson(_SnRealm instance) => <String, dynamic>{
|
|||||||
_SnRealmMember _$SnRealmMemberFromJson(Map<String, dynamic> json) =>
|
_SnRealmMember _$SnRealmMemberFromJson(Map<String, dynamic> json) =>
|
||||||
_SnRealmMember(
|
_SnRealmMember(
|
||||||
realmId: json['realm_id'] as String,
|
realmId: json['realm_id'] as String,
|
||||||
realm:
|
realm: json['realm'] == null
|
||||||
json['realm'] == null
|
? null
|
||||||
? null
|
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
||||||
: SnRealm.fromJson(json['realm'] as Map<String, dynamic>),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
role: (json['role'] as num).toInt(),
|
role: (json['role'] as num).toInt(),
|
||||||
joinedAt:
|
joinedAt: json['joined_at'] == null
|
||||||
json['joined_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['joined_at'] as String),
|
||||||
: DateTime.parse(json['joined_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
status: json['status'] == null
|
||||||
status:
|
? null
|
||||||
json['status'] == null
|
: SnAccountStatus.fromJson(json['status'] as Map<String, dynamic>),
|
||||||
? null
|
|
||||||
: SnAccountStatus.fromJson(
|
|
||||||
json['status'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnRealmMemberToJson(_SnRealmMember instance) =>
|
Map<String, dynamic> _$SnRealmMemberToJson(_SnRealmMember instance) =>
|
||||||
|
|||||||
@@ -9,22 +9,19 @@ part of 'reference.dart';
|
|||||||
_Reference _$ReferenceFromJson(Map<String, dynamic> json) => _Reference(
|
_Reference _$ReferenceFromJson(Map<String, dynamic> json) => _Reference(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
fileId: json['file_id'] as String,
|
fileId: json['file_id'] as String,
|
||||||
file:
|
file: json['file'] == null
|
||||||
json['file'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['file'] as Map<String, dynamic>),
|
||||||
: SnCloudFile.fromJson(json['file'] as Map<String, dynamic>),
|
|
||||||
usage: json['usage'] as String,
|
usage: json['usage'] as String,
|
||||||
resourceId: json['resource_id'] as String,
|
resourceId: json['resource_id'] as String,
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$ReferenceToJson(_Reference instance) =>
|
Map<String, dynamic> _$ReferenceToJson(_Reference instance) =>
|
||||||
|
|||||||
@@ -8,26 +8,22 @@ part of 'relationship.dart';
|
|||||||
|
|
||||||
_SnRelationship _$SnRelationshipFromJson(Map<String, dynamic> json) =>
|
_SnRelationship _$SnRelationshipFromJson(Map<String, dynamic> json) =>
|
||||||
_SnRelationship(
|
_SnRelationship(
|
||||||
createdAt:
|
createdAt: json['created_at'] == null
|
||||||
json['created_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['created_at'] as String),
|
||||||
: DateTime.parse(json['created_at'] as String),
|
updatedAt: json['updated_at'] == null
|
||||||
updatedAt:
|
? null
|
||||||
json['updated_at'] == null
|
: DateTime.parse(json['updated_at'] as String),
|
||||||
? null
|
deletedAt: json['deleted_at'] == null
|
||||||
: DateTime.parse(json['updated_at'] as String),
|
? null
|
||||||
deletedAt:
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
account: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
relatedId: json['related_id'] as String,
|
relatedId: json['related_id'] as String,
|
||||||
related: SnAccount.fromJson(json['related'] as Map<String, dynamic>),
|
related: SnAccount.fromJson(json['related'] as Map<String, dynamic>),
|
||||||
expiredAt:
|
expiredAt: json['expired_at'] == null
|
||||||
json['expired_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
status: (json['status'] as num).toInt(),
|
status: (json['status'] as num).toInt(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ sealed class SnStickerPack with _$SnStickerPack {
|
|||||||
required String description,
|
required String description,
|
||||||
required String prefix,
|
required String prefix,
|
||||||
required String publisherId,
|
required String publisherId,
|
||||||
|
required SnCloudFile? icon,
|
||||||
required SnPublisher? publisher,
|
required SnPublisher? publisher,
|
||||||
required DateTime createdAt,
|
required DateTime createdAt,
|
||||||
required DateTime updatedAt,
|
required DateTime updatedAt,
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ $SnStickerPackCopyWith<$Res>? get pack {
|
|||||||
/// @nodoc
|
/// @nodoc
|
||||||
mixin _$SnStickerPack {
|
mixin _$SnStickerPack {
|
||||||
|
|
||||||
String get id; String get name; String get description; String get prefix; String get publisherId; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; List<SnSticker> get stickers;
|
String get id; String get name; String get description; String get prefix; String get publisherId; SnCloudFile? get icon; SnPublisher? get publisher; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt; List<SnSticker> get stickers;
|
||||||
/// Create a copy of SnStickerPack
|
/// Create a copy of SnStickerPack
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@@ -348,16 +348,16 @@ $SnStickerPackCopyWith<SnStickerPack> get copyWith => _$SnStickerPackCopyWithImp
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other.stickers, stickers));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.icon, icon) || other.icon == icon)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other.stickers, stickers));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(stickers));
|
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,icon,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(stickers));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
|
return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, icon: $icon, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -368,11 +368,11 @@ abstract mixin class $SnStickerPackCopyWith<$Res> {
|
|||||||
factory $SnStickerPackCopyWith(SnStickerPack value, $Res Function(SnStickerPack) _then) = _$SnStickerPackCopyWithImpl;
|
factory $SnStickerPackCopyWith(SnStickerPack value, $Res Function(SnStickerPack) _then) = _$SnStickerPackCopyWithImpl;
|
||||||
@useResult
|
@useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
|
String id, String name, String description, String prefix, String publisherId, SnCloudFile? icon, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
$SnPublisherCopyWith<$Res>? get publisher;
|
$SnCloudFileCopyWith<$Res>? get icon;$SnPublisherCopyWith<$Res>? get publisher;
|
||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -385,14 +385,15 @@ class _$SnStickerPackCopyWithImpl<$Res>
|
|||||||
|
|
||||||
/// Create a copy of SnStickerPack
|
/// Create a copy of SnStickerPack
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? description = null,Object? prefix = null,Object? publisherId = null,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
|
@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? description = null,Object? prefix = null,Object? publisherId = null,Object? icon = freezed,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
|
||||||
return _then(_self.copyWith(
|
return _then(_self.copyWith(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
||||||
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
|
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
|
||||||
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
|
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
|
||||||
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
|
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
|
as String,icon: freezed == icon ? _self.icon : icon // ignore: cast_nullable_to_non_nullable
|
||||||
|
as SnCloudFile?,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
|
||||||
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -404,6 +405,18 @@ as List<SnSticker>,
|
|||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
|
$SnCloudFileCopyWith<$Res>? get icon {
|
||||||
|
if (_self.icon == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $SnCloudFileCopyWith<$Res>(_self.icon!, (value) {
|
||||||
|
return _then(_self.copyWith(icon: value));
|
||||||
|
});
|
||||||
|
}/// Create a copy of SnStickerPack
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
$SnPublisherCopyWith<$Res>? get publisher {
|
$SnPublisherCopyWith<$Res>? get publisher {
|
||||||
if (_self.publisher == null) {
|
if (_self.publisher == null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -491,10 +504,10 @@ return $default(_that);case _:
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers)? $default,{required TResult orElse(),}) {final _that = this;
|
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id, String name, String description, String prefix, String publisherId, SnCloudFile? icon, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers)? $default,{required TResult orElse(),}) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnStickerPack() when $default != null:
|
case _SnStickerPack() when $default != null:
|
||||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);case _:
|
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.icon,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);case _:
|
||||||
return orElse();
|
return orElse();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -512,10 +525,10 @@ return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publish
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers) $default,) {final _that = this;
|
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id, String name, String description, String prefix, String publisherId, SnCloudFile? icon, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers) $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnStickerPack():
|
case _SnStickerPack():
|
||||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);}
|
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.icon,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);}
|
||||||
}
|
}
|
||||||
/// A variant of `when` that fallback to returning `null`
|
/// A variant of `when` that fallback to returning `null`
|
||||||
///
|
///
|
||||||
@@ -529,10 +542,10 @@ return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publish
|
|||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
|
||||||
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers)? $default,) {final _that = this;
|
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id, String name, String description, String prefix, String publisherId, SnCloudFile? icon, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers)? $default,) {final _that = this;
|
||||||
switch (_that) {
|
switch (_that) {
|
||||||
case _SnStickerPack() when $default != null:
|
case _SnStickerPack() when $default != null:
|
||||||
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);case _:
|
return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.icon,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.stickers);case _:
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -544,7 +557,7 @@ return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publish
|
|||||||
@JsonSerializable()
|
@JsonSerializable()
|
||||||
|
|
||||||
class _SnStickerPack implements SnStickerPack {
|
class _SnStickerPack implements SnStickerPack {
|
||||||
const _SnStickerPack({required this.id, required this.name, required this.description, required this.prefix, required this.publisherId, required this.publisher, required this.createdAt, required this.updatedAt, required this.deletedAt, final List<SnSticker> stickers = const []}): _stickers = stickers;
|
const _SnStickerPack({required this.id, required this.name, required this.description, required this.prefix, required this.publisherId, required this.icon, required this.publisher, required this.createdAt, required this.updatedAt, required this.deletedAt, final List<SnSticker> stickers = const []}): _stickers = stickers;
|
||||||
factory _SnStickerPack.fromJson(Map<String, dynamic> json) => _$SnStickerPackFromJson(json);
|
factory _SnStickerPack.fromJson(Map<String, dynamic> json) => _$SnStickerPackFromJson(json);
|
||||||
|
|
||||||
@override final String id;
|
@override final String id;
|
||||||
@@ -552,6 +565,7 @@ class _SnStickerPack implements SnStickerPack {
|
|||||||
@override final String description;
|
@override final String description;
|
||||||
@override final String prefix;
|
@override final String prefix;
|
||||||
@override final String publisherId;
|
@override final String publisherId;
|
||||||
|
@override final SnCloudFile? icon;
|
||||||
@override final SnPublisher? publisher;
|
@override final SnPublisher? publisher;
|
||||||
@override final DateTime createdAt;
|
@override final DateTime createdAt;
|
||||||
@override final DateTime updatedAt;
|
@override final DateTime updatedAt;
|
||||||
@@ -577,16 +591,16 @@ Map<String, dynamic> toJson() {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other._stickers, _stickers));
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnStickerPack&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&(identical(other.prefix, prefix) || other.prefix == prefix)&&(identical(other.publisherId, publisherId) || other.publisherId == publisherId)&&(identical(other.icon, icon) || other.icon == icon)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&const DeepCollectionEquality().equals(other._stickers, _stickers));
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
@override
|
@override
|
||||||
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(_stickers));
|
int get hashCode => Object.hash(runtimeType,id,name,description,prefix,publisherId,icon,publisher,createdAt,updatedAt,deletedAt,const DeepCollectionEquality().hash(_stickers));
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
|
return 'SnStickerPack(id: $id, name: $name, description: $description, prefix: $prefix, publisherId: $publisherId, icon: $icon, publisher: $publisher, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, stickers: $stickers)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -597,11 +611,11 @@ abstract mixin class _$SnStickerPackCopyWith<$Res> implements $SnStickerPackCopy
|
|||||||
factory _$SnStickerPackCopyWith(_SnStickerPack value, $Res Function(_SnStickerPack) _then) = __$SnStickerPackCopyWithImpl;
|
factory _$SnStickerPackCopyWith(_SnStickerPack value, $Res Function(_SnStickerPack) _then) = __$SnStickerPackCopyWithImpl;
|
||||||
@override @useResult
|
@override @useResult
|
||||||
$Res call({
|
$Res call({
|
||||||
String id, String name, String description, String prefix, String publisherId, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
|
String id, String name, String description, String prefix, String publisherId, SnCloudFile? icon, SnPublisher? publisher, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt, List<SnSticker> stickers
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@override $SnPublisherCopyWith<$Res>? get publisher;
|
@override $SnCloudFileCopyWith<$Res>? get icon;@override $SnPublisherCopyWith<$Res>? get publisher;
|
||||||
|
|
||||||
}
|
}
|
||||||
/// @nodoc
|
/// @nodoc
|
||||||
@@ -614,14 +628,15 @@ class __$SnStickerPackCopyWithImpl<$Res>
|
|||||||
|
|
||||||
/// Create a copy of SnStickerPack
|
/// Create a copy of SnStickerPack
|
||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? description = null,Object? prefix = null,Object? publisherId = null,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
|
@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? description = null,Object? prefix = null,Object? publisherId = null,Object? icon = freezed,Object? publisher = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,Object? stickers = null,}) {
|
||||||
return _then(_SnStickerPack(
|
return _then(_SnStickerPack(
|
||||||
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
as String,name: null == name ? _self.name : name // ignore: cast_nullable_to_non_nullable
|
||||||
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
|
as String,description: null == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
|
||||||
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
|
as String,prefix: null == prefix ? _self.prefix : prefix // ignore: cast_nullable_to_non_nullable
|
||||||
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
|
as String,publisherId: null == publisherId ? _self.publisherId : publisherId // ignore: cast_nullable_to_non_nullable
|
||||||
as String,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
|
as String,icon: freezed == icon ? _self.icon : icon // ignore: cast_nullable_to_non_nullable
|
||||||
|
as SnCloudFile?,publisher: freezed == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
|
||||||
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
as SnPublisher?,createdAt: null == createdAt ? _self.createdAt : createdAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,updatedAt: null == updatedAt ? _self.updatedAt : updatedAt // ignore: cast_nullable_to_non_nullable
|
||||||
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
|
as DateTime,deletedAt: freezed == deletedAt ? _self.deletedAt : deletedAt // ignore: cast_nullable_to_non_nullable
|
||||||
@@ -634,6 +649,18 @@ as List<SnSticker>,
|
|||||||
/// with the given fields replaced by the non-null parameter values.
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
@override
|
@override
|
||||||
@pragma('vm:prefer-inline')
|
@pragma('vm:prefer-inline')
|
||||||
|
$SnCloudFileCopyWith<$Res>? get icon {
|
||||||
|
if (_self.icon == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $SnCloudFileCopyWith<$Res>(_self.icon!, (value) {
|
||||||
|
return _then(_self.copyWith(icon: value));
|
||||||
|
});
|
||||||
|
}/// Create a copy of SnStickerPack
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
$SnPublisherCopyWith<$Res>? get publisher {
|
$SnPublisherCopyWith<$Res>? get publisher {
|
||||||
if (_self.publisher == null) {
|
if (_self.publisher == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -11,16 +11,14 @@ _SnSticker _$SnStickerFromJson(Map<String, dynamic> json) => _SnSticker(
|
|||||||
slug: json['slug'] as String,
|
slug: json['slug'] as String,
|
||||||
image: SnCloudFile.fromJson(json['image'] as Map<String, dynamic>),
|
image: SnCloudFile.fromJson(json['image'] as Map<String, dynamic>),
|
||||||
packId: json['pack_id'] as String,
|
packId: json['pack_id'] as String,
|
||||||
pack:
|
pack: json['pack'] == null
|
||||||
json['pack'] == null
|
? null
|
||||||
? null
|
: SnStickerPack.fromJson(json['pack'] as Map<String, dynamic>),
|
||||||
: SnStickerPack.fromJson(json['pack'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnStickerToJson(_SnSticker instance) =>
|
Map<String, dynamic> _$SnStickerToJson(_SnSticker instance) =>
|
||||||
@@ -42,16 +40,17 @@ _SnStickerPack _$SnStickerPackFromJson(Map<String, dynamic> json) =>
|
|||||||
description: json['description'] as String,
|
description: json['description'] as String,
|
||||||
prefix: json['prefix'] as String,
|
prefix: json['prefix'] as String,
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
publisher:
|
icon: json['icon'] == null
|
||||||
json['publisher'] == null
|
? null
|
||||||
? null
|
: SnCloudFile.fromJson(json['icon'] as Map<String, dynamic>),
|
||||||
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
publisher: json['publisher'] == null
|
||||||
|
? null
|
||||||
|
: SnPublisher.fromJson(json['publisher'] as Map<String, dynamic>),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
stickers:
|
stickers:
|
||||||
(json['stickers'] as List<dynamic>?)
|
(json['stickers'] as List<dynamic>?)
|
||||||
?.map((e) => SnSticker.fromJson(e as Map<String, dynamic>))
|
?.map((e) => SnSticker.fromJson(e as Map<String, dynamic>))
|
||||||
@@ -66,6 +65,7 @@ Map<String, dynamic> _$SnStickerPackToJson(_SnStickerPack instance) =>
|
|||||||
'description': instance.description,
|
'description': instance.description,
|
||||||
'prefix': instance.prefix,
|
'prefix': instance.prefix,
|
||||||
'publisher_id': instance.publisherId,
|
'publisher_id': instance.publisherId,
|
||||||
|
'icon': instance.icon?.toJson(),
|
||||||
'publisher': instance.publisher?.toJson(),
|
'publisher': instance.publisher?.toJson(),
|
||||||
'created_at': instance.createdAt.toIso8601String(),
|
'created_at': instance.createdAt.toIso8601String(),
|
||||||
'updated_at': instance.updatedAt.toIso8601String(),
|
'updated_at': instance.updatedAt.toIso8601String(),
|
||||||
|
|||||||
@@ -16,14 +16,12 @@ _StreamThinkingRequest _$StreamThinkingRequestFromJson(
|
|||||||
?.map((e) => e as String)
|
?.map((e) => e as String)
|
||||||
.toList() ??
|
.toList() ??
|
||||||
const [],
|
const [],
|
||||||
attachedPosts:
|
attachedPosts: (json['attached_posts'] as List<dynamic>?)
|
||||||
(json['attached_posts'] as List<dynamic>?)
|
?.map((e) => e as String)
|
||||||
?.map((e) => e as String)
|
.toList(),
|
||||||
.toList(),
|
attachedMessages: (json['attached_messages'] as List<dynamic>?)
|
||||||
attachedMessages:
|
?.map((e) => e as Map<String, dynamic>)
|
||||||
(json['attached_messages'] as List<dynamic>?)
|
.toList(),
|
||||||
?.map((e) => e as Map<String, dynamic>)
|
|
||||||
.toList(),
|
|
||||||
serviceId: json['service_id'] as String?,
|
serviceId: json['service_id'] as String?,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -87,18 +85,14 @@ _SnThinkingMessagePart _$SnThinkingMessagePartFromJson(
|
|||||||
(json['type'] as num).toInt(),
|
(json['type'] as num).toInt(),
|
||||||
),
|
),
|
||||||
text: json['text'] as String?,
|
text: json['text'] as String?,
|
||||||
functionCall:
|
functionCall: json['function_call'] == null
|
||||||
json['function_call'] == null
|
? null
|
||||||
? null
|
: SnFunctionCall.fromJson(json['function_call'] as Map<String, dynamic>),
|
||||||
: SnFunctionCall.fromJson(
|
functionResult: json['function_result'] == null
|
||||||
json['function_call'] as Map<String, dynamic>,
|
? null
|
||||||
),
|
: SnFunctionResult.fromJson(
|
||||||
functionResult:
|
json['function_result'] as Map<String, dynamic>,
|
||||||
json['function_result'] == null
|
),
|
||||||
? null
|
|
||||||
: SnFunctionResult.fromJson(
|
|
||||||
json['function_result'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnThinkingMessagePartToJson(
|
Map<String, dynamic> _$SnThinkingMessagePartToJson(
|
||||||
@@ -119,10 +113,9 @@ _SnThinkingSequence _$SnThinkingSequenceFromJson(Map<String, dynamic> json) =>
|
|||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnThinkingSequenceToJson(_SnThinkingSequence instance) =>
|
Map<String, dynamic> _$SnThinkingSequenceToJson(_SnThinkingSequence instance) =>
|
||||||
@@ -159,18 +152,16 @@ _SnThinkingThought _$SnThinkingThoughtFromJson(Map<String, dynamic> json) =>
|
|||||||
tokenCount: (json['token_count'] as num?)?.toInt(),
|
tokenCount: (json['token_count'] as num?)?.toInt(),
|
||||||
modelName: json['model_name'] as String?,
|
modelName: json['model_name'] as String?,
|
||||||
sequenceId: json['sequence_id'] as String,
|
sequenceId: json['sequence_id'] as String,
|
||||||
sequence:
|
sequence: json['sequence'] == null
|
||||||
json['sequence'] == null
|
? null
|
||||||
? null
|
: SnThinkingSequence.fromJson(
|
||||||
: SnThinkingSequence.fromJson(
|
json['sequence'] as Map<String, dynamic>,
|
||||||
json['sequence'] as Map<String, dynamic>,
|
),
|
||||||
),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnThinkingThoughtToJson(_SnThinkingThought instance) =>
|
Map<String, dynamic> _$SnThinkingThoughtToJson(_SnThinkingThought instance) =>
|
||||||
@@ -206,10 +197,9 @@ _ThoughtServicesResponse _$ThoughtServicesResponseFromJson(
|
|||||||
Map<String, dynamic> json,
|
Map<String, dynamic> json,
|
||||||
) => _ThoughtServicesResponse(
|
) => _ThoughtServicesResponse(
|
||||||
defaultService: json['default_service'] as String,
|
defaultService: json['default_service'] as String,
|
||||||
services:
|
services: (json['services'] as List<dynamic>)
|
||||||
(json['services'] as List<dynamic>)
|
.map((e) => ThoughtService.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => ThoughtService.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$ThoughtServicesResponseToJson(
|
Map<String, dynamic> _$ThoughtServicesResponseToJson(
|
||||||
|
|||||||
@@ -8,21 +8,18 @@ part of 'wallet.dart';
|
|||||||
|
|
||||||
_SnWallet _$SnWalletFromJson(Map<String, dynamic> json) => _SnWallet(
|
_SnWallet _$SnWalletFromJson(Map<String, dynamic> json) => _SnWallet(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
pockets:
|
pockets: (json['pockets'] as List<dynamic>)
|
||||||
(json['pockets'] as List<dynamic>)
|
.map((e) => SnWalletPocket.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnWalletPocket.fromJson(e as Map<String, dynamic>))
|
.toList(),
|
||||||
.toList(),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletToJson(_SnWallet instance) => <String, dynamic>{
|
Map<String, dynamic> _$SnWalletToJson(_SnWallet instance) => <String, dynamic>{
|
||||||
@@ -77,10 +74,9 @@ _SnWalletPocket _$SnWalletPocketFromJson(Map<String, dynamic> json) =>
|
|||||||
walletId: json['wallet_id'] as String,
|
walletId: json['wallet_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletPocketToJson(_SnWalletPocket instance) =>
|
Map<String, dynamic> _$SnWalletPocketToJson(_SnWalletPocket instance) =>
|
||||||
@@ -102,21 +98,18 @@ _SnTransaction _$SnTransactionFromJson(Map<String, dynamic> json) =>
|
|||||||
remarks: json['remarks'] as String?,
|
remarks: json['remarks'] as String?,
|
||||||
type: (json['type'] as num).toInt(),
|
type: (json['type'] as num).toInt(),
|
||||||
payerWalletId: json['payer_wallet_id'] as String?,
|
payerWalletId: json['payer_wallet_id'] as String?,
|
||||||
payerWallet:
|
payerWallet: json['payer_wallet'] == null
|
||||||
json['payer_wallet'] == null
|
? null
|
||||||
? null
|
: SnWallet.fromJson(json['payer_wallet'] as Map<String, dynamic>),
|
||||||
: SnWallet.fromJson(json['payer_wallet'] as Map<String, dynamic>),
|
|
||||||
payeeWalletId: json['payee_wallet_id'] as String?,
|
payeeWalletId: json['payee_wallet_id'] as String?,
|
||||||
payeeWallet:
|
payeeWallet: json['payee_wallet'] == null
|
||||||
json['payee_wallet'] == null
|
? null
|
||||||
? null
|
: SnWallet.fromJson(json['payee_wallet'] as Map<String, dynamic>),
|
||||||
: SnWallet.fromJson(json['payee_wallet'] as Map<String, dynamic>),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnTransactionToJson(_SnTransaction instance) =>
|
Map<String, dynamic> _$SnTransactionToJson(_SnTransaction instance) =>
|
||||||
@@ -140,10 +133,9 @@ _SnWalletSubscription _$SnWalletSubscriptionFromJson(
|
|||||||
) => _SnWalletSubscription(
|
) => _SnWalletSubscription(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
begunAt: DateTime.parse(json['begun_at'] as String),
|
begunAt: DateTime.parse(json['begun_at'] as String),
|
||||||
endedAt:
|
endedAt: json['ended_at'] == null
|
||||||
json['ended_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['ended_at'] as String),
|
||||||
: DateTime.parse(json['ended_at'] as String),
|
|
||||||
identifier: json['identifier'] as String,
|
identifier: json['identifier'] as String,
|
||||||
isActive: json['is_active'] as bool? ?? true,
|
isActive: json['is_active'] as bool? ?? true,
|
||||||
isFreeTrial: json['is_free_trial'] as bool? ?? false,
|
isFreeTrial: json['is_free_trial'] as bool? ?? false,
|
||||||
@@ -153,23 +145,20 @@ _SnWalletSubscription _$SnWalletSubscriptionFromJson(
|
|||||||
basePrice: (json['base_price'] as num?)?.toDouble(),
|
basePrice: (json['base_price'] as num?)?.toDouble(),
|
||||||
couponId: json['coupon_id'] as String?,
|
couponId: json['coupon_id'] as String?,
|
||||||
coupon: json['coupon'],
|
coupon: json['coupon'],
|
||||||
renewalAt:
|
renewalAt: json['renewal_at'] == null
|
||||||
json['renewal_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['renewal_at'] as String),
|
||||||
: DateTime.parse(json['renewal_at'] as String),
|
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
|
||||||
isAvailable: json['is_available'] as bool? ?? true,
|
isAvailable: json['is_available'] as bool? ?? true,
|
||||||
finalPrice: (json['final_price'] as num?)?.toDouble(),
|
finalPrice: (json['final_price'] as num?)?.toDouble(),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletSubscriptionToJson(
|
Map<String, dynamic> _$SnWalletSubscriptionToJson(
|
||||||
@@ -204,10 +193,9 @@ _SnWalletSubscriptionRef _$SnWalletSubscriptionRefFromJson(
|
|||||||
isActive: json['is_active'] as bool,
|
isActive: json['is_active'] as bool,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
identifier: json['identifier'] as String,
|
identifier: json['identifier'] as String,
|
||||||
);
|
);
|
||||||
@@ -239,10 +227,9 @@ _SnWalletOrder _$SnWalletOrderFromJson(Map<String, dynamic> json) =>
|
|||||||
issuerAppId: json['issuer_app_id'] as String?,
|
issuerAppId: json['issuer_app_id'] as String?,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletOrderToJson(_SnWalletOrder instance) =>
|
Map<String, dynamic> _$SnWalletOrderToJson(_SnWalletOrder instance) =>
|
||||||
@@ -269,43 +256,36 @@ _SnWalletGift _$SnWalletGiftFromJson(Map<String, dynamic> json) =>
|
|||||||
giftCode: json['gift_code'] as String,
|
giftCode: json['gift_code'] as String,
|
||||||
subscriptionIdentifier: json['subscription_identifier'] as String,
|
subscriptionIdentifier: json['subscription_identifier'] as String,
|
||||||
recipientId: json['recipient_id'] as String?,
|
recipientId: json['recipient_id'] as String?,
|
||||||
recipient:
|
recipient: json['recipient'] == null
|
||||||
json['recipient'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['recipient'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['recipient'] as Map<String, dynamic>),
|
|
||||||
gifterId: json['gifter_id'] as String,
|
gifterId: json['gifter_id'] as String,
|
||||||
gifter:
|
gifter: json['gifter'] == null
|
||||||
json['gifter'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['gifter'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['gifter'] as Map<String, dynamic>),
|
|
||||||
redeemerId: json['redeemer_id'] as String?,
|
redeemerId: json['redeemer_id'] as String?,
|
||||||
redeemer:
|
redeemer: json['redeemer'] == null
|
||||||
json['redeemer'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['redeemer'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['redeemer'] as Map<String, dynamic>),
|
|
||||||
message: json['message'] as String?,
|
message: json['message'] as String?,
|
||||||
status: (json['status'] as num).toInt(),
|
status: (json['status'] as num).toInt(),
|
||||||
redeemedAt:
|
redeemedAt: json['redeemed_at'] == null
|
||||||
json['redeemed_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['redeemed_at'] as String),
|
||||||
: DateTime.parse(json['redeemed_at'] as String),
|
expiredAt: json['expired_at'] == null
|
||||||
expiredAt:
|
? null
|
||||||
json['expired_at'] == null
|
: DateTime.parse(json['expired_at'] as String),
|
||||||
? null
|
|
||||||
: DateTime.parse(json['expired_at'] as String),
|
|
||||||
subscriptionId: json['subscription_id'] as String?,
|
subscriptionId: json['subscription_id'] as String?,
|
||||||
subscription:
|
subscription: json['subscription'] == null
|
||||||
json['subscription'] == null
|
? null
|
||||||
? null
|
: SnWalletSubscription.fromJson(
|
||||||
: SnWalletSubscription.fromJson(
|
json['subscription'] as Map<String, dynamic>,
|
||||||
json['subscription'] as Map<String, dynamic>,
|
),
|
||||||
),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletGiftToJson(_SnWalletGift instance) =>
|
Map<String, dynamic> _$SnWalletGiftToJson(_SnWalletGift instance) =>
|
||||||
@@ -330,35 +310,31 @@ Map<String, dynamic> _$SnWalletGiftToJson(_SnWalletGift instance) =>
|
|||||||
'deleted_at': instance.deletedAt?.toIso8601String(),
|
'deleted_at': instance.deletedAt?.toIso8601String(),
|
||||||
};
|
};
|
||||||
|
|
||||||
_SnWalletFund _$SnWalletFundFromJson(
|
_SnWalletFund _$SnWalletFundFromJson(Map<String, dynamic> json) =>
|
||||||
Map<String, dynamic> json,
|
_SnWalletFund(
|
||||||
) => _SnWalletFund(
|
id: json['id'] as String,
|
||||||
id: json['id'] as String,
|
currency: json['currency'] as String,
|
||||||
currency: json['currency'] as String,
|
totalAmount: (json['total_amount'] as num).toDouble(),
|
||||||
totalAmount: (json['total_amount'] as num).toDouble(),
|
remainingAmount: (json['remaining_amount'] as num).toDouble(),
|
||||||
remainingAmount: (json['remaining_amount'] as num).toDouble(),
|
amountOfSplits: (json['amount_of_splits'] as num).toInt(),
|
||||||
amountOfSplits: (json['amount_of_splits'] as num).toInt(),
|
splitType: (json['split_type'] as num).toInt(),
|
||||||
splitType: (json['split_type'] as num).toInt(),
|
status: (json['status'] as num).toInt(),
|
||||||
status: (json['status'] as num).toInt(),
|
message: json['message'] as String?,
|
||||||
message: json['message'] as String?,
|
creatorAccountId: json['creator_account_id'] as String,
|
||||||
creatorAccountId: json['creator_account_id'] as String,
|
creatorAccount: json['creator_account'] == null
|
||||||
creatorAccount:
|
|
||||||
json['creator_account'] == null
|
|
||||||
? null
|
? null
|
||||||
: SnAccount.fromJson(json['creator_account'] as Map<String, dynamic>),
|
: SnAccount.fromJson(json['creator_account'] as Map<String, dynamic>),
|
||||||
expiredAt: DateTime.parse(json['expired_at'] as String),
|
expiredAt: DateTime.parse(json['expired_at'] as String),
|
||||||
recipients:
|
recipients: (json['recipients'] as List<dynamic>)
|
||||||
(json['recipients'] as List<dynamic>)
|
|
||||||
.map((e) => SnWalletFundRecipient.fromJson(e as Map<String, dynamic>))
|
.map((e) => SnWalletFundRecipient.fromJson(e as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
isOpen: json['is_open'] as bool,
|
isOpen: json['is_open'] as bool,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
|
||||||
? null
|
? null
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletFundToJson(_SnWalletFund instance) =>
|
Map<String, dynamic> _$SnWalletFundToJson(_SnWalletFund instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
@@ -386,24 +362,19 @@ _SnWalletFundRecipient _$SnWalletFundRecipientFromJson(
|
|||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
fundId: json['fund_id'] as String,
|
fundId: json['fund_id'] as String,
|
||||||
recipientAccountId: json['recipient_account_id'] as String,
|
recipientAccountId: json['recipient_account_id'] as String,
|
||||||
recipientAccount:
|
recipientAccount: json['recipient_account'] == null
|
||||||
json['recipient_account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['recipient_account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(
|
|
||||||
json['recipient_account'] as Map<String, dynamic>,
|
|
||||||
),
|
|
||||||
amount: (json['amount'] as num).toDouble(),
|
amount: (json['amount'] as num).toDouble(),
|
||||||
isReceived: json['is_received'] as bool,
|
isReceived: json['is_received'] as bool,
|
||||||
receivedAt:
|
receivedAt: json['received_at'] == null
|
||||||
json['received_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['received_at'] as String),
|
||||||
: DateTime.parse(json['received_at'] as String),
|
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWalletFundRecipientToJson(
|
Map<String, dynamic> _$SnWalletFundRecipientToJson(
|
||||||
@@ -425,33 +396,29 @@ _SnLotteryTicket _$SnLotteryTicketFromJson(Map<String, dynamic> json) =>
|
|||||||
_SnLotteryTicket(
|
_SnLotteryTicket(
|
||||||
id: json['id'] as String,
|
id: json['id'] as String,
|
||||||
accountId: json['account_id'] as String,
|
accountId: json['account_id'] as String,
|
||||||
account:
|
account: json['account'] == null
|
||||||
json['account'] == null
|
? null
|
||||||
? null
|
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
||||||
: SnAccount.fromJson(json['account'] as Map<String, dynamic>),
|
regionOneNumbers: (json['region_one_numbers'] as List<dynamic>)
|
||||||
regionOneNumbers:
|
.map((e) => (e as num).toInt())
|
||||||
(json['region_one_numbers'] as List<dynamic>)
|
.toList(),
|
||||||
.map((e) => (e as num).toInt())
|
|
||||||
.toList(),
|
|
||||||
regionTwoNumber: (json['region_two_number'] as num).toInt(),
|
regionTwoNumber: (json['region_two_number'] as num).toInt(),
|
||||||
multiplier: (json['multiplier'] as num).toInt(),
|
multiplier: (json['multiplier'] as num).toInt(),
|
||||||
drawStatus: (json['draw_status'] as num).toInt(),
|
drawStatus: (json['draw_status'] as num).toInt(),
|
||||||
drawDate:
|
drawDate: json['draw_date'] == null
|
||||||
json['draw_date'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['draw_date'] as String),
|
||||||
: DateTime.parse(json['draw_date'] as String),
|
|
||||||
matchedRegionOneNumbers:
|
matchedRegionOneNumbers:
|
||||||
(json['matched_region_one_numbers'] as List<dynamic>?)
|
(json['matched_region_one_numbers'] as List<dynamic>?)
|
||||||
?.map((e) => (e as num).toInt())
|
?.map((e) => (e as num).toInt())
|
||||||
.toList(),
|
.toList(),
|
||||||
matchedRegionTwoNumber:
|
matchedRegionTwoNumber: (json['matched_region_two_number'] as num?)
|
||||||
(json['matched_region_two_number'] as num?)?.toInt(),
|
?.toInt(),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnLotteryTicketToJson(_SnLotteryTicket instance) =>
|
Map<String, dynamic> _$SnLotteryTicketToJson(_SnLotteryTicket instance) =>
|
||||||
@@ -471,26 +438,24 @@ Map<String, dynamic> _$SnLotteryTicketToJson(_SnLotteryTicket instance) =>
|
|||||||
'deleted_at': instance.deletedAt?.toIso8601String(),
|
'deleted_at': instance.deletedAt?.toIso8601String(),
|
||||||
};
|
};
|
||||||
|
|
||||||
_SnLotteryRecord _$SnLotteryRecordFromJson(Map<String, dynamic> json) =>
|
_SnLotteryRecord _$SnLotteryRecordFromJson(
|
||||||
_SnLotteryRecord(
|
Map<String, dynamic> json,
|
||||||
id: json['id'] as String,
|
) => _SnLotteryRecord(
|
||||||
drawDate: DateTime.parse(json['draw_date'] as String),
|
id: json['id'] as String,
|
||||||
winningRegionOneNumbers:
|
drawDate: DateTime.parse(json['draw_date'] as String),
|
||||||
(json['winning_region_one_numbers'] as List<dynamic>)
|
winningRegionOneNumbers: (json['winning_region_one_numbers'] as List<dynamic>)
|
||||||
.map((e) => (e as num).toInt())
|
.map((e) => (e as num).toInt())
|
||||||
.toList(),
|
.toList(),
|
||||||
winningRegionTwoNumber:
|
winningRegionTwoNumber: (json['winning_region_two_number'] as num).toInt(),
|
||||||
(json['winning_region_two_number'] as num).toInt(),
|
totalTickets: (json['total_tickets'] as num).toInt(),
|
||||||
totalTickets: (json['total_tickets'] as num).toInt(),
|
totalPrizesAwarded: (json['total_prizes_awarded'] as num).toInt(),
|
||||||
totalPrizesAwarded: (json['total_prizes_awarded'] as num).toInt(),
|
totalPrizeAmount: (json['total_prize_amount'] as num).toDouble(),
|
||||||
totalPrizeAmount: (json['total_prize_amount'] as num).toDouble(),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
deletedAt: json['deleted_at'] == null
|
||||||
deletedAt:
|
? null
|
||||||
json['deleted_at'] == null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
? null
|
);
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
|
||||||
|
|
||||||
Map<String, dynamic> _$SnLotteryRecordToJson(_SnLotteryRecord instance) =>
|
Map<String, dynamic> _$SnLotteryRecordToJson(_SnLotteryRecord instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
|
|||||||
@@ -17,14 +17,12 @@ _SnWebFeed _$SnWebFeedFromJson(Map<String, dynamic> json) => _SnWebFeed(
|
|||||||
url: json['url'] as String,
|
url: json['url'] as String,
|
||||||
title: json['title'] as String,
|
title: json['title'] as String,
|
||||||
description: json['description'] as String?,
|
description: json['description'] as String?,
|
||||||
preview:
|
preview: json['preview'] == null
|
||||||
json['preview'] == null
|
? null
|
||||||
? null
|
: SnScrappedLink.fromJson(json['preview'] as Map<String, dynamic>),
|
||||||
: SnScrappedLink.fromJson(json['preview'] as Map<String, dynamic>),
|
config: json['config'] == null
|
||||||
config:
|
? const SnWebFeedConfig()
|
||||||
json['config'] == null
|
: SnWebFeedConfig.fromJson(json['config'] as Map<String, dynamic>),
|
||||||
? const SnWebFeedConfig()
|
|
||||||
: SnWebFeedConfig.fromJson(json['config'] as Map<String, dynamic>),
|
|
||||||
publisherId: json['publisher_id'] as String,
|
publisherId: json['publisher_id'] as String,
|
||||||
articles:
|
articles:
|
||||||
(json['articles'] as List<dynamic>?)
|
(json['articles'] as List<dynamic>?)
|
||||||
@@ -33,10 +31,9 @@ _SnWebFeed _$SnWebFeedFromJson(Map<String, dynamic> json) => _SnWebFeed(
|
|||||||
const [],
|
const [],
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWebFeedToJson(_SnWebFeed instance) =>
|
Map<String, dynamic> _$SnWebFeedToJson(_SnWebFeed instance) =>
|
||||||
@@ -61,28 +58,22 @@ _SnWebArticle _$SnWebArticleFromJson(Map<String, dynamic> json) =>
|
|||||||
url: json['url'] as String,
|
url: json['url'] as String,
|
||||||
author: json['author'] as String?,
|
author: json['author'] as String?,
|
||||||
meta: json['meta'] as Map<String, dynamic>?,
|
meta: json['meta'] as Map<String, dynamic>?,
|
||||||
preview:
|
preview: json['preview'] == null
|
||||||
json['preview'] == null
|
? null
|
||||||
? null
|
: SnScrappedLink.fromJson(json['preview'] as Map<String, dynamic>),
|
||||||
: SnScrappedLink.fromJson(
|
feed: json['feed'] == null
|
||||||
json['preview'] as Map<String, dynamic>,
|
? null
|
||||||
),
|
: SnWebFeed.fromJson(json['feed'] as Map<String, dynamic>),
|
||||||
feed:
|
|
||||||
json['feed'] == null
|
|
||||||
? null
|
|
||||||
: SnWebFeed.fromJson(json['feed'] as Map<String, dynamic>),
|
|
||||||
content: json['content'] as String?,
|
content: json['content'] as String?,
|
||||||
publishedAt:
|
publishedAt: json['published_at'] == null
|
||||||
json['published_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['published_at'] as String),
|
||||||
: DateTime.parse(json['published_at'] as String),
|
|
||||||
feedId: json['feed_id'] as String,
|
feedId: json['feed_id'] as String,
|
||||||
createdAt: DateTime.parse(json['created_at'] as String),
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
updatedAt: DateTime.parse(json['updated_at'] as String),
|
updatedAt: DateTime.parse(json['updated_at'] as String),
|
||||||
deletedAt:
|
deletedAt: json['deleted_at'] == null
|
||||||
json['deleted_at'] == null
|
? null
|
||||||
? null
|
: DateTime.parse(json['deleted_at'] as String),
|
||||||
: DateTime.parse(json['deleted_at'] as String),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$SnWebArticleToJson(_SnWebArticle instance) =>
|
Map<String, dynamic> _$SnWebArticleToJson(_SnWebArticle instance) =>
|
||||||
|
|||||||
@@ -330,13 +330,127 @@ class ServerState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ServerStateNotifier extends StateNotifier<ServerState> {
|
class ServerStateNotifier extends Notifier<ServerState> {
|
||||||
final ActivityRpcServer server;
|
late final ActivityRpcServer server;
|
||||||
final Dio apiClient;
|
late final Dio apiClient;
|
||||||
Timer? _renewalTimer;
|
Timer? _renewalTimer;
|
||||||
|
|
||||||
ServerStateNotifier(this.apiClient, this.server)
|
@override
|
||||||
: super(ServerState(status: 'Server not started'));
|
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;
|
String? get currentActivityManualId => state.currentActivityManualId;
|
||||||
|
|
||||||
@@ -408,119 +522,8 @@ class ServerStateNotifier extends StateNotifier<ServerState> {
|
|||||||
const kPresenceActivityLease = 5;
|
const kPresenceActivityLease = 5;
|
||||||
|
|
||||||
// Providers
|
// Providers
|
||||||
final rpcServerStateProvider = StateNotifierProvider<
|
final rpcServerStateProvider =
|
||||||
ServerStateNotifier,
|
NotifierProvider<ServerStateNotifier, ServerState>(ServerStateNotifier.new);
|
||||||
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 rpcServerProvider = Provider<ActivityRpcServer>((ref) {
|
final rpcServerProvider = Provider<ActivityRpcServer>((ref) {
|
||||||
final notifier = ref.watch(rpcServerStateProvider.notifier);
|
final notifier = ref.watch(rpcServerStateProvider.notifier);
|
||||||
|
|||||||
@@ -6,152 +6,83 @@ part of 'activity_rpc.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$presenceActivitiesHash() =>
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
r'3bfaa638eeb961ecd62a32d6a7760a6a7e7bf6f2';
|
// 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)
|
@ProviderFor(presenceActivities)
|
||||||
const presenceActivitiesProvider = PresenceActivitiesFamily();
|
const presenceActivitiesProvider = PresenceActivitiesFamily._();
|
||||||
|
|
||||||
/// See also [presenceActivities].
|
final class PresenceActivitiesProvider
|
||||||
class PresenceActivitiesFamily
|
extends
|
||||||
extends Family<AsyncValue<List<SnPresenceActivity>>> {
|
$FunctionalProvider<
|
||||||
/// See also [presenceActivities].
|
AsyncValue<List<SnPresenceActivity>>,
|
||||||
const PresenceActivitiesFamily();
|
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',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [presenceActivities].
|
@override
|
||||||
PresenceActivitiesProvider call(String uname) {
|
String debugGetCreateSourceHash() => _$presenceActivitiesHash();
|
||||||
return PresenceActivitiesProvider(uname);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'presenceActivitiesProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
PresenceActivitiesProvider getProviderOverride(
|
$FutureProviderElement<List<SnPresenceActivity>> $createElement(
|
||||||
covariant PresenceActivitiesProvider provider,
|
$ProviderPointer pointer,
|
||||||
) {
|
) => $FutureProviderElement(pointer);
|
||||||
return call(provider.uname);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
FutureOr<List<SnPresenceActivity>> create(Ref ref) {
|
||||||
|
final argument = this.argument as String;
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
return presenceActivities(ref, argument);
|
||||||
|
|
||||||
@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,
|
|
||||||
name: r'presenceActivitiesProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$presenceActivitiesHash,
|
|
||||||
dependencies: PresenceActivitiesFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
PresenceActivitiesFamily._allTransitiveDependencies,
|
|
||||||
uname: uname,
|
|
||||||
);
|
|
||||||
|
|
||||||
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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<List<SnPresenceActivity>> createElement() {
|
|
||||||
return _PresenceActivitiesProviderElement(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is PresenceActivitiesProvider && other.uname == uname;
|
return other is PresenceActivitiesProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, uname.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$presenceActivitiesHash() =>
|
||||||
// ignore: unused_element
|
r'3bfaa638eeb961ecd62a32d6a7760a6a7e7bf6f2';
|
||||||
mixin PresenceActivitiesRef
|
|
||||||
on AutoDisposeFutureProviderRef<List<SnPresenceActivity>> {
|
|
||||||
/// The parameter `uname` of this provider.
|
|
||||||
String get uname;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _PresenceActivitiesProviderElement
|
final class PresenceActivitiesFamily extends $Family
|
||||||
extends AutoDisposeFutureProviderElement<List<SnPresenceActivity>>
|
with $FunctionalFamilyOverride<FutureOr<List<SnPresenceActivity>>, String> {
|
||||||
with PresenceActivitiesRef {
|
const PresenceActivitiesFamily._()
|
||||||
_PresenceActivitiesProviderElement(super.provider);
|
: super(
|
||||||
|
retry: null,
|
||||||
|
name: r'presenceActivitiesProvider',
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
isAutoDispose: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
PresenceActivitiesProvider call(String uname) =>
|
||||||
|
PresenceActivitiesProvider._(argument: uname, from: this);
|
||||||
|
|
||||||
@override
|
@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
|
|
||||||
|
|||||||
@@ -1 +0,0 @@
|
|||||||
|
|
||||||
@@ -6,19 +6,58 @@ part of 'call.dart';
|
|||||||
// RiverpodGenerator
|
// 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';
|
String _$callNotifierHash() => r'ef4e3e9c9d411cf9dce1ceb456a3b866b2c87db3';
|
||||||
|
|
||||||
/// See also [CallNotifier].
|
abstract class _$CallNotifier extends $Notifier<CallState> {
|
||||||
@ProviderFor(CallNotifier)
|
CallState build();
|
||||||
final callNotifierProvider = NotifierProvider<CallNotifier, CallState>.internal(
|
@$mustCallSuper
|
||||||
CallNotifier.new,
|
@override
|
||||||
name: r'callNotifierProvider',
|
void runBuild() {
|
||||||
debugGetCreateSourceHash:
|
final created = build();
|
||||||
const bool.fromEnvironment('dart.vm.product') ? null : _$callNotifierHash,
|
final ref = this.ref as $Ref<CallState, CallState>;
|
||||||
dependencies: null,
|
final element =
|
||||||
allTransitiveDependencies: null,
|
ref.element
|
||||||
);
|
as $ClassProviderElement<
|
||||||
|
AnyNotifier<CallState, CallState>,
|
||||||
typedef _$CallNotifier = Notifier<CallState>;
|
CallState,
|
||||||
// ignore_for_file: type=lint
|
Object?,
|
||||||
// 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
|
Object?
|
||||||
|
>;
|
||||||
|
element.handleValue(ref, created);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,163 +6,97 @@ part of 'chat_online_count.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$chatOnlineCountNotifierHash() =>
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
r'19af8fd0e9f62c65e12a68215406776085235fa3';
|
// 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)
|
@ProviderFor(ChatOnlineCountNotifier)
|
||||||
const chatOnlineCountNotifierProvider = ChatOnlineCountNotifierFamily();
|
const chatOnlineCountProvider = ChatOnlineCountNotifierFamily._();
|
||||||
|
|
||||||
/// See also [ChatOnlineCountNotifier].
|
final class ChatOnlineCountNotifierProvider
|
||||||
class ChatOnlineCountNotifierFamily extends Family<AsyncValue<int>> {
|
extends $AsyncNotifierProvider<ChatOnlineCountNotifier, int> {
|
||||||
/// See also [ChatOnlineCountNotifier].
|
const ChatOnlineCountNotifierProvider._({
|
||||||
const ChatOnlineCountNotifierFamily();
|
required ChatOnlineCountNotifierFamily super.from,
|
||||||
|
required String super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'chatOnlineCountProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [ChatOnlineCountNotifier].
|
@override
|
||||||
ChatOnlineCountNotifierProvider call(String chatroomId) {
|
String debugGetCreateSourceHash() => _$chatOnlineCountNotifierHash();
|
||||||
return ChatOnlineCountNotifierProvider(chatroomId);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'chatOnlineCountProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
ChatOnlineCountNotifierProvider getProviderOverride(
|
ChatOnlineCountNotifier create() => ChatOnlineCountNotifier();
|
||||||
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,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
chatroomId: chatroomId,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeAsyncNotifierProviderElement<ChatOnlineCountNotifier, int>
|
|
||||||
createElement() {
|
|
||||||
return _ChatOnlineCountNotifierProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is ChatOnlineCountNotifierProvider &&
|
return other is ChatOnlineCountNotifierProvider &&
|
||||||
other.chatroomId == chatroomId;
|
other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, chatroomId.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$chatOnlineCountNotifierHash() =>
|
||||||
// ignore: unused_element
|
r'19af8fd0e9f62c65e12a68215406776085235fa3';
|
||||||
mixin ChatOnlineCountNotifierRef on AutoDisposeAsyncNotifierProviderRef<int> {
|
|
||||||
/// The parameter `chatroomId` of this provider.
|
|
||||||
String get chatroomId;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ChatOnlineCountNotifierProviderElement
|
final class ChatOnlineCountNotifierFamily extends $Family
|
||||||
extends
|
with
|
||||||
AutoDisposeAsyncNotifierProviderElement<ChatOnlineCountNotifier, int>
|
$ClassFamilyOverride<
|
||||||
with ChatOnlineCountNotifierRef {
|
ChatOnlineCountNotifier,
|
||||||
_ChatOnlineCountNotifierProviderElement(super.provider);
|
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
|
@override
|
||||||
String get chatroomId =>
|
String toString() => r'chatOnlineCountProvider';
|
||||||
(origin as ChatOnlineCountNotifierProvider).chatroomId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore_for_file: type=lint
|
abstract class _$ChatOnlineCountNotifier extends $AsyncNotifier<int> {
|
||||||
// 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
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
396
lib/pods/chat/chat_room.dart
Normal file
396
lib/pods/chat/chat_room.dart
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/database/drift_db.dart';
|
||||||
|
import 'package:island/models/account.dart';
|
||||||
|
import 'package:island/models/chat.dart';
|
||||||
|
import 'package:island/models/file.dart';
|
||||||
|
import 'package:island/pods/database.dart';
|
||||||
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/userinfo.dart';
|
||||||
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
|
part 'chat_room.g.dart';
|
||||||
|
|
||||||
|
final chatSyncingProvider = NotifierProvider<ChatSyncingNotifier, bool>(
|
||||||
|
ChatSyncingNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
|
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 {
|
||||||
|
@override
|
||||||
|
Future<List<SnChatRoom>> build() async {
|
||||||
|
final db = ref.watch(databaseProvider);
|
||||||
|
|
||||||
|
try {
|
||||||
|
final localRoomsData = await db.select(db.chatRooms).get();
|
||||||
|
if (localRoomsData.isNotEmpty) {
|
||||||
|
final localRooms = await Future.wait(
|
||||||
|
localRoomsData.map((row) async {
|
||||||
|
final membersRows =
|
||||||
|
await (db.select(db.chatMembers)
|
||||||
|
..where((m) => m.chatRoomId.equals(row.id))).get();
|
||||||
|
final members =
|
||||||
|
membersRows.map((mRow) {
|
||||||
|
final account = SnAccount.fromJson(mRow.account);
|
||||||
|
return SnChatMember(
|
||||||
|
id: mRow.id,
|
||||||
|
chatRoomId: mRow.chatRoomId,
|
||||||
|
accountId: mRow.accountId,
|
||||||
|
account: account,
|
||||||
|
nick: mRow.nick,
|
||||||
|
notify: mRow.notify,
|
||||||
|
joinedAt: mRow.joinedAt,
|
||||||
|
breakUntil: mRow.breakUntil,
|
||||||
|
timeoutUntil: mRow.timeoutUntil,
|
||||||
|
status: null,
|
||||||
|
createdAt: mRow.createdAt,
|
||||||
|
updatedAt: mRow.updatedAt,
|
||||||
|
deletedAt: mRow.deletedAt,
|
||||||
|
chatRoom: null,
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
return SnChatRoom(
|
||||||
|
id: row.id,
|
||||||
|
name: row.name,
|
||||||
|
description: row.description,
|
||||||
|
type: row.type,
|
||||||
|
isPublic: row.isPublic!,
|
||||||
|
isCommunity: row.isCommunity!,
|
||||||
|
picture:
|
||||||
|
row.picture != null
|
||||||
|
? SnCloudFile.fromJson(row.picture!)
|
||||||
|
: null,
|
||||||
|
background:
|
||||||
|
row.background != null
|
||||||
|
? SnCloudFile.fromJson(row.background!)
|
||||||
|
: null,
|
||||||
|
realmId: row.realmId,
|
||||||
|
accountId: row.accountId,
|
||||||
|
realm: null,
|
||||||
|
createdAt: row.createdAt,
|
||||||
|
updatedAt: row.updatedAt,
|
||||||
|
deletedAt: row.deletedAt,
|
||||||
|
members: members,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Background sync
|
||||||
|
Future(() async {
|
||||||
|
try {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat');
|
||||||
|
final remoteRooms =
|
||||||
|
resp.data
|
||||||
|
.map((e) => SnChatRoom.fromJson(e))
|
||||||
|
.cast<SnChatRoom>()
|
||||||
|
.toList();
|
||||||
|
await db.saveChatRooms(remoteRooms, override: true);
|
||||||
|
// Update state with fresh data
|
||||||
|
state = AsyncData(await _buildRoomsFromDb(db));
|
||||||
|
} catch (_) {}
|
||||||
|
}).ignore();
|
||||||
|
|
||||||
|
return localRooms;
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
// Fallback to API
|
||||||
|
final client = ref.watch(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat');
|
||||||
|
final rooms =
|
||||||
|
resp.data
|
||||||
|
.map((e) => SnChatRoom.fromJson(e))
|
||||||
|
.cast<SnChatRoom>()
|
||||||
|
.toList();
|
||||||
|
await db.saveChatRooms(rooms, override: true);
|
||||||
|
return rooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<SnChatRoom>> _buildRoomsFromDb(AppDatabase db) async {
|
||||||
|
final localRoomsData = await db.select(db.chatRooms).get();
|
||||||
|
return Future.wait(
|
||||||
|
localRoomsData.map((row) async {
|
||||||
|
final membersRows =
|
||||||
|
await (db.select(db.chatMembers)
|
||||||
|
..where((m) => m.chatRoomId.equals(row.id))).get();
|
||||||
|
final members =
|
||||||
|
membersRows.map((mRow) {
|
||||||
|
final account = SnAccount.fromJson(mRow.account);
|
||||||
|
return SnChatMember(
|
||||||
|
id: mRow.id,
|
||||||
|
chatRoomId: mRow.chatRoomId,
|
||||||
|
accountId: mRow.accountId,
|
||||||
|
account: account,
|
||||||
|
nick: mRow.nick,
|
||||||
|
notify: mRow.notify,
|
||||||
|
joinedAt: mRow.joinedAt,
|
||||||
|
breakUntil: mRow.breakUntil,
|
||||||
|
timeoutUntil: mRow.timeoutUntil,
|
||||||
|
status: null,
|
||||||
|
createdAt: mRow.createdAt,
|
||||||
|
updatedAt: mRow.updatedAt,
|
||||||
|
deletedAt: mRow.deletedAt,
|
||||||
|
chatRoom: null,
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
return SnChatRoom(
|
||||||
|
id: row.id,
|
||||||
|
name: row.name,
|
||||||
|
description: row.description,
|
||||||
|
type: row.type,
|
||||||
|
isPublic: row.isPublic!,
|
||||||
|
isCommunity: row.isCommunity!,
|
||||||
|
picture:
|
||||||
|
row.picture != null ? SnCloudFile.fromJson(row.picture!) : null,
|
||||||
|
background:
|
||||||
|
row.background != null
|
||||||
|
? SnCloudFile.fromJson(row.background!)
|
||||||
|
: null,
|
||||||
|
realmId: row.realmId,
|
||||||
|
accountId: row.accountId,
|
||||||
|
realm: null,
|
||||||
|
createdAt: row.createdAt,
|
||||||
|
updatedAt: row.updatedAt,
|
||||||
|
deletedAt: row.deletedAt,
|
||||||
|
members: members,
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
class ChatRoomNotifier extends _$ChatRoomNotifier {
|
||||||
|
@override
|
||||||
|
Future<SnChatRoom?> build(String? identifier) async {
|
||||||
|
if (identifier == null) return null;
|
||||||
|
final db = ref.watch(databaseProvider);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Try to get from local database first
|
||||||
|
final localRoomData =
|
||||||
|
await (db.select(db.chatRooms)
|
||||||
|
..where((r) => r.id.equals(identifier))).getSingleOrNull();
|
||||||
|
|
||||||
|
if (localRoomData != null) {
|
||||||
|
// Fetch members for this room
|
||||||
|
final membersRows =
|
||||||
|
await (db.select(db.chatMembers)
|
||||||
|
..where((m) => m.chatRoomId.equals(localRoomData.id))).get();
|
||||||
|
final members =
|
||||||
|
membersRows.map((mRow) {
|
||||||
|
final account = SnAccount.fromJson(mRow.account);
|
||||||
|
return SnChatMember(
|
||||||
|
id: mRow.id,
|
||||||
|
chatRoomId: mRow.chatRoomId,
|
||||||
|
accountId: mRow.accountId,
|
||||||
|
account: account,
|
||||||
|
nick: mRow.nick,
|
||||||
|
notify: mRow.notify,
|
||||||
|
joinedAt: mRow.joinedAt,
|
||||||
|
breakUntil: mRow.breakUntil,
|
||||||
|
timeoutUntil: mRow.timeoutUntil,
|
||||||
|
status: null,
|
||||||
|
createdAt: mRow.createdAt,
|
||||||
|
updatedAt: mRow.updatedAt,
|
||||||
|
deletedAt: mRow.deletedAt,
|
||||||
|
chatRoom: null,
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
final localRoom = SnChatRoom(
|
||||||
|
id: localRoomData.id,
|
||||||
|
name: localRoomData.name,
|
||||||
|
description: localRoomData.description,
|
||||||
|
type: localRoomData.type,
|
||||||
|
isPublic: localRoomData.isPublic!,
|
||||||
|
isCommunity: localRoomData.isCommunity!,
|
||||||
|
picture:
|
||||||
|
localRoomData.picture != null
|
||||||
|
? SnCloudFile.fromJson(localRoomData.picture!)
|
||||||
|
: null,
|
||||||
|
background:
|
||||||
|
localRoomData.background != null
|
||||||
|
? SnCloudFile.fromJson(localRoomData.background!)
|
||||||
|
: null,
|
||||||
|
realmId: localRoomData.realmId,
|
||||||
|
accountId: localRoomData.accountId,
|
||||||
|
realm: null,
|
||||||
|
createdAt: localRoomData.createdAt,
|
||||||
|
updatedAt: localRoomData.updatedAt,
|
||||||
|
deletedAt: localRoomData.deletedAt,
|
||||||
|
members: members,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Background sync
|
||||||
|
Future(() async {
|
||||||
|
try {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat/$identifier');
|
||||||
|
final remoteRoom = SnChatRoom.fromJson(resp.data);
|
||||||
|
// Update state with fresh data directly without saving to DB
|
||||||
|
// DB will be updated by ChatRoomJoinedNotifier's full sync
|
||||||
|
state = AsyncData(remoteRoom);
|
||||||
|
} catch (_) {}
|
||||||
|
}).ignore();
|
||||||
|
|
||||||
|
return localRoom;
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
// Fallback to API
|
||||||
|
try {
|
||||||
|
final client = ref.watch(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat/$identifier');
|
||||||
|
final room = SnChatRoom.fromJson(resp.data);
|
||||||
|
await db.saveChatRooms([room]);
|
||||||
|
return room;
|
||||||
|
} catch (err) {
|
||||||
|
if (err is DioException && err.response?.statusCode == 404) {
|
||||||
|
return null; // Chat room not found
|
||||||
|
}
|
||||||
|
rethrow; // Rethrow other errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
class ChatRoomIdentityNotifier extends _$ChatRoomIdentityNotifier {
|
||||||
|
@override
|
||||||
|
Future<SnChatMember?> build(String? identifier) async {
|
||||||
|
if (identifier == null) return null;
|
||||||
|
final db = ref.watch(databaseProvider);
|
||||||
|
final userInfo = ref.watch(userInfoProvider);
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Try to get from local database first
|
||||||
|
if (userInfo.value != null) {
|
||||||
|
final localMemberData =
|
||||||
|
await (db.select(db.chatMembers)
|
||||||
|
..where((m) => m.chatRoomId.equals(identifier))
|
||||||
|
..where((m) => m.accountId.equals(userInfo.value!.id)))
|
||||||
|
.getSingleOrNull();
|
||||||
|
|
||||||
|
if (localMemberData != null) {
|
||||||
|
final account = SnAccount.fromJson(localMemberData.account);
|
||||||
|
final localMember = SnChatMember(
|
||||||
|
id: localMemberData.id,
|
||||||
|
chatRoomId: localMemberData.chatRoomId,
|
||||||
|
accountId: localMemberData.accountId,
|
||||||
|
account: account,
|
||||||
|
nick: localMemberData.nick,
|
||||||
|
notify: localMemberData.notify,
|
||||||
|
joinedAt: localMemberData.joinedAt,
|
||||||
|
breakUntil: localMemberData.breakUntil,
|
||||||
|
timeoutUntil: localMemberData.timeoutUntil,
|
||||||
|
status: null,
|
||||||
|
createdAt: localMemberData.createdAt,
|
||||||
|
updatedAt: localMemberData.updatedAt,
|
||||||
|
deletedAt: localMemberData.deletedAt,
|
||||||
|
chatRoom: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Background sync
|
||||||
|
Future(() async {
|
||||||
|
try {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
final resp = await client.get(
|
||||||
|
'/sphere/chat/$identifier/members/me',
|
||||||
|
);
|
||||||
|
final remoteMember = SnChatMember.fromJson(resp.data);
|
||||||
|
await db.saveMember(remoteMember);
|
||||||
|
// Update state with fresh data
|
||||||
|
if (userInfo.value != null) {
|
||||||
|
state = AsyncData(
|
||||||
|
await _buildMemberFromDb(db, identifier, userInfo.value!.id),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
}).ignore();
|
||||||
|
|
||||||
|
return localMember;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
// Fallback to API
|
||||||
|
try {
|
||||||
|
final client = ref.watch(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat/$identifier/members/me');
|
||||||
|
final member = SnChatMember.fromJson(resp.data);
|
||||||
|
await db.saveMember(member);
|
||||||
|
return member;
|
||||||
|
} catch (err) {
|
||||||
|
if (err is DioException && err.response?.statusCode == 404) {
|
||||||
|
return null; // Chat member not found
|
||||||
|
}
|
||||||
|
rethrow; // Rethrow other errors
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<SnChatMember?> _buildMemberFromDb(
|
||||||
|
AppDatabase db,
|
||||||
|
String identifier,
|
||||||
|
String accountId,
|
||||||
|
) async {
|
||||||
|
final localMemberData =
|
||||||
|
await (db.select(db.chatMembers)
|
||||||
|
..where((m) => m.chatRoomId.equals(identifier))
|
||||||
|
..where((m) => m.accountId.equals(accountId)))
|
||||||
|
.getSingleOrNull();
|
||||||
|
|
||||||
|
if (localMemberData == null) return null;
|
||||||
|
|
||||||
|
final account = SnAccount.fromJson(localMemberData.account);
|
||||||
|
return SnChatMember(
|
||||||
|
id: localMemberData.id,
|
||||||
|
chatRoomId: localMemberData.chatRoomId,
|
||||||
|
accountId: localMemberData.accountId,
|
||||||
|
account: account,
|
||||||
|
nick: localMemberData.nick,
|
||||||
|
notify: localMemberData.notify,
|
||||||
|
joinedAt: localMemberData.joinedAt,
|
||||||
|
breakUntil: localMemberData.breakUntil,
|
||||||
|
timeoutUntil: localMemberData.timeoutUntil,
|
||||||
|
status: null,
|
||||||
|
createdAt: localMemberData.createdAt,
|
||||||
|
updatedAt: localMemberData.updatedAt,
|
||||||
|
deletedAt: localMemberData.deletedAt,
|
||||||
|
chatRoom: null,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@riverpod
|
||||||
|
Future<List<SnChatMember>> chatroomInvites(Ref ref) async {
|
||||||
|
final client = ref.watch(apiClientProvider);
|
||||||
|
final resp = await client.get('/sphere/chat/invites');
|
||||||
|
return resp.data
|
||||||
|
.map((e) => SnChatMember.fromJson(e))
|
||||||
|
.cast<SnChatMember>()
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
282
lib/pods/chat/chat_room.g.dart
Normal file
282
lib/pods/chat/chat_room.g.dart
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'chat_room.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RiverpodGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
|
@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,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$chatRoomJoinedNotifierHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
ChatRoomJoinedNotifier create() => ChatRoomJoinedNotifier();
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$chatRoomJoinedNotifierHash() =>
|
||||||
|
r'c8092225ba0d9c08b2b5bca6f800f1877303b4ff';
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProviderFor(ChatRoomNotifier)
|
||||||
|
const chatRoomProvider = ChatRoomNotifierFamily._();
|
||||||
|
|
||||||
|
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,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
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.argument == argument;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode {
|
||||||
|
return argument.hashCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$chatRoomNotifierHash() => r'1e6391e2ab4eeb114fa001aaa6b06ab2bd646f38';
|
||||||
|
|
||||||
|
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 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 $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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProviderFor(chatroomInvites)
|
||||||
|
const chatroomInvitesProvider = ChatroomInvitesProvider._();
|
||||||
|
|
||||||
|
final class ChatroomInvitesProvider
|
||||||
|
extends
|
||||||
|
$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,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$chatroomInvitesHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
$FutureProviderElement<List<SnChatMember>> $createElement(
|
||||||
|
$ProviderPointer pointer,
|
||||||
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<List<SnChatMember>> create(Ref ref) {
|
||||||
|
return chatroomInvites(ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$chatroomInvitesHash() => r'5cd6391b09c5517ede19bacce43b45c8d71dd087';
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
|
||||||
|
|
||||||
final isSyncingProvider = StateProvider.autoDispose<bool>((ref) => false);
|
|
||||||
|
|
||||||
final flashingMessagesProvider = StateProvider<Set<String>>((ref) => {});
|
|
||||||
@@ -3,23 +3,32 @@ import "dart:convert";
|
|||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_riverpod/flutter_riverpod.dart";
|
import "package:flutter_riverpod/flutter_riverpod.dart";
|
||||||
import "package:island/models/chat.dart";
|
import "package:island/models/chat.dart";
|
||||||
|
import "package:island/pods/chat/chat_room.dart";
|
||||||
import "package:island/pods/lifecycle.dart";
|
import "package:island/pods/lifecycle.dart";
|
||||||
import "package:island/pods/chat/messages_notifier.dart";
|
import "package:island/pods/chat/messages_notifier.dart";
|
||||||
import "package:island/pods/websocket.dart";
|
import "package:island/pods/websocket.dart";
|
||||||
import "package:island/screens/chat/chat.dart";
|
|
||||||
import "package:island/widgets/chat/call_button.dart";
|
import "package:island/widgets/chat/call_button.dart";
|
||||||
import "package:riverpod_annotation/riverpod_annotation.dart";
|
import "package:riverpod_annotation/riverpod_annotation.dart";
|
||||||
|
|
||||||
part 'chat_subscribe.g.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
|
@riverpod
|
||||||
class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
||||||
late final String _roomId;
|
late SnChatRoom _chatRoom;
|
||||||
late final SnChatRoom _chatRoom;
|
late SnChatMember _chatIdentity;
|
||||||
late final SnChatMember _chatIdentity;
|
late MessagesNotifier _messagesNotifier;
|
||||||
late final MessagesNotifier _messagesNotifier;
|
|
||||||
|
|
||||||
final List<SnChatMember> _typingStatuses = [];
|
final List<SnChatMember> _typingStatuses = [];
|
||||||
Timer? _typingCleanupTimer;
|
Timer? _typingCleanupTimer;
|
||||||
@@ -29,11 +38,10 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
List<SnChatMember> build(String roomId) {
|
List<SnChatMember> build(String roomId) {
|
||||||
_roomId = roomId;
|
|
||||||
final ws = ref.watch(websocketProvider);
|
final ws = ref.watch(websocketProvider);
|
||||||
final chatRoomAsync = ref.watch(chatroomProvider(roomId));
|
final chatRoomAsync = ref.watch(chatRoomProvider(roomId));
|
||||||
final chatIdentityAsync = ref.watch(chatroomIdentityProvider(roomId));
|
final chatIdentityAsync = ref.watch(chatRoomIdentityProvider(roomId));
|
||||||
_messagesNotifier = ref.watch(messagesNotifierProvider(roomId).notifier);
|
_messagesNotifier = ref.watch(messagesProvider(roomId).notifier);
|
||||||
|
|
||||||
if (chatRoomAsync.isLoading || chatIdentityAsync.isLoading) {
|
if (chatRoomAsync.isLoading || chatIdentityAsync.isLoading) {
|
||||||
return [];
|
return [];
|
||||||
@@ -59,7 +67,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
);
|
);
|
||||||
|
|
||||||
Future.microtask(
|
Future.microtask(
|
||||||
() => ref.read(currentSubscribedChatIdProvider.notifier).state = roomId,
|
() => ref.read(currentSubscribedChatIdProvider.notifier).set(roomId),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Send initial read receipt
|
// Send initial read receipt
|
||||||
@@ -130,7 +138,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
|
|
||||||
// Cleanup on dispose
|
// Cleanup on dispose
|
||||||
ref.onDispose(() {
|
ref.onDispose(() {
|
||||||
ref.read(currentSubscribedChatIdProvider.notifier).state = null;
|
ref.read(currentSubscribedChatIdProvider.notifier).set(null);
|
||||||
wsState.sendMessage(
|
wsState.sendMessage(
|
||||||
jsonEncode(
|
jsonEncode(
|
||||||
WebSocketPacket(
|
WebSocketPacket(
|
||||||
@@ -199,7 +207,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
jsonEncode(
|
jsonEncode(
|
||||||
WebSocketPacket(
|
WebSocketPacket(
|
||||||
type: 'messages.read',
|
type: 'messages.read',
|
||||||
data: {'chat_room_id': _roomId},
|
data: {'chat_room_id': roomId},
|
||||||
endpoint: 'sphere',
|
endpoint: 'sphere',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -216,7 +224,7 @@ class ChatSubscribeNotifier extends _$ChatSubscribeNotifier {
|
|||||||
jsonEncode(
|
jsonEncode(
|
||||||
WebSocketPacket(
|
WebSocketPacket(
|
||||||
type: 'messages.typing',
|
type: 'messages.typing',
|
||||||
data: {'chat_room_id': _roomId},
|
data: {'chat_room_id': roomId},
|
||||||
endpoint: 'sphere',
|
endpoint: 'sphere',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -6,171 +6,104 @@ part of 'chat_subscribe.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$chatSubscribeNotifierHash() =>
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
r'c605e0c9c45df64e5ba7b65f8de9b47bde8e2b3b';
|
// 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)
|
@ProviderFor(ChatSubscribeNotifier)
|
||||||
const chatSubscribeNotifierProvider = ChatSubscribeNotifierFamily();
|
const chatSubscribeProvider = ChatSubscribeNotifierFamily._();
|
||||||
|
|
||||||
/// See also [ChatSubscribeNotifier].
|
final class ChatSubscribeNotifierProvider
|
||||||
class ChatSubscribeNotifierFamily extends Family<List<SnChatMember>> {
|
extends $NotifierProvider<ChatSubscribeNotifier, List<SnChatMember>> {
|
||||||
/// See also [ChatSubscribeNotifier].
|
const ChatSubscribeNotifierProvider._({
|
||||||
const ChatSubscribeNotifierFamily();
|
required ChatSubscribeNotifierFamily super.from,
|
||||||
|
required String super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'chatSubscribeProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [ChatSubscribeNotifier].
|
@override
|
||||||
ChatSubscribeNotifierProvider call(String roomId) {
|
String debugGetCreateSourceHash() => _$chatSubscribeNotifierHash();
|
||||||
return ChatSubscribeNotifierProvider(roomId);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'chatSubscribeProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
ChatSubscribeNotifierProvider getProviderOverride(
|
ChatSubscribeNotifier create() => ChatSubscribeNotifier();
|
||||||
covariant ChatSubscribeNotifierProvider provider,
|
|
||||||
) {
|
|
||||||
return call(provider.roomId);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
/// {@macro riverpod.override_with_value}
|
||||||
|
Override overrideWithValue(List<SnChatMember> value) {
|
||||||
@override
|
return $ProviderOverride(
|
||||||
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,
|
origin: this,
|
||||||
override: ChatSubscribeNotifierProvider._internal(
|
providerOverride: $SyncValueProvider<List<SnChatMember>>(value),
|
||||||
() => create()..roomId = roomId,
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
roomId: roomId,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeNotifierProviderElement<ChatSubscribeNotifier, List<SnChatMember>>
|
|
||||||
createElement() {
|
|
||||||
return _ChatSubscribeNotifierProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is ChatSubscribeNotifierProvider && other.roomId == roomId;
|
return other is ChatSubscribeNotifierProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, roomId.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$chatSubscribeNotifierHash() =>
|
||||||
// ignore: unused_element
|
r'2b9fae96eb1f96a514a074985e5efa1c13d10aa4';
|
||||||
mixin ChatSubscribeNotifierRef
|
|
||||||
on AutoDisposeNotifierProviderRef<List<SnChatMember>> {
|
|
||||||
/// The parameter `roomId` of this provider.
|
|
||||||
String get roomId;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ChatSubscribeNotifierProviderElement
|
final class ChatSubscribeNotifierFamily extends $Family
|
||||||
extends
|
with
|
||||||
AutoDisposeNotifierProviderElement<
|
$ClassFamilyOverride<
|
||||||
ChatSubscribeNotifier,
|
ChatSubscribeNotifier,
|
||||||
List<SnChatMember>
|
List<SnChatMember>,
|
||||||
>
|
List<SnChatMember>,
|
||||||
with ChatSubscribeNotifierRef {
|
List<SnChatMember>,
|
||||||
_ChatSubscribeNotifierProviderElement(super.provider);
|
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
|
@override
|
||||||
String get roomId => (origin as ChatSubscribeNotifierProvider).roomId;
|
String toString() => r'chatSubscribeProvider';
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore_for_file: type=lint
|
abstract class _$ChatSubscribeNotifier extends $Notifier<List<SnChatMember>> {
|
||||||
// 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
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class ChatUnreadCountNotifier extends _$ChatUnreadCountNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
@Riverpod(keepAlive: true)
|
||||||
class ChatSummary extends _$ChatSummary {
|
class ChatSummary extends _$ChatSummary {
|
||||||
@override
|
@override
|
||||||
Future<Map<String, SnChatSummary>> build() async {
|
Future<Map<String, SnChatSummary>> build() async {
|
||||||
@@ -99,7 +99,7 @@ class ChatSummary extends _$ChatSummary {
|
|||||||
final unreadToDecrement = summary.unreadCount;
|
final unreadToDecrement = summary.unreadCount;
|
||||||
if (unreadToDecrement > 0) {
|
if (unreadToDecrement > 0) {
|
||||||
ref
|
ref
|
||||||
.read(chatUnreadCountNotifierProvider.notifier)
|
.read(chatUnreadCountProvider.notifier)
|
||||||
.decrement(unreadToDecrement);
|
.decrement(unreadToDecrement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,40 +6,105 @@ part of 'chat_summary.dart';
|
|||||||
// RiverpodGenerator
|
// 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() =>
|
String _$chatUnreadCountNotifierHash() =>
|
||||||
r'b8d93589dc37f772d4c3a07d9afd81c37026e57d';
|
r'b8d93589dc37f772d4c3a07d9afd81c37026e57d';
|
||||||
|
|
||||||
/// See also [ChatUnreadCountNotifier].
|
abstract class _$ChatUnreadCountNotifier extends $AsyncNotifier<int> {
|
||||||
@ProviderFor(ChatUnreadCountNotifier)
|
FutureOr<int> build();
|
||||||
final chatUnreadCountNotifierProvider =
|
@$mustCallSuper
|
||||||
AutoDisposeAsyncNotifierProvider<ChatUnreadCountNotifier, int>.internal(
|
@override
|
||||||
ChatUnreadCountNotifier.new,
|
void runBuild() {
|
||||||
name: r'chatUnreadCountNotifierProvider',
|
final created = build();
|
||||||
debugGetCreateSourceHash:
|
final ref = this.ref as $Ref<AsyncValue<int>, int>;
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
final element =
|
||||||
? null
|
ref.element
|
||||||
: _$chatUnreadCountNotifierHash,
|
as $ClassProviderElement<
|
||||||
dependencies: null,
|
AnyNotifier<AsyncValue<int>, int>,
|
||||||
allTransitiveDependencies: null,
|
AsyncValue<int>,
|
||||||
);
|
Object?,
|
||||||
|
Object?
|
||||||
|
>;
|
||||||
|
element.handleValue(ref, created);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
typedef _$ChatUnreadCountNotifier = AutoDisposeAsyncNotifier<int>;
|
|
||||||
String _$chatSummaryHash() => r'8479ef53cfb0b698b800d0117d04774b6f78b3cc';
|
|
||||||
|
|
||||||
/// See also [ChatSummary].
|
|
||||||
@ProviderFor(ChatSummary)
|
@ProviderFor(ChatSummary)
|
||||||
final chatSummaryProvider = AutoDisposeAsyncNotifierProvider<
|
const chatSummaryProvider = ChatSummaryProvider._();
|
||||||
ChatSummary,
|
|
||||||
Map<String, SnChatSummary>
|
|
||||||
>.internal(
|
|
||||||
ChatSummary.new,
|
|
||||||
name: r'chatSummaryProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product') ? null : _$chatSummaryHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$ChatSummary = AutoDisposeAsyncNotifier<Map<String, SnChatSummary>>;
|
final class ChatSummaryProvider
|
||||||
// ignore_for_file: type=lint
|
extends $AsyncNotifierProvider<ChatSummary, Map<String, SnChatSummary>> {
|
||||||
// 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
|
const ChatSummaryProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'chatSummaryProvider',
|
||||||
|
isAutoDispose: false,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import "package:island/models/chat.dart";
|
|||||||
import "package:island/models/file.dart";
|
import "package:island/models/file.dart";
|
||||||
import "package:island/models/poll.dart";
|
import "package:island/models/poll.dart";
|
||||||
import "package:island/models/wallet.dart";
|
import "package:island/models/wallet.dart";
|
||||||
|
import "package:island/pods/chat/chat_room.dart";
|
||||||
import "package:island/pods/database.dart";
|
import "package:island/pods/database.dart";
|
||||||
import "package:island/pods/lifecycle.dart";
|
import "package:island/pods/lifecycle.dart";
|
||||||
import "package:island/pods/network.dart";
|
import "package:island/pods/network.dart";
|
||||||
@@ -19,18 +20,16 @@ import "package:island/talker.dart";
|
|||||||
import "package:island/widgets/alert.dart";
|
import "package:island/widgets/alert.dart";
|
||||||
import "package:riverpod_annotation/riverpod_annotation.dart";
|
import "package:riverpod_annotation/riverpod_annotation.dart";
|
||||||
import "package:uuid/uuid.dart";
|
import "package:uuid/uuid.dart";
|
||||||
import "package:island/screens/chat/chat.dart";
|
|
||||||
import "package:island/pods/chat/chat_rooms.dart";
|
|
||||||
import "package:island/screens/account/profile.dart";
|
import "package:island/screens/account/profile.dart";
|
||||||
|
|
||||||
part 'messages_notifier.g.dart';
|
part 'messages_notifier.g.dart';
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
class MessagesNotifier extends _$MessagesNotifier {
|
class MessagesNotifier extends _$MessagesNotifier {
|
||||||
late final Dio _apiClient;
|
late Dio _apiClient;
|
||||||
late final AppDatabase _database;
|
late AppDatabase _database;
|
||||||
late final SnChatRoom _room;
|
late SnChatRoom _room;
|
||||||
late final SnChatMember _identity;
|
late SnChatMember _identity;
|
||||||
|
|
||||||
final Map<String, LocalChatMessage> _pendingMessages = {};
|
final Map<String, LocalChatMessage> _pendingMessages = {};
|
||||||
final Map<String, Map<int, double?>> _fileUploadProgress = {};
|
final Map<String, Map<int, double?>> _fileUploadProgress = {};
|
||||||
@@ -39,7 +38,6 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
bool? _withLinks;
|
bool? _withLinks;
|
||||||
bool? _withAttachments;
|
bool? _withAttachments;
|
||||||
|
|
||||||
late final String _roomId;
|
|
||||||
static const int _pageSize = 20;
|
static const int _pageSize = 20;
|
||||||
bool _hasMore = true;
|
bool _hasMore = true;
|
||||||
bool _isSyncing = false;
|
bool _isSyncing = false;
|
||||||
@@ -48,15 +46,14 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
bool _allRemoteMessagesFetched = false;
|
bool _allRemoteMessagesFetched = false;
|
||||||
DateTime? _lastPauseTime;
|
DateTime? _lastPauseTime;
|
||||||
|
|
||||||
late final Future<SnAccount?> Function(String) _fetchAccount;
|
late Future<SnAccount?> Function(String) _fetchAccount;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<List<LocalChatMessage>> build(String roomId) async {
|
FutureOr<List<LocalChatMessage>> build(String roomId) async {
|
||||||
_roomId = roomId;
|
|
||||||
_apiClient = ref.watch(apiClientProvider);
|
_apiClient = ref.watch(apiClientProvider);
|
||||||
_database = ref.watch(databaseProvider);
|
_database = ref.watch(databaseProvider);
|
||||||
final room = await ref.watch(chatroomProvider(roomId).future);
|
final room = await ref.watch(chatRoomProvider(roomId).future);
|
||||||
final identity = await ref.watch(chatroomIdentityProvider(roomId).future);
|
final identity = await ref.watch(chatRoomIdentityProvider(roomId).future);
|
||||||
|
|
||||||
// Initialize fetch account method for corrupted data recovery
|
// Initialize fetch account method for corrupted data recovery
|
||||||
_fetchAccount = (String accountId) async {
|
_fetchAccount = (String accountId) async {
|
||||||
@@ -144,14 +141,14 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
if (searchQuery != null && searchQuery.isNotEmpty) {
|
if (searchQuery != null && searchQuery.isNotEmpty) {
|
||||||
dbMessages = await _database.searchMessages(
|
dbMessages = await _database.searchMessages(
|
||||||
_roomId,
|
roomId,
|
||||||
searchQuery,
|
searchQuery,
|
||||||
withAttachments: withAttachments,
|
withAttachments: withAttachments,
|
||||||
fetchAccount: _fetchAccount,
|
fetchAccount: _fetchAccount,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final chatMessagesFromDb = await _database.getMessagesForRoom(
|
final chatMessagesFromDb = await _database.getMessagesForRoom(
|
||||||
_roomId,
|
roomId,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
limit: take,
|
limit: take,
|
||||||
);
|
);
|
||||||
@@ -194,9 +191,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
if (offset == 0) {
|
if (offset == 0) {
|
||||||
final pendingForRoom =
|
final pendingForRoom =
|
||||||
_pendingMessages.values
|
_pendingMessages.values.where((msg) => msg.roomId == roomId).toList();
|
||||||
.where((msg) => msg.roomId == _roomId)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
final allMessages = [...pendingForRoom, ...uniqueMessages];
|
final allMessages = [...pendingForRoom, ...uniqueMessages];
|
||||||
_sortMessages(allMessages); // Use the helper function
|
_sortMessages(allMessages); // Use the helper function
|
||||||
@@ -221,7 +216,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}) async {
|
}) async {
|
||||||
talker.log('Getting all messages for jump from offset $offset, take $take');
|
talker.log('Getting all messages for jump from offset $offset, take $take');
|
||||||
final chatMessagesFromDb = await _database.getMessagesForRoom(
|
final chatMessagesFromDb = await _database.getMessagesForRoom(
|
||||||
_roomId,
|
roomId,
|
||||||
offset: offset,
|
offset: offset,
|
||||||
limit: take,
|
limit: take,
|
||||||
);
|
);
|
||||||
@@ -245,9 +240,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
if (offset == 0) {
|
if (offset == 0) {
|
||||||
final pendingForRoom =
|
final pendingForRoom =
|
||||||
_pendingMessages.values
|
_pendingMessages.values.where((msg) => msg.roomId == roomId).toList();
|
||||||
.where((msg) => msg.roomId == _roomId)
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
final allMessages = [...pendingForRoom, ...uniqueMessages];
|
final allMessages = [...pendingForRoom, ...uniqueMessages];
|
||||||
_sortMessages(allMessages);
|
_sortMessages(allMessages);
|
||||||
@@ -272,7 +265,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
talker.log('Fetching messages from API, offset $offset, take $take');
|
talker.log('Fetching messages from API, offset $offset, take $take');
|
||||||
if (_totalCount == null) {
|
if (_totalCount == null) {
|
||||||
final response = await _apiClient.get(
|
final response = await _apiClient.get(
|
||||||
'/sphere/chat/$_roomId/messages',
|
'/sphere/chat/$roomId/messages',
|
||||||
queryParameters: {'offset': 0, 'take': 1},
|
queryParameters: {'offset': 0, 'take': 1},
|
||||||
);
|
);
|
||||||
_totalCount = int.parse(response.headers['x-total']?.firstOrNull ?? '0');
|
_totalCount = int.parse(response.headers['x-total']?.firstOrNull ?? '0');
|
||||||
@@ -284,7 +277,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final response = await _apiClient.get(
|
final response = await _apiClient.get(
|
||||||
'/sphere/chat/$_roomId/messages',
|
'/sphere/chat/$roomId/messages',
|
||||||
queryParameters: {'offset': offset, 'take': take},
|
queryParameters: {'offset': offset, 'take': take},
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -326,7 +319,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
_allRemoteMessagesFetched = false;
|
_allRemoteMessagesFetched = false;
|
||||||
|
|
||||||
talker.log('Starting message sync');
|
talker.log('Starting message sync');
|
||||||
Future.microtask(() => ref.read(isSyncingProvider.notifier).state = true);
|
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
|
||||||
try {
|
try {
|
||||||
final dbMessages = await _database.getMessagesForRoom(
|
final dbMessages = await _database.getMessagesForRoom(
|
||||||
_room.id,
|
_room.id,
|
||||||
@@ -402,9 +395,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
showErrorAlert(err);
|
showErrorAlert(err);
|
||||||
} finally {
|
} finally {
|
||||||
talker.log('Finished message sync');
|
talker.log('Finished message sync');
|
||||||
Future.microtask(
|
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(false));
|
||||||
() => ref.read(isSyncingProvider.notifier).state = false,
|
|
||||||
);
|
|
||||||
_isSyncing = false;
|
_isSyncing = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -501,7 +492,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
if (!_hasMore || state is AsyncLoading) return;
|
if (!_hasMore || state is AsyncLoading) return;
|
||||||
talker.log('Loading more messages');
|
talker.log('Loading more messages');
|
||||||
|
|
||||||
Future.microtask(() => ref.read(isSyncingProvider.notifier).state = true);
|
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(true));
|
||||||
try {
|
try {
|
||||||
final currentMessages = state.value ?? [];
|
final currentMessages = state.value ?? [];
|
||||||
final offset = currentMessages.length;
|
final offset = currentMessages.length;
|
||||||
@@ -524,9 +515,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
);
|
);
|
||||||
showErrorAlert(err);
|
showErrorAlert(err);
|
||||||
} finally {
|
} finally {
|
||||||
Future.microtask(
|
Future.microtask(() => ref.read(chatSyncingProvider.notifier).set(false));
|
||||||
() => ref.read(isSyncingProvider.notifier).state = false,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,7 +535,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
final mockMessage = SnChatMessage(
|
final mockMessage = SnChatMessage(
|
||||||
id: 'pending_$nonce',
|
id: 'pending_$nonce',
|
||||||
chatRoomId: _roomId,
|
chatRoomId: roomId,
|
||||||
senderId: _identity.id,
|
senderId: _identity.id,
|
||||||
content: content,
|
content: content,
|
||||||
createdAt: DateTime.now(),
|
createdAt: DateTime.now(),
|
||||||
@@ -590,8 +579,8 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
|
|
||||||
final response = await _apiClient.request(
|
final response = await _apiClient.request(
|
||||||
editingTo == null
|
editingTo == null
|
||||||
? '/sphere/chat/$_roomId/messages'
|
? '/sphere/chat/$roomId/messages'
|
||||||
: '/sphere/chat/$_roomId/messages/${editingTo.id}',
|
: '/sphere/chat/$roomId/messages/${editingTo.id}',
|
||||||
data: {
|
data: {
|
||||||
'content': content,
|
'content': content,
|
||||||
'attachments_id': cloudAttachments.map((e) => e.id).toList(),
|
'attachments_id': cloudAttachments.map((e) => e.id).toList(),
|
||||||
@@ -731,7 +720,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> receiveMessage(SnChatMessage remoteMessage) async {
|
Future<void> receiveMessage(SnChatMessage remoteMessage) async {
|
||||||
if (remoteMessage.chatRoomId != _roomId) return;
|
if (remoteMessage.chatRoomId != roomId) return;
|
||||||
|
|
||||||
// Block message receiving during jumps to prevent list resets
|
// Block message receiving during jumps to prevent list resets
|
||||||
if (_isJumping) {
|
if (_isJumping) {
|
||||||
@@ -783,7 +772,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> receiveMessageUpdate(SnChatMessage remoteMessage) async {
|
Future<void> receiveMessageUpdate(SnChatMessage remoteMessage) async {
|
||||||
if (remoteMessage.chatRoomId != _roomId) return;
|
if (remoteMessage.chatRoomId != roomId) return;
|
||||||
|
|
||||||
// Block message updates during jumps to prevent list resets
|
// Block message updates during jumps to prevent list resets
|
||||||
if (_isJumping) {
|
if (_isJumping) {
|
||||||
@@ -883,7 +872,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await _apiClient.delete('/sphere/chat/$_roomId/messages/$messageId');
|
await _apiClient.delete('/sphere/chat/$roomId/messages/$messageId');
|
||||||
await receiveMessageDeletion(messageId);
|
await receiveMessageDeletion(messageId);
|
||||||
} catch (err, stackTrace) {
|
} catch (err, stackTrace) {
|
||||||
talker.log(
|
talker.log(
|
||||||
@@ -991,7 +980,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final response = await _apiClient.get(
|
final response = await _apiClient.get(
|
||||||
'/sphere/chat/$_roomId/messages/$messageId',
|
'/sphere/chat/$roomId/messages/$messageId',
|
||||||
);
|
);
|
||||||
final remoteMessage = SnChatMessage.fromJson(response.data);
|
final remoteMessage = SnChatMessage.fromJson(response.data);
|
||||||
final message = LocalChatMessage.fromRemoteMessage(
|
final message = LocalChatMessage.fromRemoteMessage(
|
||||||
@@ -1048,7 +1037,7 @@ class MessagesNotifier extends _$MessagesNotifier {
|
|||||||
final query = _database.customSelect(
|
final query = _database.customSelect(
|
||||||
'SELECT COUNT(*) as count FROM chat_messages WHERE room_id = ? AND created_at > ?',
|
'SELECT COUNT(*) as count FROM chat_messages WHERE room_id = ? AND created_at > ?',
|
||||||
variables: [
|
variables: [
|
||||||
Variable.withString(_roomId),
|
Variable.withString(roomId),
|
||||||
Variable.withDateTime(message.createdAt),
|
Variable.withDateTime(message.createdAt),
|
||||||
],
|
],
|
||||||
readsFrom: {_database.chatMessages},
|
readsFrom: {_database.chatMessages},
|
||||||
|
|||||||
@@ -6,174 +6,101 @@ part of 'messages_notifier.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$messagesNotifierHash() => r'27ce32c54e317a04e1d554ed4a70a24e4503fdd1';
|
// 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)
|
@ProviderFor(MessagesNotifier)
|
||||||
const messagesNotifierProvider = MessagesNotifierFamily();
|
const messagesProvider = MessagesNotifierFamily._();
|
||||||
|
|
||||||
/// See also [MessagesNotifier].
|
final class MessagesNotifierProvider
|
||||||
class MessagesNotifierFamily
|
extends $AsyncNotifierProvider<MessagesNotifier, List<LocalChatMessage>> {
|
||||||
extends Family<AsyncValue<List<LocalChatMessage>>> {
|
const MessagesNotifierProvider._({
|
||||||
/// See also [MessagesNotifier].
|
required MessagesNotifierFamily super.from,
|
||||||
const MessagesNotifierFamily();
|
required String super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'messagesProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [MessagesNotifier].
|
@override
|
||||||
MessagesNotifierProvider call(String roomId) {
|
String debugGetCreateSourceHash() => _$messagesNotifierHash();
|
||||||
return MessagesNotifierProvider(roomId);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'messagesProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
MessagesNotifierProvider getProviderOverride(
|
MessagesNotifier create() => MessagesNotifier();
|
||||||
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,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
roomId: roomId,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeAsyncNotifierProviderElement<
|
|
||||||
MessagesNotifier,
|
|
||||||
List<LocalChatMessage>
|
|
||||||
>
|
|
||||||
createElement() {
|
|
||||||
return _MessagesNotifierProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is MessagesNotifierProvider && other.roomId == roomId;
|
return other is MessagesNotifierProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, roomId.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$messagesNotifierHash() => r'2f3f19cb99357184e82d66e74a31863fcfc48856';
|
||||||
// ignore: unused_element
|
|
||||||
mixin MessagesNotifierRef
|
|
||||||
on AutoDisposeAsyncNotifierProviderRef<List<LocalChatMessage>> {
|
|
||||||
/// The parameter `roomId` of this provider.
|
|
||||||
String get roomId;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MessagesNotifierProviderElement
|
final class MessagesNotifierFamily extends $Family
|
||||||
extends
|
with
|
||||||
AutoDisposeAsyncNotifierProviderElement<
|
$ClassFamilyOverride<
|
||||||
MessagesNotifier,
|
MessagesNotifier,
|
||||||
List<LocalChatMessage>
|
AsyncValue<List<LocalChatMessage>>,
|
||||||
>
|
List<LocalChatMessage>,
|
||||||
with MessagesNotifierRef {
|
FutureOr<List<LocalChatMessage>>,
|
||||||
_MessagesNotifierProviderElement(super.provider);
|
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
|
@override
|
||||||
String get roomId => (origin as MessagesNotifierProvider).roomId;
|
String toString() => r'messagesProvider';
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore_for_file: type=lint
|
abstract class _$MessagesNotifier
|
||||||
// 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
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -294,12 +294,15 @@ class AppSettingsNotifier extends _$AppSettingsNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final updateInfoProvider =
|
final updateInfoProvider =
|
||||||
StateNotifierProvider<UpdateInfoNotifier, (String?, String?)>((ref) {
|
NotifierProvider<UpdateInfoNotifier, (String?, String?)>(
|
||||||
return UpdateInfoNotifier();
|
UpdateInfoNotifier.new,
|
||||||
});
|
);
|
||||||
|
|
||||||
class UpdateInfoNotifier extends StateNotifier<(String?, String?)> {
|
class UpdateInfoNotifier extends Notifier<(String?, String?)> {
|
||||||
UpdateInfoNotifier() : super((null, null));
|
@override
|
||||||
|
(String?, String?) build() {
|
||||||
|
return (null, null);
|
||||||
|
}
|
||||||
|
|
||||||
void setUpdate(String newVersion, String newChangelog) {
|
void setUpdate(String newVersion, String newChangelog) {
|
||||||
state = (newVersion, newChangelog);
|
state = (newVersion, newChangelog);
|
||||||
|
|||||||
@@ -29,23 +29,59 @@ Map<String, dynamic> _$ThemeColorsToJson(_ThemeColors instance) =>
|
|||||||
// RiverpodGenerator
|
// 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() =>
|
String _$appSettingsNotifierHash() =>
|
||||||
r'22b695f2023e3251db3296858acd701f7211d757';
|
r'22b695f2023e3251db3296858acd701f7211d757';
|
||||||
|
|
||||||
/// See also [AppSettingsNotifier].
|
abstract class _$AppSettingsNotifier extends $Notifier<AppSettings> {
|
||||||
@ProviderFor(AppSettingsNotifier)
|
AppSettings build();
|
||||||
final appSettingsNotifierProvider =
|
@$mustCallSuper
|
||||||
AutoDisposeNotifierProvider<AppSettingsNotifier, AppSettings>.internal(
|
@override
|
||||||
AppSettingsNotifier.new,
|
void runBuild() {
|
||||||
name: r'appSettingsNotifierProvider',
|
final created = build();
|
||||||
debugGetCreateSourceHash:
|
final ref = this.ref as $Ref<AppSettings, AppSettings>;
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
final element =
|
||||||
? null
|
ref.element
|
||||||
: _$appSettingsNotifierHash,
|
as $ClassProviderElement<
|
||||||
dependencies: null,
|
AnyNotifier<AppSettings, AppSettings>,
|
||||||
allTransitiveDependencies: null,
|
AppSettings,
|
||||||
);
|
Object?,
|
||||||
|
Object?
|
||||||
typedef _$AppSettingsNotifier = AutoDisposeNotifier<AppSettings>;
|
>;
|
||||||
// ignore_for_file: type=lint
|
element.handleValue(ref, created);
|
||||||
// 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
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,14 +2,24 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|||||||
import 'package:island/models/file.dart';
|
import 'package:island/models/file.dart';
|
||||||
import 'package:island/models/file_list_item.dart';
|
import 'package:island/models/file_list_item.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
|
|
||||||
|
|
||||||
part 'file_list.g.dart';
|
part 'file_list.g.dart';
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
class CloudFileListNotifier extends _$CloudFileListNotifier
|
Future<Map<String, dynamic>?> billingUsage(Ref ref) async {
|
||||||
with CursorPagingNotifierMixin<FileListItem> {
|
final client = ref.read(apiClientProvider);
|
||||||
|
final response = await client.get('/drive/billing/usage');
|
||||||
|
return response.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
final indexedCloudFileListProvider = AsyncNotifierProvider.autoDispose(
|
||||||
|
IndexedCloudFileListNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
|
class IndexedCloudFileListNotifier extends AsyncNotifier<List<FileListItem>>
|
||||||
|
with AsyncPaginationController<FileListItem> {
|
||||||
String _currentPath = '/';
|
String _currentPath = '/';
|
||||||
String? _poolId;
|
String? _poolId;
|
||||||
String? _query;
|
String? _query;
|
||||||
@@ -42,12 +52,7 @@ class CloudFileListNotifier extends _$CloudFileListNotifier
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<CursorPagingData<FileListItem>> build() => fetch(cursor: null);
|
Future<List<FileListItem>> fetch() async {
|
||||||
|
|
||||||
@override
|
|
||||||
Future<CursorPagingData<FileListItem>> fetch({
|
|
||||||
required String? cursor,
|
|
||||||
}) async {
|
|
||||||
final client = ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
final queryParameters = <String, String>{'path': _currentPath};
|
final queryParameters = <String, String>{'path': _currentPath};
|
||||||
@@ -71,33 +76,28 @@ class CloudFileListNotifier extends _$CloudFileListNotifier
|
|||||||
queryParameters: queryParameters,
|
queryParameters: queryParameters,
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<String> folders =
|
final List<String> folders = (response.data['folders'] as List)
|
||||||
(response.data['folders'] as List).map((e) => e as String).toList();
|
.map((e) => e as String)
|
||||||
final List<SnCloudFileIndex> files =
|
.toList();
|
||||||
(response.data['files'] as List)
|
final List<SnCloudFileIndex> files = (response.data['files'] as List)
|
||||||
.map((e) => SnCloudFileIndex.fromJson(e as Map<String, dynamic>))
|
.map((e) => SnCloudFileIndex.fromJson(e as Map<String, dynamic>))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final List<FileListItem> items = [
|
final List<FileListItem> items = [
|
||||||
...folders.map((folderName) => FileListItem.folder(folderName)),
|
...folders.map((folderName) => FileListItem.folder(folderName)),
|
||||||
...files.map((file) => FileListItem.file(file)),
|
...files.map((file) => FileListItem.file(file)),
|
||||||
];
|
];
|
||||||
|
|
||||||
// The new API returns all files in the path, no pagination
|
return items;
|
||||||
return CursorPagingData(items: items, hasMore: false, nextCursor: null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
final unindexedFileListProvider = AsyncNotifierProvider.autoDispose(
|
||||||
Future<Map<String, dynamic>?> billingUsage(Ref ref) async {
|
UnindexedFileListNotifier.new,
|
||||||
final client = ref.read(apiClientProvider);
|
);
|
||||||
final response = await client.get('/drive/billing/usage');
|
|
||||||
return response.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@riverpod
|
class UnindexedFileListNotifier extends AsyncNotifier<List<FileListItem>>
|
||||||
class UnindexedFileListNotifier extends _$UnindexedFileListNotifier
|
with AsyncPaginationController<FileListItem> {
|
||||||
with CursorPagingNotifierMixin<FileListItem> {
|
|
||||||
String? _poolId;
|
String? _poolId;
|
||||||
bool _recycled = false;
|
bool _recycled = false;
|
||||||
String? _query;
|
String? _query;
|
||||||
@@ -129,21 +129,15 @@ class UnindexedFileListNotifier extends _$UnindexedFileListNotifier
|
|||||||
ref.invalidateSelf();
|
ref.invalidateSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
static const int pageSize = 20;
|
||||||
Future<CursorPagingData<FileListItem>> build() => fetch(cursor: null);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<CursorPagingData<FileListItem>> fetch({
|
Future<List<FileListItem>> fetch() async {
|
||||||
required String? cursor,
|
|
||||||
}) async {
|
|
||||||
final client = ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
final offset = cursor != null ? int.tryParse(cursor) ?? 0 : 0;
|
|
||||||
const take = 50; // Default page size
|
|
||||||
|
|
||||||
final queryParameters = <String, String>{
|
final queryParameters = <String, String>{
|
||||||
'take': take.toString(),
|
'take': pageSize.toString(),
|
||||||
'offset': offset.toString(),
|
'offset': fetchedCount.toString(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (_poolId != null) {
|
if (_poolId != null) {
|
||||||
@@ -169,24 +163,17 @@ class UnindexedFileListNotifier extends _$UnindexedFileListNotifier
|
|||||||
queryParameters: queryParameters,
|
queryParameters: queryParameters,
|
||||||
);
|
);
|
||||||
|
|
||||||
final total = int.tryParse(response.headers.value('x-total') ?? '0') ?? 0;
|
totalCount = int.tryParse(response.headers.value('x-total') ?? '0') ?? 0;
|
||||||
|
|
||||||
final List<SnCloudFile> files =
|
final List<SnCloudFile> files = (response.data as List)
|
||||||
(response.data as List)
|
.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnCloudFile.fromJson(e as Map<String, dynamic>))
|
.toList();
|
||||||
.toList();
|
|
||||||
|
|
||||||
final List<FileListItem> items =
|
final List<FileListItem> items = files
|
||||||
files.map((file) => FileListItem.unindexedFile(file)).toList();
|
.map((file) => FileListItem.unindexedFile(file))
|
||||||
|
.toList();
|
||||||
|
|
||||||
final hasMore = offset + take < total;
|
return items;
|
||||||
final nextCursor = hasMore ? (offset + take).toString() : null;
|
|
||||||
|
|
||||||
return CursorPagingData(
|
|
||||||
items: items,
|
|
||||||
hasMore: hasMore,
|
|
||||||
nextCursor: nextCursor,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
92
lib/pods/drive/file_list.g.dart
Normal file
92
lib/pods/drive/file_list.g.dart
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
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';
|
||||||
|
|
||||||
|
@ProviderFor(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',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@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';
|
||||||
@@ -13,7 +13,7 @@ final poolsProvider = FutureProvider<List<SnFilePool>>((ref) async {
|
|||||||
});
|
});
|
||||||
|
|
||||||
String? resolveDefaultPoolId(WidgetRef ref, List<SnFilePool> pools) {
|
String? resolveDefaultPoolId(WidgetRef ref, List<SnFilePool> pools) {
|
||||||
final settings = ref.watch(appSettingsNotifierProvider);
|
final settings = ref.watch(appSettingsProvider);
|
||||||
|
|
||||||
final configuredId = settings.defaultPoolId;
|
final configuredId = settings.defaultPoolId;
|
||||||
if (configuredId != null && pools.any((p) => p.id == configuredId)) {
|
if (configuredId != null && pools.any((p) => p.id == configuredId)) {
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:island/models/reference.dart';
|
import 'package:island/models/reference.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
85
lib/pods/drive/file_references.g.dart
Normal file
85
lib/pods/drive/file_references.g.dart
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'file_references.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// RiverpodGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
|
@ProviderFor(fileReferences)
|
||||||
|
const fileReferencesProvider = FileReferencesFamily._();
|
||||||
|
|
||||||
|
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',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$fileReferencesHash();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'fileReferencesProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
$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.argument == argument;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode {
|
||||||
|
return argument.hashCode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$fileReferencesHash() => r'd66c678c221f61978bdb242b98e6dbe31d0c204b';
|
||||||
|
|
||||||
|
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 toString() => r'fileReferencesProvider';
|
||||||
|
}
|
||||||
@@ -9,18 +9,16 @@ import 'package:island/pods/websocket.dart';
|
|||||||
import 'package:island/services/file_uploader.dart';
|
import 'package:island/services/file_uploader.dart';
|
||||||
import 'package:island/talker.dart';
|
import 'package:island/talker.dart';
|
||||||
|
|
||||||
final uploadTasksProvider =
|
final uploadTasksProvider = NotifierProvider(UploadTasksNotifier.new);
|
||||||
StateNotifierProvider<UploadTasksNotifier, List<DriveTask>>(
|
|
||||||
(ref) => UploadTasksNotifier(ref),
|
|
||||||
);
|
|
||||||
|
|
||||||
class UploadTasksNotifier extends StateNotifier<List<DriveTask>> {
|
class UploadTasksNotifier extends Notifier<List<DriveTask>> {
|
||||||
final Ref ref;
|
|
||||||
StreamSubscription? _websocketSubscription;
|
StreamSubscription? _websocketSubscription;
|
||||||
final Map<String, Map<String, dynamic>> _pendingUploads = {};
|
final Map<String, Map<String, dynamic>> _pendingUploads = {};
|
||||||
|
|
||||||
UploadTasksNotifier(this.ref) : super([]) {
|
@override
|
||||||
|
List<DriveTask> build() {
|
||||||
_listenToWebSocket();
|
_listenToWebSocket();
|
||||||
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
void _listenToWebSocket() {
|
void _listenToWebSocket() {
|
||||||
@@ -334,10 +332,8 @@ class UploadTasksNotifier extends StateNotifier<List<DriveTask>> {
|
|||||||
return taskId;
|
return taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_websocketSubscription?.cancel();
|
_websocketSubscription?.cancel();
|
||||||
super.dispose();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
||||||
import 'package:island/models/activity.dart';
|
import 'package:island/models/activity.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|||||||
@@ -6,169 +6,99 @@ part of 'event_calendar.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$eventCalendarHash() => r'3a33581c28bcd44bc5eb3abdb770171b4d275a5d';
|
// 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Provider for fetching event calendar data
|
/// Provider for fetching event calendar data
|
||||||
/// This can be used anywhere in the app where calendar data is needed
|
/// This can be used anywhere in the app where calendar data is needed
|
||||||
///
|
|
||||||
/// Copied from [eventCalendar].
|
|
||||||
@ProviderFor(eventCalendar)
|
@ProviderFor(eventCalendar)
|
||||||
const eventCalendarProvider = EventCalendarFamily();
|
const eventCalendarProvider = EventCalendarFamily._();
|
||||||
|
|
||||||
/// Provider for fetching event calendar data
|
/// Provider for fetching event calendar data
|
||||||
/// This can be used anywhere in the app where calendar data is needed
|
/// This can be used anywhere in the app where calendar data is needed
|
||||||
///
|
|
||||||
/// Copied from [eventCalendar].
|
final class EventCalendarProvider
|
||||||
class EventCalendarFamily
|
extends
|
||||||
extends Family<AsyncValue<List<SnEventCalendarEntry>>> {
|
$FunctionalProvider<
|
||||||
|
AsyncValue<List<SnEventCalendarEntry>>,
|
||||||
|
List<SnEventCalendarEntry>,
|
||||||
|
FutureOr<List<SnEventCalendarEntry>>
|
||||||
|
>
|
||||||
|
with
|
||||||
|
$FutureModifier<List<SnEventCalendarEntry>>,
|
||||||
|
$FutureProvider<List<SnEventCalendarEntry>> {
|
||||||
/// Provider for fetching event calendar data
|
/// Provider for fetching event calendar data
|
||||||
/// This can be used anywhere in the app where calendar data is needed
|
/// This can be used anywhere in the app where calendar data is needed
|
||||||
///
|
const EventCalendarProvider._({
|
||||||
/// Copied from [eventCalendar].
|
required EventCalendarFamily super.from,
|
||||||
const EventCalendarFamily();
|
required EventCalendarQuery super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'eventCalendarProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// Provider for fetching event calendar data
|
@override
|
||||||
/// This can be used anywhere in the app where calendar data is needed
|
String debugGetCreateSourceHash() => _$eventCalendarHash();
|
||||||
///
|
|
||||||
/// Copied from [eventCalendar].
|
@override
|
||||||
EventCalendarProvider call(EventCalendarQuery query) {
|
String toString() {
|
||||||
return EventCalendarProvider(query);
|
return r'eventCalendarProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
EventCalendarProvider getProviderOverride(
|
$FutureProviderElement<List<SnEventCalendarEntry>> $createElement(
|
||||||
covariant EventCalendarProvider provider,
|
$ProviderPointer pointer,
|
||||||
) {
|
) => $FutureProviderElement(pointer);
|
||||||
return call(provider.query);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
FutureOr<List<SnEventCalendarEntry>> create(Ref ref) {
|
||||||
|
final argument = this.argument as EventCalendarQuery;
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
return eventCalendar(ref, argument);
|
||||||
|
|
||||||
@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,
|
|
||||||
name: r'eventCalendarProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$eventCalendarHash,
|
|
||||||
dependencies: EventCalendarFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
EventCalendarFamily._allTransitiveDependencies,
|
|
||||||
query: query,
|
|
||||||
);
|
|
||||||
|
|
||||||
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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<List<SnEventCalendarEntry>> createElement() {
|
|
||||||
return _EventCalendarProviderElement(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is EventCalendarProvider && other.query == query;
|
return other is EventCalendarProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, query.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$eventCalendarHash() => r'3a33581c28bcd44bc5eb3abdb770171b4d275a5d';
|
||||||
// ignore: unused_element
|
|
||||||
mixin EventCalendarRef
|
|
||||||
on AutoDisposeFutureProviderRef<List<SnEventCalendarEntry>> {
|
|
||||||
/// The parameter `query` of this provider.
|
|
||||||
EventCalendarQuery get query;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _EventCalendarProviderElement
|
/// Provider for fetching event calendar data
|
||||||
extends AutoDisposeFutureProviderElement<List<SnEventCalendarEntry>>
|
/// This can be used anywhere in the app where calendar data is needed
|
||||||
with EventCalendarRef {
|
|
||||||
_EventCalendarProviderElement(super.provider);
|
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
|
@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
|
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'file_list.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// RiverpodGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
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,
|
|
||||||
name: r'billingQuotaProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$billingQuotaHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
typedef BillingQuotaRef = AutoDisposeFutureProviderRef<Map<String, dynamic>?>;
|
|
||||||
String _$cloudFileListNotifierHash() =>
|
|
||||||
r'533dfa86f920b60cf7491fb4aeb95ece19e428af';
|
|
||||||
|
|
||||||
/// See also [CloudFileListNotifier].
|
|
||||||
@ProviderFor(CloudFileListNotifier)
|
|
||||||
final cloudFileListNotifierProvider = AutoDisposeAsyncNotifierProvider<
|
|
||||||
CloudFileListNotifier,
|
|
||||||
CursorPagingData<FileListItem>
|
|
||||||
>.internal(
|
|
||||||
CloudFileListNotifier.new,
|
|
||||||
name: r'cloudFileListNotifierProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$cloudFileListNotifierHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$CloudFileListNotifier =
|
|
||||||
AutoDisposeAsyncNotifier<CursorPagingData<FileListItem>>;
|
|
||||||
String _$unindexedFileListNotifierHash() =>
|
|
||||||
r'afa487d7b956b71b21ca1b073a01364a34ede1d5';
|
|
||||||
|
|
||||||
/// See also [UnindexedFileListNotifier].
|
|
||||||
@ProviderFor(UnindexedFileListNotifier)
|
|
||||||
final unindexedFileListNotifierProvider = AutoDisposeAsyncNotifierProvider<
|
|
||||||
UnindexedFileListNotifier,
|
|
||||||
CursorPagingData<FileListItem>
|
|
||||||
>.internal(
|
|
||||||
UnindexedFileListNotifier.new,
|
|
||||||
name: r'unindexedFileListNotifierProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$unindexedFileListNotifierHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$UnindexedFileListNotifier =
|
|
||||||
AutoDisposeAsyncNotifier<CursorPagingData<FileListItem>>;
|
|
||||||
// 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
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'file_references.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// RiverpodGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
String _$fileReferencesHash() => r'd66c678c221f61978bdb242b98e6dbe31d0c204b';
|
|
||||||
|
|
||||||
/// 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();
|
|
||||||
|
|
||||||
/// 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,
|
|
||||||
name: r'fileReferencesProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$fileReferencesHash,
|
|
||||||
dependencies: FileReferencesFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
FileReferencesFamily._allTransitiveDependencies,
|
|
||||||
fileId: fileId,
|
|
||||||
);
|
|
||||||
|
|
||||||
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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<List<Reference>> createElement() {
|
|
||||||
return _FileReferencesProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return other is FileReferencesProvider && other.fileId == fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode {
|
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, fileId.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@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;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _FileReferencesProviderElement
|
|
||||||
extends AutoDisposeFutureProviderElement<List<Reference>>
|
|
||||||
with FileReferencesRef {
|
|
||||||
_FileReferencesProviderElement(super.provider);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get fileId => (origin as FileReferencesProvider).fileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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
|
|
||||||
@@ -6,159 +6,95 @@ part of 'link_preview.dart';
|
|||||||
// RiverpodGenerator
|
// 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)
|
@ProviderFor(LinkPreview)
|
||||||
const linkPreviewProvider = LinkPreviewFamily();
|
const linkPreviewProvider = LinkPreviewFamily._();
|
||||||
|
|
||||||
/// See also [LinkPreview].
|
final class LinkPreviewProvider
|
||||||
class LinkPreviewFamily extends Family<AsyncValue<SnScrappedLink?>> {
|
extends $AsyncNotifierProvider<LinkPreview, SnScrappedLink?> {
|
||||||
/// See also [LinkPreview].
|
const LinkPreviewProvider._({
|
||||||
const LinkPreviewFamily();
|
required LinkPreviewFamily super.from,
|
||||||
|
required String super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'linkPreviewProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [LinkPreview].
|
@override
|
||||||
LinkPreviewProvider call(String url) {
|
String debugGetCreateSourceHash() => _$linkPreviewHash();
|
||||||
return LinkPreviewProvider(url);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'linkPreviewProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
LinkPreviewProvider getProviderOverride(
|
LinkPreview create() => LinkPreview();
|
||||||
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,
|
|
||||||
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,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
url: url,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeAsyncNotifierProviderElement<LinkPreview, SnScrappedLink?>
|
|
||||||
createElement() {
|
|
||||||
return _LinkPreviewProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is LinkPreviewProvider && other.url == url;
|
return other is LinkPreviewProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, url.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$linkPreviewHash() => r'5130593d3066155cb958d20714ee577df1f940d7';
|
||||||
// ignore: unused_element
|
|
||||||
mixin LinkPreviewRef on AutoDisposeAsyncNotifierProviderRef<SnScrappedLink?> {
|
|
||||||
/// The parameter `url` of this provider.
|
|
||||||
String get url;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _LinkPreviewProviderElement
|
final class LinkPreviewFamily extends $Family
|
||||||
extends
|
with
|
||||||
AutoDisposeAsyncNotifierProviderElement<LinkPreview, SnScrappedLink?>
|
$ClassFamilyOverride<
|
||||||
with LinkPreviewRef {
|
LinkPreview,
|
||||||
_LinkPreviewProviderElement(super.provider);
|
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
|
@override
|
||||||
String get url => (origin as LinkPreviewProvider).url;
|
String toString() => r'linkPreviewProvider';
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore_for_file: type=lint
|
abstract class _$LinkPreview extends $AsyncNotifier<SnScrappedLink?> {
|
||||||
// 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
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
89
lib/pods/paging.dart
Normal file
89
lib/pods/paging.dart
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
|
||||||
|
abstract class PaginationController<T> {
|
||||||
|
int? get totalCount;
|
||||||
|
int get fetchedCount;
|
||||||
|
|
||||||
|
bool get fetchedAll;
|
||||||
|
bool get isLoading;
|
||||||
|
|
||||||
|
FutureOr<List<T>> fetch();
|
||||||
|
|
||||||
|
Future<void> refresh();
|
||||||
|
|
||||||
|
Future<void> fetchFurther();
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class PaginationFiltered<F> {
|
||||||
|
late F currentFilter;
|
||||||
|
|
||||||
|
Future<void> applyFilter(F filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin AsyncPaginationController<T> on AsyncNotifier<List<T>>
|
||||||
|
implements PaginationController<T> {
|
||||||
|
@override
|
||||||
|
int? totalCount;
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get fetchedCount => state.value?.length ?? 0;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get fetchedAll => totalCount != null && fetchedCount >= totalCount!;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isLoading = false;
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<List<T>> build() async => fetch();
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> refresh() async {
|
||||||
|
isLoading = true;
|
||||||
|
totalCount = null;
|
||||||
|
state = AsyncData<List<T>>([]);
|
||||||
|
|
||||||
|
final newState = await AsyncValue.guard<List<T>>(() async {
|
||||||
|
return await fetch();
|
||||||
|
});
|
||||||
|
state = newState;
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> fetchFurther() async {
|
||||||
|
if (fetchedAll) return;
|
||||||
|
|
||||||
|
isLoading = true;
|
||||||
|
state = AsyncLoading<List<T>>();
|
||||||
|
|
||||||
|
final newState = await AsyncValue.guard<List<T>>(() async {
|
||||||
|
final elements = await fetch();
|
||||||
|
return [...?state.value, ...elements];
|
||||||
|
});
|
||||||
|
|
||||||
|
state = newState;
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin AsyncPaginationFilter<F, T> on AsyncPaginationController<T>
|
||||||
|
implements PaginationFiltered<F> {
|
||||||
|
@override
|
||||||
|
Future<void> applyFilter(F filter) async {
|
||||||
|
if (currentFilter == filter) return;
|
||||||
|
// Reset the data
|
||||||
|
isLoading = true;
|
||||||
|
totalCount = null;
|
||||||
|
state = AsyncData<List<T>>([]);
|
||||||
|
currentFilter = filter;
|
||||||
|
|
||||||
|
final newState = await AsyncValue.guard<List<T>>(() async {
|
||||||
|
return await fetch();
|
||||||
|
});
|
||||||
|
state = newState;
|
||||||
|
isLoading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
52
lib/pods/post/post_categories.dart
Normal file
52
lib/pods/post/post_categories.dart
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
// Post Categories Notifier
|
||||||
|
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';
|
||||||
|
|
||||||
|
final postCategoriesProvider =
|
||||||
|
AsyncNotifierProvider.autoDispose<
|
||||||
|
PostCategoriesNotifier,
|
||||||
|
List<SnPostCategory>
|
||||||
|
>(PostCategoriesNotifier.new);
|
||||||
|
|
||||||
|
class PostCategoriesNotifier extends AsyncNotifier<List<SnPostCategory>>
|
||||||
|
with AsyncPaginationController<SnPostCategory> {
|
||||||
|
@override
|
||||||
|
Future<List<SnPostCategory>> fetch() async {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
|
final response = await client.get(
|
||||||
|
'/sphere/posts/categories',
|
||||||
|
queryParameters: {'offset': fetchedCount, 'take': 20, 'order': 'usage'},
|
||||||
|
);
|
||||||
|
|
||||||
|
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
|
||||||
|
final data = response.data as List;
|
||||||
|
return data.map((json) => SnPostCategory.fromJson(json)).toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Post Tags Notifier
|
||||||
|
final postTagsProvider =
|
||||||
|
AsyncNotifierProvider.autoDispose<PostTagsNotifier, List<SnPostTag>>(
|
||||||
|
PostTagsNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
|
class PostTagsNotifier extends AsyncNotifier<List<SnPostTag>>
|
||||||
|
with AsyncPaginationController<SnPostTag> {
|
||||||
|
@override
|
||||||
|
Future<List<SnPostTag>> fetch() async {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
|
final response = await client.get(
|
||||||
|
'/sphere/posts/tags',
|
||||||
|
queryParameters: {'offset': fetchedCount, 'take': 20, 'order': 'usage'},
|
||||||
|
);
|
||||||
|
|
||||||
|
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
|
||||||
|
final data = response.data as List;
|
||||||
|
return data.map((json) => SnPostTag.fromJson(json)).toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
95
lib/pods/post/post_list.dart
Normal file
95
lib/pods/post/post_list.dart
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/models/post.dart';
|
||||||
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
|
|
||||||
|
part 'post_list.freezed.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
sealed class PostListQuery with _$PostListQuery {
|
||||||
|
const factory PostListQuery({
|
||||||
|
String? pubName,
|
||||||
|
String? realm,
|
||||||
|
int? type,
|
||||||
|
List<String>? categories,
|
||||||
|
List<String>? tags,
|
||||||
|
bool? pinned,
|
||||||
|
@Default(false) bool shuffle,
|
||||||
|
bool? includeReplies,
|
||||||
|
bool? mediaOnly,
|
||||||
|
String? queryTerm,
|
||||||
|
String? order,
|
||||||
|
int? periodStart,
|
||||||
|
int? periodEnd,
|
||||||
|
@Default(true) bool orderDesc,
|
||||||
|
}) = _PostListQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
sealed class PostListQueryConfig with _$PostListQueryConfig {
|
||||||
|
const factory PostListQueryConfig({
|
||||||
|
String? id,
|
||||||
|
@Default(PostListQuery()) PostListQuery initialFilter,
|
||||||
|
}) = _PostListQueryConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
final postListProvider = AsyncNotifierProvider.autoDispose.family(
|
||||||
|
PostListNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
|
class PostListNotifier extends AsyncNotifier<List<SnPost>>
|
||||||
|
with
|
||||||
|
AsyncPaginationController<SnPost>,
|
||||||
|
AsyncPaginationFilter<PostListQuery, SnPost> {
|
||||||
|
static const int pageSize = 20;
|
||||||
|
|
||||||
|
final String? id;
|
||||||
|
final PostListQueryConfig config;
|
||||||
|
PostListNotifier(this.config) : id = config.id;
|
||||||
|
|
||||||
|
@override
|
||||||
|
late PostListQuery currentFilter;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<SnPost>> build() async {
|
||||||
|
currentFilter = config.initialFilter;
|
||||||
|
return fetch();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<SnPost>> fetch() async {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
|
final queryParams = {
|
||||||
|
'offset': fetchedCount,
|
||||||
|
'take': pageSize,
|
||||||
|
'replies': currentFilter.includeReplies,
|
||||||
|
'orderDesc': currentFilter.orderDesc,
|
||||||
|
if (currentFilter.shuffle) 'shuffle': currentFilter.shuffle,
|
||||||
|
if (currentFilter.pubName != null) 'pub': currentFilter.pubName,
|
||||||
|
if (currentFilter.realm != null) 'realm': currentFilter.realm,
|
||||||
|
if (currentFilter.type != null) 'type': currentFilter.type,
|
||||||
|
if (currentFilter.tags != null) 'tags': currentFilter.tags,
|
||||||
|
if (currentFilter.categories != null)
|
||||||
|
'categories': currentFilter.categories,
|
||||||
|
if (currentFilter.pinned != null) 'pinned': currentFilter.pinned,
|
||||||
|
if (currentFilter.order != null) 'order': currentFilter.order,
|
||||||
|
if (currentFilter.periodStart != null)
|
||||||
|
'periodStart': currentFilter.periodStart,
|
||||||
|
if (currentFilter.periodEnd != null) 'periodEnd': currentFilter.periodEnd,
|
||||||
|
if (currentFilter.queryTerm != null) 'query': currentFilter.queryTerm,
|
||||||
|
if (currentFilter.mediaOnly != null) 'media': currentFilter.mediaOnly,
|
||||||
|
};
|
||||||
|
|
||||||
|
final response = await client.get(
|
||||||
|
'/sphere/posts',
|
||||||
|
queryParameters: queryParams,
|
||||||
|
);
|
||||||
|
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
|
||||||
|
return response.data
|
||||||
|
.map((json) => SnPost.fromJson(json))
|
||||||
|
.cast<SnPost>()
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
592
lib/pods/post/post_list.freezed.dart
Normal file
592
lib/pods/post/post_list.freezed.dart
Normal file
@@ -0,0 +1,592 @@
|
|||||||
|
// 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 'post_list.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// FreezedGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// dart format off
|
||||||
|
T _$identity<T>(T value) => value;
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PostListQuery {
|
||||||
|
|
||||||
|
String? get pubName; String? get realm; int? get type; List<String>? get categories; List<String>? get tags; bool? get pinned; bool get shuffle; bool? get includeReplies; bool? get mediaOnly; String? get queryTerm; String? get order; int? get periodStart; int? get periodEnd; bool get orderDesc;
|
||||||
|
/// Create a copy of PostListQuery
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PostListQueryCopyWith<PostListQuery> get copyWith => _$PostListQueryCopyWithImpl<PostListQuery>(this as PostListQuery, _$identity);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is PostListQuery&&(identical(other.pubName, pubName) || other.pubName == pubName)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.categories, categories)&&const DeepCollectionEquality().equals(other.tags, tags)&&(identical(other.pinned, pinned) || other.pinned == pinned)&&(identical(other.shuffle, shuffle) || other.shuffle == shuffle)&&(identical(other.includeReplies, includeReplies) || other.includeReplies == includeReplies)&&(identical(other.mediaOnly, mediaOnly) || other.mediaOnly == mediaOnly)&&(identical(other.queryTerm, queryTerm) || other.queryTerm == queryTerm)&&(identical(other.order, order) || other.order == order)&&(identical(other.periodStart, periodStart) || other.periodStart == periodStart)&&(identical(other.periodEnd, periodEnd) || other.periodEnd == periodEnd)&&(identical(other.orderDesc, orderDesc) || other.orderDesc == orderDesc));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,pubName,realm,type,const DeepCollectionEquality().hash(categories),const DeepCollectionEquality().hash(tags),pinned,shuffle,includeReplies,mediaOnly,queryTerm,order,periodStart,periodEnd,orderDesc);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PostListQuery(pubName: $pubName, realm: $realm, type: $type, categories: $categories, tags: $tags, pinned: $pinned, shuffle: $shuffle, includeReplies: $includeReplies, mediaOnly: $mediaOnly, queryTerm: $queryTerm, order: $order, periodStart: $periodStart, periodEnd: $periodEnd, orderDesc: $orderDesc)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class $PostListQueryCopyWith<$Res> {
|
||||||
|
factory $PostListQueryCopyWith(PostListQuery value, $Res Function(PostListQuery) _then) = _$PostListQueryCopyWithImpl;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
String? pubName, String? realm, int? type, List<String>? categories, List<String>? tags, bool? pinned, bool shuffle, bool? includeReplies, bool? mediaOnly, String? queryTerm, String? order, int? periodStart, int? periodEnd, bool orderDesc
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class _$PostListQueryCopyWithImpl<$Res>
|
||||||
|
implements $PostListQueryCopyWith<$Res> {
|
||||||
|
_$PostListQueryCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final PostListQuery _self;
|
||||||
|
final $Res Function(PostListQuery) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQuery
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline') @override $Res call({Object? pubName = freezed,Object? realm = freezed,Object? type = freezed,Object? categories = freezed,Object? tags = freezed,Object? pinned = freezed,Object? shuffle = null,Object? includeReplies = freezed,Object? mediaOnly = freezed,Object? queryTerm = freezed,Object? order = freezed,Object? periodStart = freezed,Object? periodEnd = freezed,Object? orderDesc = null,}) {
|
||||||
|
return _then(_self.copyWith(
|
||||||
|
pubName: freezed == pubName ? _self.pubName : pubName // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,type: freezed == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,categories: freezed == categories ? _self.categories : categories // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<String>?,tags: freezed == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<String>?,pinned: freezed == pinned ? _self.pinned : pinned // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,shuffle: null == shuffle ? _self.shuffle : shuffle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,includeReplies: freezed == includeReplies ? _self.includeReplies : includeReplies // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,mediaOnly: freezed == mediaOnly ? _self.mediaOnly : mediaOnly // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,queryTerm: freezed == queryTerm ? _self.queryTerm : queryTerm // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,order: freezed == order ? _self.order : order // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,periodStart: freezed == periodStart ? _self.periodStart : periodStart // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,periodEnd: freezed == periodEnd ? _self.periodEnd : periodEnd // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,orderDesc: null == orderDesc ? _self.orderDesc : orderDesc // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Adds pattern-matching-related methods to [PostListQuery].
|
||||||
|
extension PostListQueryPatterns on PostListQuery {
|
||||||
|
/// 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( _PostListQuery value)? $default,{required TResult orElse(),}){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery() 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( _PostListQuery value) $default,){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery():
|
||||||
|
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( _PostListQuery value)? $default,){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery() 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? pubName, String? realm, int? type, List<String>? categories, List<String>? tags, bool? pinned, bool shuffle, bool? includeReplies, bool? mediaOnly, String? queryTerm, String? order, int? periodStart, int? periodEnd, bool orderDesc)? $default,{required TResult orElse(),}) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery() when $default != null:
|
||||||
|
return $default(_that.pubName,_that.realm,_that.type,_that.categories,_that.tags,_that.pinned,_that.shuffle,_that.includeReplies,_that.mediaOnly,_that.queryTerm,_that.order,_that.periodStart,_that.periodEnd,_that.orderDesc);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? pubName, String? realm, int? type, List<String>? categories, List<String>? tags, bool? pinned, bool shuffle, bool? includeReplies, bool? mediaOnly, String? queryTerm, String? order, int? periodStart, int? periodEnd, bool orderDesc) $default,) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery():
|
||||||
|
return $default(_that.pubName,_that.realm,_that.type,_that.categories,_that.tags,_that.pinned,_that.shuffle,_that.includeReplies,_that.mediaOnly,_that.queryTerm,_that.order,_that.periodStart,_that.periodEnd,_that.orderDesc);}
|
||||||
|
}
|
||||||
|
/// 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? pubName, String? realm, int? type, List<String>? categories, List<String>? tags, bool? pinned, bool shuffle, bool? includeReplies, bool? mediaOnly, String? queryTerm, String? order, int? periodStart, int? periodEnd, bool orderDesc)? $default,) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQuery() when $default != null:
|
||||||
|
return $default(_that.pubName,_that.realm,_that.type,_that.categories,_that.tags,_that.pinned,_that.shuffle,_that.includeReplies,_that.mediaOnly,_that.queryTerm,_that.order,_that.periodStart,_that.periodEnd,_that.orderDesc);case _:
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
|
||||||
|
class _PostListQuery implements PostListQuery {
|
||||||
|
const _PostListQuery({this.pubName, this.realm, this.type, final List<String>? categories, final List<String>? tags, this.pinned, this.shuffle = false, this.includeReplies, this.mediaOnly, this.queryTerm, this.order, this.periodStart, this.periodEnd, this.orderDesc = true}): _categories = categories,_tags = tags;
|
||||||
|
|
||||||
|
|
||||||
|
@override final String? pubName;
|
||||||
|
@override final String? realm;
|
||||||
|
@override final int? type;
|
||||||
|
final List<String>? _categories;
|
||||||
|
@override List<String>? get categories {
|
||||||
|
final value = _categories;
|
||||||
|
if (value == null) return null;
|
||||||
|
if (_categories is EqualUnmodifiableListView) return _categories;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableListView(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
final List<String>? _tags;
|
||||||
|
@override List<String>? get tags {
|
||||||
|
final value = _tags;
|
||||||
|
if (value == null) return null;
|
||||||
|
if (_tags is EqualUnmodifiableListView) return _tags;
|
||||||
|
// ignore: implicit_dynamic_type
|
||||||
|
return EqualUnmodifiableListView(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override final bool? pinned;
|
||||||
|
@override@JsonKey() final bool shuffle;
|
||||||
|
@override final bool? includeReplies;
|
||||||
|
@override final bool? mediaOnly;
|
||||||
|
@override final String? queryTerm;
|
||||||
|
@override final String? order;
|
||||||
|
@override final int? periodStart;
|
||||||
|
@override final int? periodEnd;
|
||||||
|
@override@JsonKey() final bool orderDesc;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQuery
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$PostListQueryCopyWith<_PostListQuery> get copyWith => __$PostListQueryCopyWithImpl<_PostListQuery>(this, _$identity);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PostListQuery&&(identical(other.pubName, pubName) || other.pubName == pubName)&&(identical(other.realm, realm) || other.realm == realm)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._categories, _categories)&&const DeepCollectionEquality().equals(other._tags, _tags)&&(identical(other.pinned, pinned) || other.pinned == pinned)&&(identical(other.shuffle, shuffle) || other.shuffle == shuffle)&&(identical(other.includeReplies, includeReplies) || other.includeReplies == includeReplies)&&(identical(other.mediaOnly, mediaOnly) || other.mediaOnly == mediaOnly)&&(identical(other.queryTerm, queryTerm) || other.queryTerm == queryTerm)&&(identical(other.order, order) || other.order == order)&&(identical(other.periodStart, periodStart) || other.periodStart == periodStart)&&(identical(other.periodEnd, periodEnd) || other.periodEnd == periodEnd)&&(identical(other.orderDesc, orderDesc) || other.orderDesc == orderDesc));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,pubName,realm,type,const DeepCollectionEquality().hash(_categories),const DeepCollectionEquality().hash(_tags),pinned,shuffle,includeReplies,mediaOnly,queryTerm,order,periodStart,periodEnd,orderDesc);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PostListQuery(pubName: $pubName, realm: $realm, type: $type, categories: $categories, tags: $tags, pinned: $pinned, shuffle: $shuffle, includeReplies: $includeReplies, mediaOnly: $mediaOnly, queryTerm: $queryTerm, order: $order, periodStart: $periodStart, periodEnd: $periodEnd, orderDesc: $orderDesc)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class _$PostListQueryCopyWith<$Res> implements $PostListQueryCopyWith<$Res> {
|
||||||
|
factory _$PostListQueryCopyWith(_PostListQuery value, $Res Function(_PostListQuery) _then) = __$PostListQueryCopyWithImpl;
|
||||||
|
@override @useResult
|
||||||
|
$Res call({
|
||||||
|
String? pubName, String? realm, int? type, List<String>? categories, List<String>? tags, bool? pinned, bool shuffle, bool? includeReplies, bool? mediaOnly, String? queryTerm, String? order, int? periodStart, int? periodEnd, bool orderDesc
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class __$PostListQueryCopyWithImpl<$Res>
|
||||||
|
implements _$PostListQueryCopyWith<$Res> {
|
||||||
|
__$PostListQueryCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final _PostListQuery _self;
|
||||||
|
final $Res Function(_PostListQuery) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQuery
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @pragma('vm:prefer-inline') $Res call({Object? pubName = freezed,Object? realm = freezed,Object? type = freezed,Object? categories = freezed,Object? tags = freezed,Object? pinned = freezed,Object? shuffle = null,Object? includeReplies = freezed,Object? mediaOnly = freezed,Object? queryTerm = freezed,Object? order = freezed,Object? periodStart = freezed,Object? periodEnd = freezed,Object? orderDesc = null,}) {
|
||||||
|
return _then(_PostListQuery(
|
||||||
|
pubName: freezed == pubName ? _self.pubName : pubName // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,realm: freezed == realm ? _self.realm : realm // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,type: freezed == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,categories: freezed == categories ? _self._categories : categories // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<String>?,tags: freezed == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable
|
||||||
|
as List<String>?,pinned: freezed == pinned ? _self.pinned : pinned // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,shuffle: null == shuffle ? _self.shuffle : shuffle // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,includeReplies: freezed == includeReplies ? _self.includeReplies : includeReplies // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,mediaOnly: freezed == mediaOnly ? _self.mediaOnly : mediaOnly // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool?,queryTerm: freezed == queryTerm ? _self.queryTerm : queryTerm // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,order: freezed == order ? _self.order : order // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,periodStart: freezed == periodStart ? _self.periodStart : periodStart // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,periodEnd: freezed == periodEnd ? _self.periodEnd : periodEnd // ignore: cast_nullable_to_non_nullable
|
||||||
|
as int?,orderDesc: null == orderDesc ? _self.orderDesc : orderDesc // ignore: cast_nullable_to_non_nullable
|
||||||
|
as bool,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
mixin _$PostListQueryConfig {
|
||||||
|
|
||||||
|
String? get id; PostListQuery get initialFilter;
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PostListQueryConfigCopyWith<PostListQueryConfig> get copyWith => _$PostListQueryConfigCopyWithImpl<PostListQueryConfig>(this as PostListQueryConfig, _$identity);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is PostListQueryConfig&&(identical(other.id, id) || other.id == id)&&(identical(other.initialFilter, initialFilter) || other.initialFilter == initialFilter));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,id,initialFilter);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PostListQueryConfig(id: $id, initialFilter: $initialFilter)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class $PostListQueryConfigCopyWith<$Res> {
|
||||||
|
factory $PostListQueryConfigCopyWith(PostListQueryConfig value, $Res Function(PostListQueryConfig) _then) = _$PostListQueryConfigCopyWithImpl;
|
||||||
|
@useResult
|
||||||
|
$Res call({
|
||||||
|
String? id, PostListQuery initialFilter
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$PostListQueryCopyWith<$Res> get initialFilter;
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class _$PostListQueryConfigCopyWithImpl<$Res>
|
||||||
|
implements $PostListQueryConfigCopyWith<$Res> {
|
||||||
|
_$PostListQueryConfigCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final PostListQueryConfig _self;
|
||||||
|
final $Res Function(PostListQueryConfig) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@pragma('vm:prefer-inline') @override $Res call({Object? id = freezed,Object? initialFilter = null,}) {
|
||||||
|
return _then(_self.copyWith(
|
||||||
|
id: freezed == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,initialFilter: null == initialFilter ? _self.initialFilter : initialFilter // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PostListQuery,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PostListQueryCopyWith<$Res> get initialFilter {
|
||||||
|
|
||||||
|
return $PostListQueryCopyWith<$Res>(_self.initialFilter, (value) {
|
||||||
|
return _then(_self.copyWith(initialFilter: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Adds pattern-matching-related methods to [PostListQueryConfig].
|
||||||
|
extension PostListQueryConfigPatterns on PostListQueryConfig {
|
||||||
|
/// 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( _PostListQueryConfig value)? $default,{required TResult orElse(),}){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig() 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( _PostListQueryConfig value) $default,){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig():
|
||||||
|
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( _PostListQueryConfig value)? $default,){
|
||||||
|
final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig() when $default != null:
|
||||||
|
return $default(_that);case _:
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// A variant of `when` that fallback to an `orElse` callback.
|
||||||
|
///
|
||||||
|
/// It is equivalent to doing:
|
||||||
|
/// ```dart
|
||||||
|
/// switch (sealedClass) {
|
||||||
|
/// case Subclass(:final field):
|
||||||
|
/// return ...;
|
||||||
|
/// case _:
|
||||||
|
/// return orElse();
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
|
||||||
|
@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String? id, PostListQuery initialFilter)? $default,{required TResult orElse(),}) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig() when $default != null:
|
||||||
|
return $default(_that.id,_that.initialFilter);case _:
|
||||||
|
return orElse();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/// A `switch`-like method, using callbacks.
|
||||||
|
///
|
||||||
|
/// As opposed to `map`, this offers destructuring.
|
||||||
|
/// It is equivalent to doing:
|
||||||
|
/// ```dart
|
||||||
|
/// switch (sealedClass) {
|
||||||
|
/// case Subclass(:final field):
|
||||||
|
/// return ...;
|
||||||
|
/// case Subclass2(:final field2):
|
||||||
|
/// return ...;
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
|
||||||
|
@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String? id, PostListQuery initialFilter) $default,) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig():
|
||||||
|
return $default(_that.id,_that.initialFilter);}
|
||||||
|
}
|
||||||
|
/// A variant of `when` that fallback to returning `null`
|
||||||
|
///
|
||||||
|
/// It is equivalent to doing:
|
||||||
|
/// ```dart
|
||||||
|
/// switch (sealedClass) {
|
||||||
|
/// case Subclass(:final field):
|
||||||
|
/// return ...;
|
||||||
|
/// case _:
|
||||||
|
/// return null;
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
|
||||||
|
@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String? id, PostListQuery initialFilter)? $default,) {final _that = this;
|
||||||
|
switch (_that) {
|
||||||
|
case _PostListQueryConfig() when $default != null:
|
||||||
|
return $default(_that.id,_that.initialFilter);case _:
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
|
||||||
|
|
||||||
|
class _PostListQueryConfig implements PostListQueryConfig {
|
||||||
|
const _PostListQueryConfig({this.id, this.initialFilter = const PostListQuery()});
|
||||||
|
|
||||||
|
|
||||||
|
@override final String? id;
|
||||||
|
@override@JsonKey() final PostListQuery initialFilter;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @JsonKey(includeFromJson: false, includeToJson: false)
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
_$PostListQueryConfigCopyWith<_PostListQueryConfig> get copyWith => __$PostListQueryConfigCopyWithImpl<_PostListQueryConfig>(this, _$identity);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
return identical(this, other) || (other.runtimeType == runtimeType&&other is _PostListQueryConfig&&(identical(other.id, id) || other.id == id)&&(identical(other.initialFilter, initialFilter) || other.initialFilter == initialFilter));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@override
|
||||||
|
int get hashCode => Object.hash(runtimeType,id,initialFilter);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return 'PostListQueryConfig(id: $id, initialFilter: $initialFilter)';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @nodoc
|
||||||
|
abstract mixin class _$PostListQueryConfigCopyWith<$Res> implements $PostListQueryConfigCopyWith<$Res> {
|
||||||
|
factory _$PostListQueryConfigCopyWith(_PostListQueryConfig value, $Res Function(_PostListQueryConfig) _then) = __$PostListQueryConfigCopyWithImpl;
|
||||||
|
@override @useResult
|
||||||
|
$Res call({
|
||||||
|
String? id, PostListQuery initialFilter
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
@override $PostListQueryCopyWith<$Res> get initialFilter;
|
||||||
|
|
||||||
|
}
|
||||||
|
/// @nodoc
|
||||||
|
class __$PostListQueryConfigCopyWithImpl<$Res>
|
||||||
|
implements _$PostListQueryConfigCopyWith<$Res> {
|
||||||
|
__$PostListQueryConfigCopyWithImpl(this._self, this._then);
|
||||||
|
|
||||||
|
final _PostListQueryConfig _self;
|
||||||
|
final $Res Function(_PostListQueryConfig) _then;
|
||||||
|
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override @pragma('vm:prefer-inline') $Res call({Object? id = freezed,Object? initialFilter = null,}) {
|
||||||
|
return _then(_PostListQueryConfig(
|
||||||
|
id: freezed == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
|
||||||
|
as String?,initialFilter: null == initialFilter ? _self.initialFilter : initialFilter // ignore: cast_nullable_to_non_nullable
|
||||||
|
as PostListQuery,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Create a copy of PostListQueryConfig
|
||||||
|
/// with the given fields replaced by the non-null parameter values.
|
||||||
|
@override
|
||||||
|
@pragma('vm:prefer-inline')
|
||||||
|
$PostListQueryCopyWith<$Res> get initialFilter {
|
||||||
|
|
||||||
|
return $PostListQueryCopyWith<$Res>(_self.initialFilter, (value) {
|
||||||
|
return _then(_self.copyWith(initialFilter: value));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// dart format on
|
||||||
@@ -55,16 +55,12 @@ Future<String> siteFileContentRaw(
|
|||||||
return resp.data is String ? resp.data : resp.data['content'] as String;
|
return resp.data is String ? resp.data : resp.data['content'] as String;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SiteFilesNotifier
|
class SiteFilesNotifier extends AsyncNotifier<List<SnSiteFileEntry>> {
|
||||||
extends
|
final ({String siteId, String? path}) arg;
|
||||||
AutoDisposeFamilyAsyncNotifier<
|
SiteFilesNotifier(this.arg);
|
||||||
List<SnSiteFileEntry>,
|
|
||||||
({String siteId, String? path})
|
|
||||||
> {
|
|
||||||
@override
|
@override
|
||||||
Future<List<SnSiteFileEntry>> build(
|
Future<List<SnSiteFileEntry>> build() async {
|
||||||
({String siteId, String? path}) arg,
|
|
||||||
) async {
|
|
||||||
return fetchFiles();
|
return fetchFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,8 +148,6 @@ class SiteFilesNotifier
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final siteFilesNotifierProvider = AsyncNotifierProvider.autoDispose.family<
|
final siteFilesNotifierProvider = AsyncNotifierProvider.autoDispose.family(
|
||||||
SiteFilesNotifier,
|
SiteFilesNotifier.new,
|
||||||
List<SnSiteFileEntry>,
|
);
|
||||||
({String siteId, String? path})
|
|
||||||
>(SiteFilesNotifier.new);
|
|
||||||
|
|||||||
@@ -6,446 +6,257 @@ part of 'site_files.dart';
|
|||||||
// RiverpodGenerator
|
// 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)
|
@ProviderFor(siteFiles)
|
||||||
const siteFilesProvider = SiteFilesFamily();
|
const siteFilesProvider = SiteFilesFamily._();
|
||||||
|
|
||||||
/// See also [siteFiles].
|
final class SiteFilesProvider
|
||||||
class SiteFilesFamily extends Family<AsyncValue<List<SnSiteFileEntry>>> {
|
extends
|
||||||
/// See also [siteFiles].
|
$FunctionalProvider<
|
||||||
const SiteFilesFamily();
|
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',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [siteFiles].
|
@override
|
||||||
SiteFilesProvider call({required String siteId, String? path}) {
|
String debugGetCreateSourceHash() => _$siteFilesHash();
|
||||||
return SiteFilesProvider(siteId: siteId, path: path);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'siteFilesProvider'
|
||||||
|
''
|
||||||
|
'$argument';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
SiteFilesProvider getProviderOverride(covariant SiteFilesProvider provider) {
|
$FutureProviderElement<List<SnSiteFileEntry>> $createElement(
|
||||||
return call(siteId: provider.siteId, path: provider.path);
|
$ProviderPointer pointer,
|
||||||
}
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
FutureOr<List<SnSiteFileEntry>> create(Ref ref) {
|
||||||
|
final argument = this.argument as ({String siteId, String? path});
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
return siteFiles(ref, siteId: argument.siteId, path: argument.path);
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
|
||||||
_allTransitiveDependencies;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get name => r'siteFilesProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [siteFiles].
|
|
||||||
class SiteFilesProvider
|
|
||||||
extends AutoDisposeFutureProvider<List<SnSiteFileEntry>> {
|
|
||||||
/// See also [siteFiles].
|
|
||||||
SiteFilesProvider({required String siteId, String? path})
|
|
||||||
: this._internal(
|
|
||||||
(ref) => siteFiles(ref as SiteFilesRef, siteId: siteId, path: path),
|
|
||||||
from: siteFilesProvider,
|
|
||||||
name: r'siteFilesProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$siteFilesHash,
|
|
||||||
dependencies: SiteFilesFamily._dependencies,
|
|
||||||
allTransitiveDependencies: SiteFilesFamily._allTransitiveDependencies,
|
|
||||||
siteId: siteId,
|
|
||||||
path: path,
|
|
||||||
);
|
|
||||||
|
|
||||||
SiteFilesProvider._internal(
|
|
||||||
super._createNotifier, {
|
|
||||||
required super.name,
|
|
||||||
required super.dependencies,
|
|
||||||
required super.allTransitiveDependencies,
|
|
||||||
required super.debugGetCreateSourceHash,
|
|
||||||
required super.from,
|
|
||||||
required this.siteId,
|
|
||||||
required this.path,
|
|
||||||
}) : super.internal();
|
|
||||||
|
|
||||||
final String siteId;
|
|
||||||
final String? path;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Override overrideWith(
|
|
||||||
FutureOr<List<SnSiteFileEntry>> Function(SiteFilesRef provider) create,
|
|
||||||
) {
|
|
||||||
return ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
override: SiteFilesProvider._internal(
|
|
||||||
(ref) => create(ref as SiteFilesRef),
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
siteId: siteId,
|
|
||||||
path: path,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<List<SnSiteFileEntry>> createElement() {
|
|
||||||
return _SiteFilesProviderElement(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is SiteFilesProvider &&
|
return other is SiteFilesProvider && other.argument == argument;
|
||||||
other.siteId == siteId &&
|
|
||||||
other.path == path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, siteId.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, path.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$siteFilesHash() => r'd4029e6c160edcd454eb39ef1c19427b7f95a8d8';
|
||||||
// ignore: unused_element
|
|
||||||
mixin SiteFilesRef on AutoDisposeFutureProviderRef<List<SnSiteFileEntry>> {
|
|
||||||
/// The parameter `siteId` of this provider.
|
|
||||||
String get siteId;
|
|
||||||
|
|
||||||
/// The parameter `path` of this provider.
|
final class SiteFilesFamily extends $Family
|
||||||
String? get path;
|
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
|
@ProviderFor(siteFileContent)
|
||||||
extends AutoDisposeFutureProviderElement<List<SnSiteFileEntry>>
|
const siteFileContentProvider = SiteFileContentFamily._();
|
||||||
with SiteFilesRef {
|
|
||||||
_SiteFilesProviderElement(super.provider);
|
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
|
@override
|
||||||
String get siteId => (origin as SiteFilesProvider).siteId;
|
String debugGetCreateSourceHash() => _$siteFileContentHash();
|
||||||
|
|
||||||
@override
|
@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';
|
String _$siteFileContentHash() => r'b594ad4f8c54555e742ece94ee001092cb2f83d1';
|
||||||
|
|
||||||
/// See also [siteFileContent].
|
final class SiteFileContentFamily extends $Family
|
||||||
@ProviderFor(siteFileContent)
|
with
|
||||||
const siteFileContentProvider = SiteFileContentFamily();
|
$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({
|
SiteFileContentProvider call({
|
||||||
required String siteId,
|
required String siteId,
|
||||||
required String relativePath,
|
required String relativePath,
|
||||||
}) {
|
}) => SiteFileContentProvider._(
|
||||||
return SiteFileContentProvider(siteId: siteId, relativePath: relativePath);
|
argument: (siteId: siteId, relativePath: relativePath),
|
||||||
}
|
from: this,
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
SiteFileContentProvider getProviderOverride(
|
String toString() => r'siteFileContentProvider';
|
||||||
covariant SiteFileContentProvider provider,
|
|
||||||
) {
|
|
||||||
return call(siteId: provider.siteId, relativePath: provider.relativePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
|
||||||
_allTransitiveDependencies;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get name => r'siteFileContentProvider';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// See also [siteFileContent].
|
@ProviderFor(siteFileContentRaw)
|
||||||
class SiteFileContentProvider extends AutoDisposeFutureProvider<SnFileContent> {
|
const siteFileContentRawProvider = SiteFileContentRawFamily._();
|
||||||
/// See also [siteFileContent].
|
|
||||||
SiteFileContentProvider({
|
final class SiteFileContentRawProvider
|
||||||
required String siteId,
|
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
|
||||||
required String relativePath,
|
with $FutureModifier<String>, $FutureProvider<String> {
|
||||||
}) : this._internal(
|
const SiteFileContentRawProvider._({
|
||||||
(ref) => siteFileContent(
|
required SiteFileContentRawFamily super.from,
|
||||||
ref as SiteFileContentRef,
|
required ({String siteId, String relativePath}) super.argument,
|
||||||
siteId: siteId,
|
}) : super(
|
||||||
relativePath: relativePath,
|
retry: null,
|
||||||
),
|
name: r'siteFileContentRawProvider',
|
||||||
from: siteFileContentProvider,
|
isAutoDispose: true,
|
||||||
name: r'siteFileContentProvider',
|
dependencies: null,
|
||||||
debugGetCreateSourceHash:
|
$allTransitiveDependencies: null,
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$siteFileContentHash,
|
|
||||||
dependencies: SiteFileContentFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
SiteFileContentFamily._allTransitiveDependencies,
|
|
||||||
siteId: siteId,
|
|
||||||
relativePath: relativePath,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
SiteFileContentProvider._internal(
|
@override
|
||||||
super._createNotifier, {
|
String debugGetCreateSourceHash() => _$siteFileContentRawHash();
|
||||||
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
|
||||||
Override overrideWith(
|
String toString() {
|
||||||
FutureOr<SnFileContent> Function(SiteFileContentRef provider) create,
|
return r'siteFileContentRawProvider'
|
||||||
) {
|
''
|
||||||
return ProviderOverride(
|
'$argument';
|
||||||
origin: this,
|
}
|
||||||
override: SiteFileContentProvider._internal(
|
|
||||||
(ref) => create(ref as SiteFileContentRef),
|
@$internal
|
||||||
from: from,
|
@override
|
||||||
name: null,
|
$FutureProviderElement<String> $createElement($ProviderPointer pointer) =>
|
||||||
dependencies: null,
|
$FutureProviderElement(pointer);
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
@override
|
||||||
siteId: siteId,
|
FutureOr<String> create(Ref ref) {
|
||||||
relativePath: relativePath,
|
final argument = this.argument as ({String siteId, String relativePath});
|
||||||
),
|
return siteFileContentRaw(
|
||||||
|
ref,
|
||||||
|
siteId: argument.siteId,
|
||||||
|
relativePath: argument.relativePath,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<SnFileContent> createElement() {
|
|
||||||
return _SiteFileContentProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is SiteFileContentProvider &&
|
return other is SiteFileContentRawProvider && other.argument == argument;
|
||||||
other.siteId == siteId &&
|
|
||||||
other.relativePath == relativePath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, siteId.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, relativePath.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
mixin SiteFileContentRef on AutoDisposeFutureProviderRef<SnFileContent> {
|
|
||||||
/// The parameter `siteId` of this provider.
|
|
||||||
String get siteId;
|
|
||||||
|
|
||||||
/// The parameter `relativePath` of this provider.
|
|
||||||
String get relativePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _SiteFileContentProviderElement
|
|
||||||
extends AutoDisposeFutureProviderElement<SnFileContent>
|
|
||||||
with SiteFileContentRef {
|
|
||||||
_SiteFileContentProviderElement(super.provider);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get siteId => (origin as SiteFileContentProvider).siteId;
|
|
||||||
@override
|
|
||||||
String get relativePath => (origin as SiteFileContentProvider).relativePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
String _$siteFileContentRawHash() =>
|
String _$siteFileContentRawHash() =>
|
||||||
r'd0331c30698a9f4b90fe9b79273ff5914fa46616';
|
r'd0331c30698a9f4b90fe9b79273ff5914fa46616';
|
||||||
|
|
||||||
/// See also [siteFileContentRaw].
|
final class SiteFileContentRawFamily extends $Family
|
||||||
@ProviderFor(siteFileContentRaw)
|
with
|
||||||
const siteFileContentRawProvider = SiteFileContentRawFamily();
|
$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({
|
SiteFileContentRawProvider call({
|
||||||
required String siteId,
|
required String siteId,
|
||||||
required String relativePath,
|
required String relativePath,
|
||||||
}) {
|
}) => SiteFileContentRawProvider._(
|
||||||
return SiteFileContentRawProvider(
|
argument: (siteId: siteId, relativePath: relativePath),
|
||||||
siteId: siteId,
|
from: this,
|
||||||
relativePath: relativePath,
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
SiteFileContentRawProvider getProviderOverride(
|
String toString() => r'siteFileContentRawProvider';
|
||||||
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._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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@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
|
|
||||||
|
|||||||
@@ -25,16 +25,12 @@ Future<SnPublicationPage> sitePage(Ref ref, String pageId) async {
|
|||||||
return SnPublicationPage.fromJson(resp.data);
|
return SnPublicationPage.fromJson(resp.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
class SitePagesNotifier
|
class SitePagesNotifier extends AsyncNotifier<List<SnPublicationPage>> {
|
||||||
extends
|
final ({String pubName, String siteSlug}) arg;
|
||||||
AutoDisposeFamilyAsyncNotifier<
|
SitePagesNotifier(this.arg);
|
||||||
List<SnPublicationPage>,
|
|
||||||
({String pubName, String siteSlug})
|
|
||||||
> {
|
|
||||||
@override
|
@override
|
||||||
Future<List<SnPublicationPage>> build(
|
Future<List<SnPublicationPage>> build() async {
|
||||||
({String pubName, String siteSlug}) arg,
|
|
||||||
) async {
|
|
||||||
return fetchPages();
|
return fetchPages();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,275 +6,163 @@ part of 'site_pages.dart';
|
|||||||
// RiverpodGenerator
|
// 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)
|
@ProviderFor(sitePages)
|
||||||
const sitePagesProvider = SitePagesFamily();
|
const sitePagesProvider = SitePagesFamily._();
|
||||||
|
|
||||||
/// See also [sitePages].
|
final class SitePagesProvider
|
||||||
class SitePagesFamily extends Family<AsyncValue<List<SnPublicationPage>>> {
|
extends
|
||||||
/// See also [sitePages].
|
$FunctionalProvider<
|
||||||
const SitePagesFamily();
|
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',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [sitePages].
|
@override
|
||||||
SitePagesProvider call(String pubName, String siteSlug) {
|
String debugGetCreateSourceHash() => _$sitePagesHash();
|
||||||
return SitePagesProvider(pubName, siteSlug);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'sitePagesProvider'
|
||||||
|
''
|
||||||
|
'$argument';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
SitePagesProvider getProviderOverride(covariant SitePagesProvider provider) {
|
$FutureProviderElement<List<SnPublicationPage>> $createElement(
|
||||||
return call(provider.pubName, provider.siteSlug);
|
$ProviderPointer pointer,
|
||||||
}
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
FutureOr<List<SnPublicationPage>> create(Ref ref) {
|
||||||
|
final argument = this.argument as (String, String);
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
return sitePages(ref, argument.$1, argument.$2);
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
|
||||||
_allTransitiveDependencies;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get name => r'sitePagesProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [sitePages].
|
|
||||||
class SitePagesProvider
|
|
||||||
extends AutoDisposeFutureProvider<List<SnPublicationPage>> {
|
|
||||||
/// See also [sitePages].
|
|
||||||
SitePagesProvider(String pubName, String siteSlug)
|
|
||||||
: this._internal(
|
|
||||||
(ref) => sitePages(ref as SitePagesRef, pubName, siteSlug),
|
|
||||||
from: sitePagesProvider,
|
|
||||||
name: r'sitePagesProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$sitePagesHash,
|
|
||||||
dependencies: SitePagesFamily._dependencies,
|
|
||||||
allTransitiveDependencies: SitePagesFamily._allTransitiveDependencies,
|
|
||||||
pubName: pubName,
|
|
||||||
siteSlug: siteSlug,
|
|
||||||
);
|
|
||||||
|
|
||||||
SitePagesProvider._internal(
|
|
||||||
super._createNotifier, {
|
|
||||||
required super.name,
|
|
||||||
required super.dependencies,
|
|
||||||
required super.allTransitiveDependencies,
|
|
||||||
required super.debugGetCreateSourceHash,
|
|
||||||
required super.from,
|
|
||||||
required this.pubName,
|
|
||||||
required this.siteSlug,
|
|
||||||
}) : super.internal();
|
|
||||||
|
|
||||||
final String pubName;
|
|
||||||
final String siteSlug;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Override overrideWith(
|
|
||||||
FutureOr<List<SnPublicationPage>> Function(SitePagesRef provider) create,
|
|
||||||
) {
|
|
||||||
return ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
override: SitePagesProvider._internal(
|
|
||||||
(ref) => create(ref as SitePagesRef),
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
pubName: pubName,
|
|
||||||
siteSlug: siteSlug,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<List<SnPublicationPage>> createElement() {
|
|
||||||
return _SitePagesProviderElement(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is SitePagesProvider &&
|
return other is SitePagesProvider && other.argument == argument;
|
||||||
other.pubName == pubName &&
|
|
||||||
other.siteSlug == siteSlug;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, pubName.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, siteSlug.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$sitePagesHash() => r'5e084e9694ad665e9b238c6a747c6c6e99c5eb03';
|
||||||
// ignore: unused_element
|
|
||||||
mixin SitePagesRef on AutoDisposeFutureProviderRef<List<SnPublicationPage>> {
|
|
||||||
/// The parameter `pubName` of this provider.
|
|
||||||
String get pubName;
|
|
||||||
|
|
||||||
/// The parameter `siteSlug` of this provider.
|
final class SitePagesFamily extends $Family
|
||||||
String get siteSlug;
|
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
|
@ProviderFor(sitePage)
|
||||||
extends AutoDisposeFutureProviderElement<List<SnPublicationPage>>
|
const sitePageProvider = SitePageFamily._();
|
||||||
with SitePagesRef {
|
|
||||||
_SitePagesProviderElement(super.provider);
|
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
|
@override
|
||||||
String get pubName => (origin as SitePagesProvider).pubName;
|
String debugGetCreateSourceHash() => _$sitePageHash();
|
||||||
|
|
||||||
@override
|
@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';
|
String _$sitePageHash() => r'542f70c5b103fe34d7cf7eb0821d52f017022efc';
|
||||||
|
|
||||||
/// See also [sitePage].
|
final class SitePageFamily extends $Family
|
||||||
@ProviderFor(sitePage)
|
with $FunctionalFamilyOverride<FutureOr<SnPublicationPage>, String> {
|
||||||
const sitePageProvider = SitePageFamily();
|
const SitePageFamily._()
|
||||||
|
: super(
|
||||||
/// See also [sitePage].
|
retry: null,
|
||||||
class SitePageFamily extends Family<AsyncValue<SnPublicationPage>> {
|
|
||||||
/// See also [sitePage].
|
|
||||||
const SitePageFamily();
|
|
||||||
|
|
||||||
/// See also [sitePage].
|
|
||||||
SitePageProvider call(String pageId) {
|
|
||||||
return SitePageProvider(pageId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
SitePageProvider getProviderOverride(covariant SitePageProvider provider) {
|
|
||||||
return call(provider.pageId);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
|
|
||||||
_allTransitiveDependencies;
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get name => r'sitePageProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [sitePage].
|
|
||||||
class SitePageProvider extends AutoDisposeFutureProvider<SnPublicationPage> {
|
|
||||||
/// See also [sitePage].
|
|
||||||
SitePageProvider(String pageId)
|
|
||||||
: this._internal(
|
|
||||||
(ref) => sitePage(ref as SitePageRef, pageId),
|
|
||||||
from: sitePageProvider,
|
|
||||||
name: r'sitePageProvider',
|
name: r'sitePageProvider',
|
||||||
debugGetCreateSourceHash:
|
dependencies: null,
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
$allTransitiveDependencies: null,
|
||||||
? null
|
isAutoDispose: true,
|
||||||
: _$sitePageHash,
|
|
||||||
dependencies: SitePageFamily._dependencies,
|
|
||||||
allTransitiveDependencies: SitePageFamily._allTransitiveDependencies,
|
|
||||||
pageId: pageId,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
SitePageProvider._internal(
|
SitePageProvider call(String pageId) =>
|
||||||
super._createNotifier, {
|
SitePageProvider._(argument: pageId, from: this);
|
||||||
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
|
||||||
Override overrideWith(
|
String toString() => r'sitePageProvider';
|
||||||
FutureOr<SnPublicationPage> Function(SitePageRef provider) create,
|
|
||||||
) {
|
|
||||||
return ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
override: SitePageProvider._internal(
|
|
||||||
(ref) => create(ref as SitePageRef),
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
pageId: pageId,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<SnPublicationPage> createElement() {
|
|
||||||
return _SitePageProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return other is SitePageProvider && other.pageId == pageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode {
|
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, pageId.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
mixin SitePageRef on AutoDisposeFutureProviderRef<SnPublicationPage> {
|
|
||||||
/// The parameter `pageId` of this provider.
|
|
||||||
String get pageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _SitePageProviderElement
|
|
||||||
extends AutoDisposeFutureProviderElement<SnPublicationPage>
|
|
||||||
with SitePageRef {
|
|
||||||
_SitePageProviderElement(super.provider);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get pageId => (origin as SitePageProvider).pageId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ignore_for_file: type=lint
|
|
||||||
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
|
|
||||||
|
|||||||
@@ -4,16 +4,12 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
import 'package:island/models/publication_site.dart';
|
import 'package:island/models/publication_site.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
|
||||||
class SiteNotifier
|
class SiteNotifier extends AsyncNotifier<SnPublicationSite> {
|
||||||
extends
|
final ({String pubName, String? siteId}) arg;
|
||||||
AutoDisposeFamilyAsyncNotifier<
|
SiteNotifier(this.arg);
|
||||||
SnPublicationSite,
|
|
||||||
({String pubName, String? siteId})
|
|
||||||
> {
|
|
||||||
@override
|
@override
|
||||||
FutureOr<SnPublicationSite> build(
|
FutureOr<SnPublicationSite> build() async {
|
||||||
({String pubName, String? siteId}) arg,
|
|
||||||
) async {
|
|
||||||
if (arg.siteId == null || arg.siteId!.isEmpty) {
|
if (arg.siteId == null || arg.siteId!.isEmpty) {
|
||||||
return SnPublicationSite(
|
return SnPublicationSite(
|
||||||
id: '',
|
id: '',
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:island/pods/config.dart';
|
import 'package:island/pods/config.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
part 'theme.g.dart';
|
part 'theme.g.dart';
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
ThemeSet theme(Ref ref) {
|
ThemeSet theme(Ref ref) {
|
||||||
final settings = ref.watch(appSettingsNotifierProvider);
|
final settings = ref.watch(appSettingsProvider);
|
||||||
return createAppThemeSet(settings);
|
return createAppThemeSet(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,21 +6,46 @@ part of 'theme.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$themeHash() => r'a12dbf8b83d75713b7ae4c68e9cdd1a1cc3a35f0';
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
/// See also [theme].
|
|
||||||
@ProviderFor(theme)
|
@ProviderFor(theme)
|
||||||
final themeProvider = AutoDisposeProvider<ThemeSet>.internal(
|
const themeProvider = ThemeProvider._();
|
||||||
theme,
|
|
||||||
name: r'themeProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product') ? null : _$themeHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
final class ThemeProvider
|
||||||
// ignore: unused_element
|
extends $FunctionalProvider<ThemeSet, ThemeSet, ThemeSet>
|
||||||
typedef ThemeRef = AutoDisposeProviderRef<ThemeSet>;
|
with $Provider<ThemeSet> {
|
||||||
// ignore_for_file: type=lint
|
const ThemeProvider._()
|
||||||
// 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
|
: 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';
|
||||||
|
|||||||
57
lib/pods/timeline.dart
Normal file
57
lib/pods/timeline.dart
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/models/activity.dart';
|
||||||
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
|
|
||||||
|
final activityListProvider = AsyncNotifierProvider.autoDispose(
|
||||||
|
ActivityListNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
|
class ActivityListNotifier extends AsyncNotifier<List<SnTimelineEvent>>
|
||||||
|
with
|
||||||
|
AsyncPaginationController<SnTimelineEvent>,
|
||||||
|
AsyncPaginationFilter<String?, SnTimelineEvent> {
|
||||||
|
static const int pageSize = 20;
|
||||||
|
|
||||||
|
@override
|
||||||
|
String? currentFilter;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<SnTimelineEvent>> fetch() async {
|
||||||
|
final client = ref.read(apiClientProvider);
|
||||||
|
|
||||||
|
final cursor = state.value?.lastOrNull?.createdAt.toUtc().toIso8601String();
|
||||||
|
|
||||||
|
final queryParameters = {
|
||||||
|
if (cursor != null) 'cursor': cursor,
|
||||||
|
'take': pageSize,
|
||||||
|
if (currentFilter != null) 'filter': currentFilter,
|
||||||
|
};
|
||||||
|
|
||||||
|
final response = await client.get(
|
||||||
|
'/sphere/timeline',
|
||||||
|
queryParameters: queryParameters,
|
||||||
|
);
|
||||||
|
|
||||||
|
final List<SnTimelineEvent> items = (response.data as List)
|
||||||
|
.map((e) => SnTimelineEvent.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
final hasMore = (items.firstOrNull?.type ?? 'empty') != 'empty';
|
||||||
|
|
||||||
|
totalCount =
|
||||||
|
(state.value?.length ?? 0) + items.length + (hasMore ? pageSize : 0);
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateOne(int index, SnTimelineEvent activity) {
|
||||||
|
final currentState = state.value;
|
||||||
|
if (currentState == null) return;
|
||||||
|
|
||||||
|
final updatedItems = [...currentState];
|
||||||
|
updatedItems[index] = activity;
|
||||||
|
|
||||||
|
state = AsyncData(updatedItems);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -6,269 +6,152 @@ part of 'translate.dart';
|
|||||||
// RiverpodGenerator
|
// 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)
|
@ProviderFor(translateString)
|
||||||
const translateStringProvider = TranslateStringFamily();
|
const translateStringProvider = TranslateStringFamily._();
|
||||||
|
|
||||||
/// See also [translateString].
|
final class TranslateStringProvider
|
||||||
class TranslateStringFamily extends Family<AsyncValue<String>> {
|
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
|
||||||
/// See also [translateString].
|
with $FutureModifier<String>, $FutureProvider<String> {
|
||||||
const TranslateStringFamily();
|
const TranslateStringProvider._({
|
||||||
|
required TranslateStringFamily super.from,
|
||||||
|
required TranslateQuery super.argument,
|
||||||
|
}) : super(
|
||||||
|
retry: null,
|
||||||
|
name: r'translateStringProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [translateString].
|
@override
|
||||||
TranslateStringProvider call(TranslateQuery query) {
|
String debugGetCreateSourceHash() => _$translateStringHash();
|
||||||
return TranslateStringProvider(query);
|
|
||||||
|
@override
|
||||||
|
String toString() {
|
||||||
|
return r'translateStringProvider'
|
||||||
|
''
|
||||||
|
'($argument)';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@$internal
|
||||||
@override
|
@override
|
||||||
TranslateStringProvider getProviderOverride(
|
$FutureProviderElement<String> $createElement($ProviderPointer pointer) =>
|
||||||
covariant TranslateStringProvider provider,
|
$FutureProviderElement(pointer);
|
||||||
) {
|
|
||||||
return call(provider.query);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
|
FutureOr<String> create(Ref ref) {
|
||||||
|
final argument = this.argument as TranslateQuery;
|
||||||
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
|
return translateString(ref, argument);
|
||||||
|
|
||||||
@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,
|
|
||||||
name: r'translateStringProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$translateStringHash,
|
|
||||||
dependencies: TranslateStringFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
TranslateStringFamily._allTransitiveDependencies,
|
|
||||||
query: query,
|
|
||||||
);
|
|
||||||
|
|
||||||
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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<String> createElement() {
|
|
||||||
return _TranslateStringProviderElement(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool operator ==(Object other) {
|
bool operator ==(Object other) {
|
||||||
return other is TranslateStringProvider && other.query == query;
|
return other is TranslateStringProvider && other.argument == argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
int get hashCode {
|
int get hashCode {
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
return argument.hashCode;
|
||||||
hash = _SystemHash.combine(hash, query.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
String _$translateStringHash() => r'51d638cf07cbf3ffa9469298f5bd9c667bc0ccb7';
|
||||||
// ignore: unused_element
|
|
||||||
mixin TranslateStringRef on AutoDisposeFutureProviderRef<String> {
|
|
||||||
/// The parameter `query` of this provider.
|
|
||||||
TranslateQuery get query;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _TranslateStringProviderElement
|
final class TranslateStringFamily extends $Family
|
||||||
extends AutoDisposeFutureProviderElement<String>
|
with $FunctionalFamilyOverride<FutureOr<String>, TranslateQuery> {
|
||||||
with TranslateStringRef {
|
const TranslateStringFamily._()
|
||||||
_TranslateStringProviderElement(super.provider);
|
: super(
|
||||||
|
retry: null,
|
||||||
|
name: r'translateStringProvider',
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
isAutoDispose: true,
|
||||||
|
);
|
||||||
|
|
||||||
|
TranslateStringProvider call(TranslateQuery query) =>
|
||||||
|
TranslateStringProvider._(argument: query, from: this);
|
||||||
|
|
||||||
@override
|
@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() =>
|
String _$detectStringLanguageHash() =>
|
||||||
r'24fbf52edbbffcc8dc4f09f7206f82d69728e703';
|
r'24fbf52edbbffcc8dc4f09f7206f82d69728e703';
|
||||||
|
|
||||||
/// See also [detectStringLanguage].
|
final class DetectStringLanguageFamily extends $Family
|
||||||
@ProviderFor(detectStringLanguage)
|
with $FunctionalFamilyOverride<String?, String> {
|
||||||
const detectStringLanguageProvider = DetectStringLanguageFamily();
|
const DetectStringLanguageFamily._()
|
||||||
|
: super(
|
||||||
/// See also [detectStringLanguage].
|
retry: null,
|
||||||
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,
|
|
||||||
name: r'detectStringLanguageProvider',
|
name: r'detectStringLanguageProvider',
|
||||||
debugGetCreateSourceHash:
|
dependencies: null,
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
$allTransitiveDependencies: null,
|
||||||
? null
|
isAutoDispose: true,
|
||||||
: _$detectStringLanguageHash,
|
|
||||||
dependencies: DetectStringLanguageFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
DetectStringLanguageFamily._allTransitiveDependencies,
|
|
||||||
text: text,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
DetectStringLanguageProvider._internal(
|
DetectStringLanguageProvider call(String text) =>
|
||||||
super._createNotifier, {
|
DetectStringLanguageProvider._(argument: text, from: this);
|
||||||
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
|
||||||
Override overrideWith(
|
String toString() => r'detectStringLanguageProvider';
|
||||||
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,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@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
|
|
||||||
|
|||||||
@@ -14,26 +14,27 @@ import 'package:island/pods/config.dart';
|
|||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/talker.dart';
|
import 'package:island/talker.dart';
|
||||||
|
|
||||||
class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
|
class UserInfoNotifier extends AsyncNotifier<SnAccount?> {
|
||||||
final Ref _ref;
|
@override
|
||||||
|
Future<SnAccount?> build() async {
|
||||||
UserInfoNotifier(this._ref) : super(const AsyncValue.data(null));
|
final token = ref.watch(tokenProvider);
|
||||||
|
|
||||||
Future<void> fetchUser() async {
|
|
||||||
final token = _ref.watch(tokenProvider);
|
|
||||||
if (token == null) {
|
if (token == null) {
|
||||||
talker.info('[UserInfo] No token found, not going to fetch...');
|
talker.info('[UserInfo] No token found, not going to fetch...');
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
return _fetchUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<SnAccount?> _fetchUser() async {
|
||||||
try {
|
try {
|
||||||
final client = _ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
final response = await client.get('/pass/accounts/me');
|
final response = await client.get('/pass/accounts/me');
|
||||||
final user = SnAccount.fromJson(response.data);
|
final user = SnAccount.fromJson(response.data);
|
||||||
state = AsyncValue.data(user);
|
|
||||||
|
|
||||||
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
|
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
|
||||||
FirebaseAnalytics.instance.setUserId(id: user.id);
|
FirebaseAnalytics.instance.setUserId(id: user.id);
|
||||||
}
|
}
|
||||||
|
return user;
|
||||||
} catch (error, stackTrace) {
|
} catch (error, stackTrace) {
|
||||||
if (!kIsWeb) {
|
if (!kIsWeb) {
|
||||||
if (error is DioException) {
|
if (error is DioException) {
|
||||||
@@ -69,58 +70,63 @@ class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
|
|||||||
),
|
),
|
||||||
).then((value) {
|
).then((value) {
|
||||||
if (value == true) {
|
if (value == true) {
|
||||||
fetchUser();
|
ref.invalidateSelf();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
showOverlayDialog<bool>(
|
||||||
|
builder:
|
||||||
|
(context, close) => AlertDialog(
|
||||||
|
title: Text('failedToLoadUserInfo'.tr()),
|
||||||
|
content: Text(
|
||||||
|
[
|
||||||
|
'failedToLoadUserInfoNetwork'.tr(),
|
||||||
|
error.toString(),
|
||||||
|
].join('\n\n').trim(),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => close(false),
|
||||||
|
child: Text('okay'.tr()),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => close(true),
|
||||||
|
child: Text('retry'.tr()),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
).then((value) {
|
||||||
|
if (value == true) {
|
||||||
|
ref.invalidateSelf();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
showOverlayDialog<bool>(
|
|
||||||
builder:
|
|
||||||
(context, close) => AlertDialog(
|
|
||||||
title: Text('failedToLoadUserInfo'.tr()),
|
|
||||||
content: Text(
|
|
||||||
[
|
|
||||||
'failedToLoadUserInfoNetwork'.tr(),
|
|
||||||
error.toString(),
|
|
||||||
].join('\n\n').trim(),
|
|
||||||
),
|
|
||||||
actions: [
|
|
||||||
TextButton(
|
|
||||||
onPressed: () => close(false),
|
|
||||||
child: Text('okay'.tr()),
|
|
||||||
),
|
|
||||||
TextButton(
|
|
||||||
onPressed: () => close(true),
|
|
||||||
child: Text('retry'.tr()),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
).then((value) {
|
|
||||||
if (value == true) {
|
|
||||||
fetchUser();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
talker.error(
|
talker.error(
|
||||||
"[UserInfo] Failed to fetch user info...",
|
"[UserInfo] Failed to fetch user info...",
|
||||||
error,
|
error,
|
||||||
stackTrace,
|
stackTrace,
|
||||||
);
|
);
|
||||||
state = AsyncValue.data(null);
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> fetchUser() async {
|
||||||
|
ref.invalidateSelf();
|
||||||
|
await future;
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> logOut() async {
|
Future<void> logOut() async {
|
||||||
state = const AsyncValue.data(null);
|
state = const AsyncValue.data(null);
|
||||||
final prefs = _ref.read(sharedPreferencesProvider);
|
final prefs = ref.read(sharedPreferencesProvider);
|
||||||
await prefs.remove(kTokenPairStoreKey);
|
await prefs.remove(kTokenPairStoreKey);
|
||||||
_ref.invalidate(tokenProvider);
|
ref.invalidate(tokenProvider);
|
||||||
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
|
if (kIsWeb || !(Platform.isLinux || Platform.isWindows)) {
|
||||||
FirebaseAnalytics.instance.setUserId(id: null);
|
FirebaseAnalytics.instance.setUserId(id: null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final userInfoProvider =
|
final userInfoProvider = AsyncNotifierProvider<UserInfoNotifier, SnAccount?>(
|
||||||
StateNotifierProvider<UserInfoNotifier, AsyncValue<SnAccount?>>(
|
UserInfoNotifier.new,
|
||||||
(ref) => UserInfoNotifier(ref),
|
);
|
||||||
);
|
|
||||||
|
|||||||
@@ -22,10 +22,14 @@ class WebAuthServerState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class WebAuthServerNotifier extends StateNotifier<WebAuthServerState> {
|
class WebAuthServerNotifier extends Notifier<WebAuthServerState> {
|
||||||
final WebAuthServer _server;
|
late final WebAuthServer _server;
|
||||||
|
|
||||||
WebAuthServerNotifier(this._server) : super(WebAuthServerState());
|
@override
|
||||||
|
WebAuthServerState build() {
|
||||||
|
_server = ref.watch(webAuthServerProvider);
|
||||||
|
return WebAuthServerState();
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> start() async {
|
Future<void> start() async {
|
||||||
try {
|
try {
|
||||||
@@ -47,7 +51,6 @@ final webAuthServerProvider = Provider<WebAuthServer>((ref) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
final webAuthServerStateProvider =
|
final webAuthServerStateProvider =
|
||||||
StateNotifierProvider<WebAuthServerNotifier, WebAuthServerState>((ref) {
|
NotifierProvider<WebAuthServerNotifier, WebAuthServerState>(
|
||||||
final server = ref.watch(webAuthServerProvider);
|
WebAuthServerNotifier.new,
|
||||||
return WebAuthServerNotifier(server);
|
);
|
||||||
});
|
|
||||||
|
|||||||
@@ -5,25 +5,21 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||||||
import 'package:island/models/webfeed.dart';
|
import 'package:island/models/webfeed.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
|
||||||
final webFeedListProvider = FutureProvider.family<List<SnWebFeed>, String>((
|
final webFeedListProvider = FutureProvider.autoDispose
|
||||||
ref,
|
.family<List<SnWebFeed>, String>((ref, pubName) async {
|
||||||
pubName,
|
final client = ref.watch(apiClientProvider);
|
||||||
) async {
|
final response = await client.get('/sphere/publishers/$pubName/feeds');
|
||||||
final client = ref.watch(apiClientProvider);
|
return (response.data as List)
|
||||||
final response = await client.get('/sphere/publishers/$pubName/feeds');
|
.map((json) => SnWebFeed.fromJson(json))
|
||||||
return (response.data as List)
|
.toList();
|
||||||
.map((json) => SnWebFeed.fromJson(json))
|
});
|
||||||
.toList();
|
|
||||||
});
|
class WebFeedNotifier extends AsyncNotifier<SnWebFeed> {
|
||||||
|
final ({String pubName, String? feedId}) arg;
|
||||||
|
WebFeedNotifier(this.arg);
|
||||||
|
|
||||||
class WebFeedNotifier
|
|
||||||
extends
|
|
||||||
AutoDisposeFamilyAsyncNotifier<
|
|
||||||
SnWebFeed,
|
|
||||||
({String pubName, String? feedId})
|
|
||||||
> {
|
|
||||||
@override
|
@override
|
||||||
FutureOr<SnWebFeed> build(({String pubName, String? feedId}) arg) async {
|
FutureOr<SnWebFeed> build() async {
|
||||||
if (arg.feedId == null || arg.feedId!.isEmpty) {
|
if (arg.feedId == null || arg.feedId!.isEmpty) {
|
||||||
return SnWebFeed(
|
return SnWebFeed(
|
||||||
id: '',
|
id: '',
|
||||||
@@ -53,10 +49,9 @@ class WebFeedNotifier
|
|||||||
final client = ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
final url = '/sphere/publishers/${feed.publisherId}/feeds';
|
final url = '/sphere/publishers/${feed.publisherId}/feeds';
|
||||||
|
|
||||||
final response =
|
final response = feed.id.isEmpty
|
||||||
feed.id.isEmpty
|
? await client.post(url, data: feed.toJson())
|
||||||
? await client.post(url, data: feed.toJson())
|
: await client.patch('$url/${feed.id}', data: feed.toJson());
|
||||||
: await client.patch('$url/${feed.id}', data: feed.toJson());
|
|
||||||
|
|
||||||
state = AsyncValue.data(SnWebFeed.fromJson(response.data));
|
state = AsyncValue.data(SnWebFeed.fromJson(response.data));
|
||||||
} catch (error, stackTrace) {
|
} catch (error, stackTrace) {
|
||||||
|
|||||||
@@ -100,12 +100,16 @@ class WebSocketService {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onDone: () {
|
onDone: () {
|
||||||
talker.info('[WebSocket] Connection closed, attempting to reconnect...');
|
talker.info(
|
||||||
|
'[WebSocket] Connection closed, attempting to reconnect...',
|
||||||
|
);
|
||||||
_scheduleReconnect();
|
_scheduleReconnect();
|
||||||
_statusStreamController.sink.add(WebSocketState.disconnected());
|
_statusStreamController.sink.add(WebSocketState.disconnected());
|
||||||
},
|
},
|
||||||
onError: (error) {
|
onError: (error) {
|
||||||
talker.error('[WebSocket] Error occurred: $error, attempting to reconnect...');
|
talker.error(
|
||||||
|
'[WebSocket] Error occurred: $error, attempting to reconnect...',
|
||||||
|
);
|
||||||
_scheduleReconnect();
|
_scheduleReconnect();
|
||||||
_statusStreamController.sink.add(
|
_statusStreamController.sink.add(
|
||||||
WebSocketState.error(error.toString()),
|
WebSocketState.error(error.toString()),
|
||||||
@@ -152,15 +156,20 @@ class WebSocketService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final websocketStateProvider =
|
final websocketStateProvider =
|
||||||
StateNotifierProvider<WebSocketStateNotifier, WebSocketState>(
|
NotifierProvider<WebSocketStateNotifier, WebSocketState>(
|
||||||
(ref) => WebSocketStateNotifier(ref),
|
WebSocketStateNotifier.new,
|
||||||
);
|
);
|
||||||
|
|
||||||
class WebSocketStateNotifier extends StateNotifier<WebSocketState> {
|
class WebSocketStateNotifier extends Notifier<WebSocketState> {
|
||||||
final Ref ref;
|
|
||||||
Timer? _reconnectTimer;
|
Timer? _reconnectTimer;
|
||||||
|
|
||||||
WebSocketStateNotifier(this.ref) : super(const WebSocketState.disconnected());
|
@override
|
||||||
|
WebSocketState build() {
|
||||||
|
ref.onDispose(() {
|
||||||
|
_reconnectTimer?.cancel();
|
||||||
|
});
|
||||||
|
return const WebSocketState.disconnected();
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> connect() async {
|
Future<void> connect() async {
|
||||||
state = const WebSocketState.connecting();
|
state = const WebSocketState.connecting();
|
||||||
@@ -169,7 +178,7 @@ class WebSocketStateNotifier extends StateNotifier<WebSocketState> {
|
|||||||
await service.connect(ref);
|
await service.connect(ref);
|
||||||
state = const WebSocketState.connected();
|
state = const WebSocketState.connected();
|
||||||
service.statusStream.listen((event) {
|
service.statusStream.listen((event) {
|
||||||
if (mounted) state = event;
|
state = event;
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
state = WebSocketState.error('Failed to connect: $err');
|
state = WebSocketState.error('Failed to connect: $err');
|
||||||
|
|||||||
112
lib/route.dart
112
lib/route.dart
@@ -105,10 +105,9 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'articleCompose',
|
name: 'articleCompose',
|
||||||
path: '/articles/compose',
|
path: '/articles/compose',
|
||||||
builder:
|
builder: (context, state) => ArticleComposeScreen(
|
||||||
(context, state) => ArticleComposeScreen(
|
initialState: state.extra as PostComposeInitialState?,
|
||||||
initialState: state.extra as PostComposeInitialState?,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'articleEdit',
|
name: 'articleEdit',
|
||||||
@@ -190,12 +189,11 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'explore',
|
name: 'explore',
|
||||||
path: '/',
|
path: '/',
|
||||||
pageBuilder:
|
pageBuilder: (context, state) => CustomTransitionPage(
|
||||||
(context, state) => CustomTransitionPage(
|
key: const ValueKey('explore'),
|
||||||
key: const ValueKey('explore'),
|
child: const ExploreScreen(),
|
||||||
child: const ExploreScreen(),
|
transitionsBuilder: _tabPagesTransitionBuilder,
|
||||||
transitionsBuilder: _tabPagesTransitionBuilder,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'postSearch',
|
name: 'postSearch',
|
||||||
@@ -220,11 +218,6 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
return PostCategoryDetailScreen(slug: slug, isCategory: true);
|
return PostCategoryDetailScreen(slug: slug, isCategory: true);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
GoRoute(
|
|
||||||
name: 'postTags',
|
|
||||||
path: '/posts/tags',
|
|
||||||
builder: (context, state) => const PostTagsListScreen(),
|
|
||||||
),
|
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'postTagDetail',
|
name: 'postTagDetail',
|
||||||
path: '/posts/tags/:slug',
|
path: '/posts/tags/:slug',
|
||||||
@@ -260,12 +253,11 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
|
|
||||||
// Chat tab
|
// Chat tab
|
||||||
ShellRoute(
|
ShellRoute(
|
||||||
pageBuilder:
|
pageBuilder: (context, state, child) => CustomTransitionPage(
|
||||||
(context, state, child) => CustomTransitionPage(
|
key: const ValueKey('chat'),
|
||||||
key: const ValueKey('chat'),
|
child: ChatShellScreen(child: child),
|
||||||
child: ChatShellScreen(child: child),
|
transitionsBuilder: _tabPagesTransitionBuilder,
|
||||||
transitionsBuilder: _tabPagesTransitionBuilder,
|
),
|
||||||
),
|
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'chatList',
|
name: 'chatList',
|
||||||
@@ -303,12 +295,11 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'realmList',
|
name: 'realmList',
|
||||||
path: '/realms',
|
path: '/realms',
|
||||||
pageBuilder:
|
pageBuilder: (context, state) => CustomTransitionPage(
|
||||||
(context, state) => CustomTransitionPage(
|
key: const ValueKey('realms'),
|
||||||
key: const ValueKey('realms'),
|
child: const RealmListScreen(),
|
||||||
child: const RealmListScreen(),
|
transitionsBuilder: _tabPagesTransitionBuilder,
|
||||||
transitionsBuilder: _tabPagesTransitionBuilder,
|
),
|
||||||
),
|
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'realmNew',
|
name: 'realmNew',
|
||||||
@@ -336,12 +327,11 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
|
|
||||||
// Account tab
|
// Account tab
|
||||||
ShellRoute(
|
ShellRoute(
|
||||||
pageBuilder:
|
pageBuilder: (context, state, child) => CustomTransitionPage(
|
||||||
(context, state, child) => CustomTransitionPage(
|
key: const ValueKey('account'),
|
||||||
key: const ValueKey('account'),
|
child: AccountShellScreen(child: child),
|
||||||
child: AccountShellScreen(child: child),
|
transitionsBuilder: _tabPagesTransitionBuilder,
|
||||||
transitionsBuilder: _tabPagesTransitionBuilder,
|
),
|
||||||
),
|
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'account',
|
name: 'account',
|
||||||
@@ -352,8 +342,8 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'stickerMarketplace',
|
name: 'stickerMarketplace',
|
||||||
path: '/stickers',
|
path: '/stickers',
|
||||||
builder:
|
builder: (context, state) =>
|
||||||
(context, state) => const MarketplaceStickersScreen(),
|
const MarketplaceStickersScreen(),
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'stickerPackDetail',
|
name: 'stickerPackDetail',
|
||||||
@@ -368,8 +358,8 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'webFeedMarketplace',
|
name: 'webFeedMarketplace',
|
||||||
path: '/feeds',
|
path: '/feeds',
|
||||||
builder:
|
builder: (context, state) =>
|
||||||
(context, state) => const MarketplaceWebFeedsScreen(),
|
const MarketplaceWebFeedsScreen(),
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'webFeedDetail',
|
name: 'webFeedDetail',
|
||||||
@@ -516,29 +506,25 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerHub',
|
name: 'developerHub',
|
||||||
path: '/developers',
|
path: '/developers',
|
||||||
builder:
|
builder: (context, state) => DeveloperHubScreen(
|
||||||
(context, state) => DeveloperHubScreen(
|
initialPublisherName: state.uri.queryParameters['publisher'],
|
||||||
initialPublisherName:
|
initialProjectId: state.uri.queryParameters['project'],
|
||||||
state.uri.queryParameters['publisher'],
|
),
|
||||||
initialProjectId: state.uri.queryParameters['project'],
|
|
||||||
),
|
|
||||||
routes: [
|
routes: [
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerProjectNew',
|
name: 'developerProjectNew',
|
||||||
path: ':name/projects/new',
|
path: ':name/projects/new',
|
||||||
builder:
|
builder: (context, state) => NewProjectScreen(
|
||||||
(context, state) => NewProjectScreen(
|
publisherName: state.pathParameters['name']!,
|
||||||
publisherName: state.pathParameters['name']!,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerProjectEdit',
|
name: 'developerProjectEdit',
|
||||||
path: ':name/projects/:id/edit',
|
path: ':name/projects/:id/edit',
|
||||||
builder:
|
builder: (context, state) => EditProjectScreen(
|
||||||
(context, state) => EditProjectScreen(
|
publisherName: state.pathParameters['name']!,
|
||||||
publisherName: state.pathParameters['name']!,
|
id: state.pathParameters['id']!,
|
||||||
id: state.pathParameters['id']!,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerProjectDetail',
|
name: 'developerProjectDetail',
|
||||||
@@ -558,22 +544,20 @@ final routerProvider = Provider<GoRouter>((ref) {
|
|||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerAppDetail',
|
name: 'developerAppDetail',
|
||||||
path: 'apps/:appId',
|
path: 'apps/:appId',
|
||||||
builder:
|
builder: (context, state) => AppDetailScreen(
|
||||||
(context, state) => AppDetailScreen(
|
publisherName: state.pathParameters['name']!,
|
||||||
publisherName: state.pathParameters['name']!,
|
projectId: state.pathParameters['projectId']!,
|
||||||
projectId: state.pathParameters['projectId']!,
|
appId: state.pathParameters['appId']!,
|
||||||
appId: state.pathParameters['appId']!,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
GoRoute(
|
GoRoute(
|
||||||
name: 'developerBotDetail',
|
name: 'developerBotDetail',
|
||||||
path: 'bots/:botId',
|
path: 'bots/:botId',
|
||||||
builder:
|
builder: (context, state) => BotDetailScreen(
|
||||||
(context, state) => BotDetailScreen(
|
publisherName: state.pathParameters['name']!,
|
||||||
publisherName: state.pathParameters['name']!,
|
projectId: state.pathParameters['projectId']!,
|
||||||
projectId: state.pathParameters['projectId']!,
|
botId: state.pathParameters['botId']!,
|
||||||
botId: state.pathParameters['botId']!,
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -57,9 +57,7 @@ class AccountScreen extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final user = ref.watch(userInfoProvider);
|
final user = ref.watch(userInfoProvider);
|
||||||
final notificationUnreadCount = ref.watch(
|
final notificationUnreadCount = ref.watch(notificationUnreadCountProvider);
|
||||||
notificationUnreadCountNotifierProvider,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (user.value == null || user.value == null) {
|
if (user.value == null || user.value == null) {
|
||||||
return _UnauthorizedAccountScreen();
|
return _UnauthorizedAccountScreen();
|
||||||
|
|||||||
@@ -4,9 +4,11 @@ import 'package:gap/gap.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/models/account.dart';
|
import 'package:island/models/account.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
|
import 'package:island/services/time.dart';
|
||||||
|
import 'package:island/widgets/paging/pagination_list.dart';
|
||||||
import 'package:material_symbols_icons/material_symbols_icons.dart';
|
import 'package:material_symbols_icons/material_symbols_icons.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.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:styled_widget/styled_widget.dart';
|
||||||
|
|
||||||
part 'credits.g.dart';
|
part 'credits.g.dart';
|
||||||
@@ -21,40 +23,34 @@ Future<double> socialCredits(Ref ref) async {
|
|||||||
return response.data?.toDouble() ?? 0.0;
|
return response.data?.toDouble() ?? 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
final socialCreditHistoryNotifierProvider = AsyncNotifierProvider.autoDispose(
|
||||||
class SocialCreditHistoryNotifier extends _$SocialCreditHistoryNotifier
|
SocialCreditHistoryNotifier.new,
|
||||||
with CursorPagingNotifierMixin<SnSocialCreditRecord> {
|
);
|
||||||
static const int _pageSize = 20;
|
|
||||||
|
class SocialCreditHistoryNotifier
|
||||||
|
extends AsyncNotifier<List<SnSocialCreditRecord>>
|
||||||
|
with AsyncPaginationController<SnSocialCreditRecord> {
|
||||||
|
static const int pageSize = 20;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<CursorPagingData<SnSocialCreditRecord>> build() => fetch(cursor: null);
|
Future<List<SnSocialCreditRecord>> fetch() async {
|
||||||
|
|
||||||
@override
|
|
||||||
Future<CursorPagingData<SnSocialCreditRecord>> fetch({
|
|
||||||
required String? cursor,
|
|
||||||
}) async {
|
|
||||||
final client = ref.read(apiClientProvider);
|
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(
|
final response = await client.get(
|
||||||
'/pass/accounts/me/credits/history',
|
'/pass/accounts/me/credits/history',
|
||||||
queryParameters: queryParams,
|
queryParameters: queryParams,
|
||||||
);
|
);
|
||||||
final total = int.parse(response.headers.value('X-Total') ?? '0');
|
|
||||||
final List<dynamic> data = response.data;
|
|
||||||
final records =
|
|
||||||
data.map((json) => SnSocialCreditRecord.fromJson(json)).toList();
|
|
||||||
|
|
||||||
final hasMore = offset + records.length < total;
|
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
|
||||||
final nextCursor = hasMore ? (offset + records.length).toString() : null;
|
|
||||||
|
|
||||||
return CursorPagingData(
|
final records = response.data
|
||||||
items: records,
|
.map((json) => SnSocialCreditRecord.fromJson(json))
|
||||||
hasMore: hasMore,
|
.cast<SnSocialCreditRecord>()
|
||||||
nextCursor: nextCursor,
|
.toList();
|
||||||
);
|
|
||||||
|
return records;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,77 +67,80 @@ class SocialCreditsTab extends HookConsumerWidget {
|
|||||||
margin: const EdgeInsets.only(left: 16, right: 16, top: 8),
|
margin: const EdgeInsets.only(left: 16, right: 16, top: 8),
|
||||||
child: socialCredits
|
child: socialCredits
|
||||||
.when(
|
.when(
|
||||||
data:
|
data: (credits) => Stack(
|
||||||
(credits) => Stack(
|
children: [
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Column(
|
Text(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
credits < 100
|
||||||
children: [
|
? 'socialCreditsLevelPoor'.tr()
|
||||||
Text(
|
: credits < 150
|
||||||
credits < 100
|
? 'socialCreditsLevelNormal'.tr()
|
||||||
? 'socialCreditsLevelPoor'.tr()
|
: credits < 200
|
||||||
: credits < 150
|
? 'socialCreditsLevelGood'.tr()
|
||||||
? 'socialCreditsLevelNormal'.tr()
|
: 'socialCreditsLevelExcellent'.tr(),
|
||||||
: credits < 200
|
).tr().bold().fontSize(20),
|
||||||
? 'socialCreditsLevelGood'.tr()
|
Text('${credits.toStringAsFixed(2)} pts').fontSize(14),
|
||||||
: 'socialCreditsLevelExcellent'.tr(),
|
const Gap(8),
|
||||||
).tr().bold().fontSize(20),
|
LinearProgressIndicator(value: credits / 200),
|
||||||
Text(
|
|
||||||
'${credits.toStringAsFixed(2)} pts',
|
|
||||||
).fontSize(14),
|
|
||||||
const Gap(8),
|
|
||||||
LinearProgressIndicator(value: credits / 200),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
right: 0,
|
|
||||||
top: 0,
|
|
||||||
child: IconButton(
|
|
||||||
onPressed: () {},
|
|
||||||
icon: const Icon(Symbols.info),
|
|
||||||
tooltip: 'socialCreditsDescription'.tr(),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
Positioned(
|
||||||
|
right: 0,
|
||||||
|
top: 0,
|
||||||
|
child: IconButton(
|
||||||
|
onPressed: () {},
|
||||||
|
icon: const Icon(Symbols.info),
|
||||||
|
tooltip: 'socialCreditsDescription'.tr(),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
error: (_, _) => Text('Error loading credits'),
|
error: (_, _) => Text('Error loading credits'),
|
||||||
loading: () => const LinearProgressIndicator(),
|
loading: () => const LinearProgressIndicator(),
|
||||||
)
|
)
|
||||||
.padding(horizontal: 20, vertical: 16),
|
.padding(horizontal: 20, vertical: 16),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PagingHelperView(
|
child: PaginationList(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
provider: socialCreditHistoryNotifierProvider,
|
provider: socialCreditHistoryNotifierProvider,
|
||||||
futureRefreshable: socialCreditHistoryNotifierProvider.future,
|
notifier: socialCreditHistoryNotifierProvider.notifier,
|
||||||
notifierRefreshable: socialCreditHistoryNotifierProvider.notifier,
|
itemBuilder: (context, idx, record) {
|
||||||
contentBuilder:
|
final isExpired =
|
||||||
(data, widgetCount, endItemView) => ListView.builder(
|
record.expiredAt != null &&
|
||||||
padding: EdgeInsets.zero,
|
record.expiredAt!.isBefore(DateTime.now());
|
||||||
itemCount: widgetCount,
|
return ListTile(
|
||||||
itemBuilder: (context, index) {
|
contentPadding: const EdgeInsets.symmetric(horizontal: 24),
|
||||||
if (index == widgetCount - 1) {
|
title: Text(
|
||||||
return endItemView;
|
record.reason,
|
||||||
}
|
style: isExpired
|
||||||
final record = data.items[index];
|
? TextStyle(
|
||||||
return ListTile(
|
decoration: TextDecoration.lineThrough,
|
||||||
contentPadding: const EdgeInsets.symmetric(
|
color: Theme.of(
|
||||||
horizontal: 24,
|
context,
|
||||||
),
|
).colorScheme.onSurface.withOpacity(0.8),
|
||||||
title: Text(record.reason),
|
)
|
||||||
subtitle: Text(
|
: null,
|
||||||
DateFormat.yMMMd().format(record.createdAt),
|
|
||||||
),
|
|
||||||
trailing: Text(
|
|
||||||
record.delta > 0
|
|
||||||
? '+${record.delta}'
|
|
||||||
: '${record.delta}',
|
|
||||||
style: TextStyle(
|
|
||||||
color: record.delta > 0 ? Colors.green : Colors.red,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
|
subtitle: Row(
|
||||||
|
spacing: 4,
|
||||||
|
children: [
|
||||||
|
Text(record.createdAt.formatSystem()),
|
||||||
|
Text('to'),
|
||||||
|
if (record.expiredAt != null)
|
||||||
|
Text(record.expiredAt!.formatSystem()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
trailing: Text(
|
||||||
|
record.delta > 0 ? '+${record.delta}' : '${record.delta}',
|
||||||
|
style: TextStyle(
|
||||||
|
color: record.delta > 0 ? Colors.green : Colors.red,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -6,44 +6,38 @@ part of 'credits.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$socialCreditsHash() => r'a0284583e94bc97285c689ac2bc018536932da69';
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
/// See also [socialCredits].
|
|
||||||
@ProviderFor(socialCredits)
|
@ProviderFor(socialCredits)
|
||||||
final socialCreditsProvider = AutoDisposeFutureProvider<double>.internal(
|
const socialCreditsProvider = SocialCreditsProvider._();
|
||||||
socialCredits,
|
|
||||||
name: r'socialCreditsProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$socialCreditsHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
final class SocialCreditsProvider
|
||||||
// ignore: unused_element
|
extends $FunctionalProvider<AsyncValue<double>, double, FutureOr<double>>
|
||||||
typedef SocialCreditsRef = AutoDisposeFutureProviderRef<double>;
|
with $FutureModifier<double>, $FutureProvider<double> {
|
||||||
String _$socialCreditHistoryNotifierHash() =>
|
const SocialCreditsProvider._()
|
||||||
r'3e87af246cc5dc72a1f3a87b81d1c87169bdfb5b';
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'socialCreditsProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [SocialCreditHistoryNotifier].
|
@override
|
||||||
@ProviderFor(SocialCreditHistoryNotifier)
|
String debugGetCreateSourceHash() => _$socialCreditsHash();
|
||||||
final socialCreditHistoryNotifierProvider = AutoDisposeAsyncNotifierProvider<
|
|
||||||
SocialCreditHistoryNotifier,
|
|
||||||
CursorPagingData<SnSocialCreditRecord>
|
|
||||||
>.internal(
|
|
||||||
SocialCreditHistoryNotifier.new,
|
|
||||||
name: r'socialCreditHistoryNotifierProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$socialCreditHistoryNotifierHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$SocialCreditHistoryNotifier =
|
@$internal
|
||||||
AutoDisposeAsyncNotifier<CursorPagingData<SnSocialCreditRecord>>;
|
@override
|
||||||
// ignore_for_file: type=lint
|
$FutureProviderElement<double> $createElement($ProviderPointer pointer) =>
|
||||||
// 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
|
$FutureProviderElement(pointer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<double> create(Ref ref) {
|
||||||
|
return socialCredits(ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$socialCreditsHash() => r'a0284583e94bc97285c689ac2bc018536932da69';
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:gap/gap.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/models/account.dart';
|
import 'package:island/models/account.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
import 'package:island/screens/account/credits.dart';
|
import 'package:island/screens/account/credits.dart';
|
||||||
import 'package:island/services/time.dart';
|
import 'package:island/services/time.dart';
|
||||||
@@ -10,46 +11,36 @@ import 'package:island/widgets/account/leveling_progress.dart';
|
|||||||
import 'package:island/widgets/account/stellar_program_tab.dart';
|
import 'package:island/widgets/account/stellar_program_tab.dart';
|
||||||
import 'package:island/widgets/app_scaffold.dart';
|
import 'package:island/widgets/app_scaffold.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:island/widgets/paging/pagination_list.dart';
|
||||||
import 'package:riverpod_paging_utils/riverpod_paging_utils.dart';
|
|
||||||
import 'package:styled_widget/styled_widget.dart';
|
import 'package:styled_widget/styled_widget.dart';
|
||||||
|
|
||||||
part 'leveling.g.dart';
|
final levelingHistoryNotifierProvider = AsyncNotifierProvider.autoDispose(
|
||||||
|
LevelingHistoryNotifier.new,
|
||||||
|
);
|
||||||
|
|
||||||
@riverpod
|
class LevelingHistoryNotifier extends AsyncNotifier<List<SnExperienceRecord>>
|
||||||
class LevelingHistoryNotifier extends _$LevelingHistoryNotifier
|
with AsyncPaginationController<SnExperienceRecord> {
|
||||||
with CursorPagingNotifierMixin<SnExperienceRecord> {
|
static const int pageSize = 20;
|
||||||
static const int _pageSize = 20;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<CursorPagingData<SnExperienceRecord>> build() => fetch(cursor: null);
|
Future<List<SnExperienceRecord>> fetch() async {
|
||||||
|
|
||||||
@override
|
|
||||||
Future<CursorPagingData<SnExperienceRecord>> fetch({
|
|
||||||
required String? cursor,
|
|
||||||
}) async {
|
|
||||||
final client = ref.read(apiClientProvider);
|
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(
|
final response = await client.get(
|
||||||
'/pass/accounts/me/leveling',
|
'/pass/accounts/me/leveling',
|
||||||
queryParameters: queryParams,
|
queryParameters: queryParams,
|
||||||
);
|
);
|
||||||
final total = int.parse(response.headers.value('X-Total') ?? '0');
|
|
||||||
final List<dynamic> data = response.data;
|
|
||||||
final records =
|
|
||||||
data.map((json) => SnExperienceRecord.fromJson(json)).toList();
|
|
||||||
|
|
||||||
final hasMore = offset + records.length < total;
|
totalCount = int.parse(response.headers.value('X-Total') ?? '0');
|
||||||
final nextCursor = hasMore ? (offset + records.length).toString() : null;
|
|
||||||
|
|
||||||
return CursorPagingData(
|
final List<SnExperienceRecord> records = response.data
|
||||||
items: records,
|
.map((json) => SnExperienceRecord.fromJson(json))
|
||||||
hasMore: hasMore,
|
.cast<SnExperienceRecord>()
|
||||||
nextCursor: nextCursor,
|
.toList();
|
||||||
);
|
|
||||||
|
return records;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,8 +161,9 @@ class LevelingScreen extends HookConsumerWidget {
|
|||||||
stopIndicatorRadius: 0,
|
stopIndicatorRadius: 0,
|
||||||
trackGap: 0,
|
trackGap: 0,
|
||||||
color: Theme.of(context).colorScheme.primary,
|
color: Theme.of(context).colorScheme.primary,
|
||||||
backgroundColor:
|
backgroundColor: Theme.of(
|
||||||
Theme.of(context).colorScheme.surfaceContainerHigh,
|
context,
|
||||||
|
).colorScheme.surfaceContainerHigh,
|
||||||
borderRadius: BorderRadius.circular(32),
|
borderRadius: BorderRadius.circular(32),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -189,53 +181,40 @@ class LevelingScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SliverGap(8),
|
const SliverGap(8),
|
||||||
PagingHelperSliverView(
|
PaginationList(
|
||||||
provider: levelingHistoryNotifierProvider,
|
provider: levelingHistoryNotifierProvider,
|
||||||
futureRefreshable: levelingHistoryNotifierProvider.future,
|
notifier: levelingHistoryNotifierProvider.notifier,
|
||||||
notifierRefreshable: levelingHistoryNotifierProvider.notifier,
|
isRefreshable: false,
|
||||||
contentBuilder:
|
isSliver: true,
|
||||||
(data, widgetCount, endItemView) => SliverList.builder(
|
itemBuilder: (context, idx, record) => ListTile(
|
||||||
itemCount: widgetCount,
|
title: Column(
|
||||||
itemBuilder: (context, index) {
|
mainAxisSize: MainAxisSize.min,
|
||||||
if (index == widgetCount - 1) {
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
return endItemView;
|
children: [
|
||||||
}
|
Text(record.reason),
|
||||||
final record = data.items[index];
|
Row(
|
||||||
return ListTile(
|
spacing: 4,
|
||||||
title: Column(
|
children: [
|
||||||
mainAxisSize: MainAxisSize.min,
|
Text(
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
record.createdAt.formatRelative(context),
|
||||||
children: [
|
).fontSize(13),
|
||||||
Text(record.reason),
|
Text('·').fontSize(13).bold(),
|
||||||
Row(
|
Text(record.createdAt.formatSystem()).fontSize(13),
|
||||||
spacing: 4,
|
],
|
||||||
children: [
|
).opacity(0.8),
|
||||||
Text(
|
],
|
||||||
record.createdAt.formatRelative(context),
|
),
|
||||||
).fontSize(13),
|
subtitle: Row(
|
||||||
Text('·').fontSize(13).bold(),
|
spacing: 8,
|
||||||
Text(
|
children: [
|
||||||
record.createdAt.formatSystem(),
|
Text('${record.delta > 0 ? '+' : ''}${record.delta} EXP'),
|
||||||
).fontSize(13),
|
if (record.bonusMultiplier != 1.0)
|
||||||
],
|
Text('x${record.bonusMultiplier}'),
|
||||||
).opacity(0.8),
|
],
|
||||||
],
|
),
|
||||||
),
|
minTileHeight: 56,
|
||||||
subtitle: Row(
|
contentPadding: EdgeInsets.symmetric(horizontal: 4),
|
||||||
spacing: 8,
|
),
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
'${record.delta > 0 ? '+' : ''}${record.delta} EXP',
|
|
||||||
),
|
|
||||||
if (record.bonusMultiplier != 1.0)
|
|
||||||
Text('x${record.bonusMultiplier}'),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
minTileHeight: 56,
|
|
||||||
contentPadding: EdgeInsets.symmetric(horizontal: 4),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
|
|
||||||
SliverGap(20),
|
SliverGap(20),
|
||||||
@@ -267,11 +246,10 @@ class LevelStairsPainter extends CustomPainter {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void paint(Canvas canvas, Size size) {
|
void paint(Canvas canvas, Size size) {
|
||||||
final paint =
|
final paint = Paint()
|
||||||
Paint()
|
..color = surfaceColor.withOpacity(0.2)
|
||||||
..color = surfaceColor.withOpacity(0.2)
|
..strokeWidth = 1.5
|
||||||
..strokeWidth = 1.5
|
..style = PaintingStyle.stroke;
|
||||||
..style = PaintingStyle.stroke;
|
|
||||||
|
|
||||||
// Draw connecting lines between stairs
|
// Draw connecting lines between stairs
|
||||||
for (int i = 0; i < totalLevels - 1; i++) {
|
for (int i = 0; i < totalLevels - 1; i++) {
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'leveling.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// RiverpodGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
String _$levelingHistoryNotifierHash() =>
|
|
||||||
r'de51012e1590ac46388b6f3f2050b21cb96698d1';
|
|
||||||
|
|
||||||
/// See also [LevelingHistoryNotifier].
|
|
||||||
@ProviderFor(LevelingHistoryNotifier)
|
|
||||||
final levelingHistoryNotifierProvider = AutoDisposeAsyncNotifierProvider<
|
|
||||||
LevelingHistoryNotifier,
|
|
||||||
CursorPagingData<SnExperienceRecord>
|
|
||||||
>.internal(
|
|
||||||
LevelingHistoryNotifier.new,
|
|
||||||
name: r'levelingHistoryNotifierProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$levelingHistoryNotifierHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$LevelingHistoryNotifier =
|
|
||||||
AutoDisposeAsyncNotifier<CursorPagingData<SnExperienceRecord>>;
|
|
||||||
// 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
|
|
||||||
@@ -6,64 +6,129 @@ part of 'account_settings.dart';
|
|||||||
// RiverpodGenerator
|
// 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';
|
String _$authFactorsHash() => r'ed87d7dbd421fef0a5620416727c3dc598c97ef5';
|
||||||
|
|
||||||
/// See also [authFactors].
|
@ProviderFor(contactMethods)
|
||||||
@ProviderFor(authFactors)
|
const contactMethodsProvider = ContactMethodsProvider._();
|
||||||
final authFactorsProvider =
|
|
||||||
AutoDisposeFutureProvider<List<SnAuthFactor>>.internal(
|
final class ContactMethodsProvider
|
||||||
authFactors,
|
extends
|
||||||
name: r'authFactorsProvider',
|
$FunctionalProvider<
|
||||||
debugGetCreateSourceHash:
|
AsyncValue<List<SnContactMethod>>,
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
List<SnContactMethod>,
|
||||||
? null
|
FutureOr<List<SnContactMethod>>
|
||||||
: _$authFactorsHash,
|
>
|
||||||
dependencies: null,
|
with
|
||||||
allTransitiveDependencies: null,
|
$FutureModifier<List<SnContactMethod>>,
|
||||||
);
|
$FutureProvider<List<SnContactMethod>> {
|
||||||
|
const ContactMethodsProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'contactMethodsProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$contactMethodsHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
$FutureProviderElement<List<SnContactMethod>> $createElement(
|
||||||
|
$ProviderPointer pointer,
|
||||||
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<List<SnContactMethod>> create(Ref ref) {
|
||||||
|
return contactMethods(ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
typedef AuthFactorsRef = AutoDisposeFutureProviderRef<List<SnAuthFactor>>;
|
|
||||||
String _$contactMethodsHash() => r'1d3d03e9ffbf36126236558ead22cb7d88bb9cb2';
|
String _$contactMethodsHash() => r'1d3d03e9ffbf36126236558ead22cb7d88bb9cb2';
|
||||||
|
|
||||||
/// See also [contactMethods].
|
@ProviderFor(accountConnections)
|
||||||
@ProviderFor(contactMethods)
|
const accountConnectionsProvider = AccountConnectionsProvider._();
|
||||||
final contactMethodsProvider =
|
|
||||||
AutoDisposeFutureProvider<List<SnContactMethod>>.internal(
|
final class AccountConnectionsProvider
|
||||||
contactMethods,
|
extends
|
||||||
name: r'contactMethodsProvider',
|
$FunctionalProvider<
|
||||||
debugGetCreateSourceHash:
|
AsyncValue<List<SnAccountConnection>>,
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
List<SnAccountConnection>,
|
||||||
? null
|
FutureOr<List<SnAccountConnection>>
|
||||||
: _$contactMethodsHash,
|
>
|
||||||
dependencies: null,
|
with
|
||||||
allTransitiveDependencies: null,
|
$FutureModifier<List<SnAccountConnection>>,
|
||||||
);
|
$FutureProvider<List<SnAccountConnection>> {
|
||||||
|
const AccountConnectionsProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'accountConnectionsProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
String debugGetCreateSourceHash() => _$accountConnectionsHash();
|
||||||
|
|
||||||
|
@$internal
|
||||||
|
@override
|
||||||
|
$FutureProviderElement<List<SnAccountConnection>> $createElement(
|
||||||
|
$ProviderPointer pointer,
|
||||||
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<List<SnAccountConnection>> create(Ref ref) {
|
||||||
|
return accountConnections(ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
typedef ContactMethodsRef = AutoDisposeFutureProviderRef<List<SnContactMethod>>;
|
|
||||||
String _$accountConnectionsHash() =>
|
String _$accountConnectionsHash() =>
|
||||||
r'33c10b98962ede6c428d4028c0d5f2f12ff0eb22';
|
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
@@ -3,16 +3,17 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/pods/paging.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
import 'package:island/widgets/account/account_pfc.dart';
|
import 'package:island/widgets/account/account_pfc.dart';
|
||||||
import 'package:island/widgets/account/account_picker.dart';
|
import 'package:island/widgets/account/account_picker.dart';
|
||||||
import 'package:island/widgets/alert.dart';
|
import 'package:island/widgets/alert.dart';
|
||||||
import 'package:island/widgets/app_scaffold.dart';
|
import 'package:island/widgets/app_scaffold.dart';
|
||||||
import 'package:island/widgets/content/cloud_files.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:material_symbols_icons/symbols.dart';
|
||||||
import 'package:relative_time/relative_time.dart';
|
import 'package:relative_time/relative_time.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.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/models/relationship.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
|
|
||||||
@@ -28,39 +29,30 @@ Future<List<SnRelationship>> sentFriendRequest(Ref ref) async {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
final relationshipListNotifierProvider = AsyncNotifierProvider.autoDispose(
|
||||||
class RelationshipListNotifier extends _$RelationshipListNotifier
|
RelationshipListNotifier.new,
|
||||||
with CursorPagingNotifierMixin<SnRelationship> {
|
);
|
||||||
@override
|
|
||||||
Future<CursorPagingData<SnRelationship>> build() => fetch(cursor: null);
|
|
||||||
|
|
||||||
|
class RelationshipListNotifier extends AsyncNotifier<List<SnRelationship>>
|
||||||
|
with AsyncPaginationController<SnRelationship> {
|
||||||
@override
|
@override
|
||||||
Future<CursorPagingData<SnRelationship>> fetch({
|
Future<List<SnRelationship>> fetch() async {
|
||||||
required String? cursor,
|
|
||||||
}) async {
|
|
||||||
final client = ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
final offset = cursor == null ? 0 : int.parse(cursor);
|
|
||||||
final take = 20;
|
final take = 20;
|
||||||
|
|
||||||
final response = await client.get(
|
final response = await client.get(
|
||||||
'/pass/relationships',
|
'/pass/relationships',
|
||||||
queryParameters: {'offset': offset, 'take': take},
|
queryParameters: {'offset': fetchedCount.toString(), 'take': take},
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<SnRelationship> items =
|
final List<SnRelationship> items = (response.data as List)
|
||||||
(response.data as List)
|
.map((e) => SnRelationship.fromJson(e as Map<String, dynamic>))
|
||||||
.map((e) => SnRelationship.fromJson(e as Map<String, dynamic>))
|
.cast<SnRelationship>()
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final total = int.tryParse(response.headers['x-total']?.first ?? '') ?? 0;
|
totalCount = int.tryParse(response.headers['x-total']?.first ?? '') ?? 0;
|
||||||
final hasMore = offset + items.length < total;
|
|
||||||
final nextCursor = hasMore ? (offset + items.length).toString() : null;
|
|
||||||
|
|
||||||
return CursorPagingData(
|
return items;
|
||||||
items: items,
|
|
||||||
hasMore: hasMore,
|
|
||||||
nextCursor: nextCursor,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,8 +82,9 @@ class RelationshipListTile extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final account =
|
final account = showRelatedAccount
|
||||||
showRelatedAccount ? relationship.related : relationship.account;
|
? relationship.related
|
||||||
|
: relationship.account;
|
||||||
final isPending =
|
final isPending =
|
||||||
relationship.status == 0 && relationship.relatedId == currentUserId;
|
relationship.status == 0 && relationship.relatedId == currentUserId;
|
||||||
final isWaiting =
|
final isWaiting =
|
||||||
@@ -145,64 +138,56 @@ class RelationshipListTile extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
subtitle: Text('@${account.name}'),
|
subtitle: Text('@${account.name}'),
|
||||||
trailing:
|
trailing: showActions
|
||||||
showActions
|
? Row(
|
||||||
? Row(
|
mainAxisSize: MainAxisSize.min,
|
||||||
mainAxisSize: MainAxisSize.min,
|
children: [
|
||||||
children: [
|
if (isPending && onAccept != null)
|
||||||
if (isPending && onAccept != null)
|
IconButton(
|
||||||
IconButton(
|
padding: EdgeInsets.zero,
|
||||||
padding: EdgeInsets.zero,
|
onPressed: submitting ? null : onAccept,
|
||||||
onPressed: submitting ? null : onAccept,
|
icon: const Icon(Symbols.check),
|
||||||
icon: const Icon(Symbols.check),
|
),
|
||||||
),
|
if (isPending && onDecline != null)
|
||||||
if (isPending && onDecline != null)
|
IconButton(
|
||||||
IconButton(
|
padding: EdgeInsets.zero,
|
||||||
padding: EdgeInsets.zero,
|
onPressed: submitting ? null : onDecline,
|
||||||
onPressed: submitting ? null : onDecline,
|
icon: const Icon(Symbols.close),
|
||||||
icon: const Icon(Symbols.close),
|
),
|
||||||
),
|
if (isWaiting && onCancel != null)
|
||||||
if (isWaiting && onCancel != null)
|
IconButton(
|
||||||
IconButton(
|
padding: EdgeInsets.zero,
|
||||||
padding: EdgeInsets.zero,
|
onPressed: submitting ? null : onCancel,
|
||||||
onPressed: submitting ? null : onCancel,
|
icon: const Icon(Symbols.close),
|
||||||
icon: const Icon(Symbols.close),
|
),
|
||||||
),
|
if (isEstablished && onUpdateStatus != null)
|
||||||
if (isEstablished && onUpdateStatus != null)
|
PopupMenuButton(
|
||||||
PopupMenuButton(
|
padding: EdgeInsets.zero,
|
||||||
padding: EdgeInsets.zero,
|
icon: const Icon(Symbols.more_vert),
|
||||||
icon: const Icon(Symbols.more_vert),
|
itemBuilder: (context) => [
|
||||||
itemBuilder:
|
if (relationship.status >= 100) // If friend
|
||||||
(context) => [
|
PopupMenuItem(
|
||||||
if (relationship.status >= 100) // If friend
|
child: ListTile(
|
||||||
PopupMenuItem(
|
leading: const Icon(Symbols.block),
|
||||||
child: ListTile(
|
title: Text('blockUser').tr(),
|
||||||
leading: const Icon(Symbols.block),
|
contentPadding: EdgeInsets.zero,
|
||||||
title: Text('blockUser').tr(),
|
),
|
||||||
contentPadding: EdgeInsets.zero,
|
onTap: () => onUpdateStatus?.call(relationship, -100),
|
||||||
),
|
)
|
||||||
onTap:
|
else if (relationship.status <= -100) // If blocked
|
||||||
() => onUpdateStatus?.call(
|
PopupMenuItem(
|
||||||
relationship,
|
child: ListTile(
|
||||||
-100,
|
leading: const Icon(Symbols.person_add),
|
||||||
),
|
title: Text('unblockUser').tr(),
|
||||||
)
|
contentPadding: EdgeInsets.zero,
|
||||||
else if (relationship.status <= -100) // If blocked
|
),
|
||||||
PopupMenuItem(
|
onTap: () => onUpdateStatus?.call(relationship, 100),
|
||||||
child: ListTile(
|
),
|
||||||
leading: const Icon(Symbols.person_add),
|
],
|
||||||
title: Text('unblockUser').tr(),
|
),
|
||||||
contentPadding: EdgeInsets.zero,
|
],
|
||||||
),
|
)
|
||||||
onTap:
|
: null,
|
||||||
() =>
|
|
||||||
onUpdateStatus?.call(relationship, 100),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
: null,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -242,7 +227,7 @@ class RelationshipScreen extends HookConsumerWidget {
|
|||||||
await client.post(
|
await client.post(
|
||||||
'/pass/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
|
'/pass/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
|
||||||
);
|
);
|
||||||
relationshipNotifier.forceRefresh();
|
relationshipNotifier.refresh();
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
if (isAccept) {
|
if (isAccept) {
|
||||||
showSnackBar(
|
showSnackBar(
|
||||||
@@ -270,7 +255,7 @@ class RelationshipScreen extends HookConsumerWidget {
|
|||||||
'/pass/relationships/${relationship.accountId}',
|
'/pass/relationships/${relationship.accountId}',
|
||||||
data: {'status': newStatus},
|
data: {'status': newStatus},
|
||||||
);
|
);
|
||||||
relationshipNotifier.forceRefresh();
|
relationshipNotifier.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
final user = ref.watch(userInfoProvider);
|
final user = ref.watch(userInfoProvider);
|
||||||
@@ -305,32 +290,21 @@ class RelationshipScreen extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
const Divider(height: 1),
|
const Divider(height: 1),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: PagingHelperView(
|
child: PaginationList(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
provider: relationshipListNotifierProvider,
|
provider: relationshipListNotifierProvider,
|
||||||
futureRefreshable: relationshipListNotifierProvider.future,
|
notifier: relationshipListNotifierProvider.notifier,
|
||||||
notifierRefreshable: relationshipListNotifierProvider.notifier,
|
itemBuilder: (context, index, relationship) {
|
||||||
contentBuilder:
|
return RelationshipListTile(
|
||||||
(data, widgetCount, endItemView) => ListView.builder(
|
relationship: relationship,
|
||||||
padding: EdgeInsets.zero,
|
submitting: submitting.value,
|
||||||
itemCount: widgetCount,
|
onAccept: () => handleFriendRequest(relationship, true),
|
||||||
itemBuilder: (context, index) {
|
onDecline: () => handleFriendRequest(relationship, false),
|
||||||
if (index == widgetCount - 1) {
|
currentUserId: user.value?.id,
|
||||||
return endItemView;
|
showRelatedAccount: false,
|
||||||
}
|
onUpdateStatus: updateRelationship,
|
||||||
|
);
|
||||||
final relationship = data.items[index];
|
},
|
||||||
return RelationshipListTile(
|
|
||||||
relationship: relationship,
|
|
||||||
submitting: submitting.value,
|
|
||||||
onAccept: () => handleFriendRequest(relationship, true),
|
|
||||||
onDecline:
|
|
||||||
() => handleFriendRequest(relationship, false),
|
|
||||||
currentUserId: user.value?.id,
|
|
||||||
showRelatedAccount: false,
|
|
||||||
onUpdateStatus: updateRelationship,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -399,28 +373,26 @@ class _SentFriendRequestsSheet extends HookConsumerWidget {
|
|||||||
const Divider(height: 1),
|
const Divider(height: 1),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: requests.when(
|
child: requests.when(
|
||||||
data:
|
data: (items) => items.isEmpty
|
||||||
(items) =>
|
? Center(
|
||||||
items.isEmpty
|
child: Text(
|
||||||
? Center(
|
'friendSentRequestEmpty'.tr(),
|
||||||
child: Text(
|
textAlign: TextAlign.center,
|
||||||
'friendSentRequestEmpty'.tr(),
|
),
|
||||||
textAlign: TextAlign.center,
|
)
|
||||||
),
|
: ListView.builder(
|
||||||
)
|
shrinkWrap: true,
|
||||||
: ListView.builder(
|
itemCount: items.length,
|
||||||
shrinkWrap: true,
|
itemBuilder: (context, index) {
|
||||||
itemCount: items.length,
|
final request = items[index];
|
||||||
itemBuilder: (context, index) {
|
return RelationshipListTile(
|
||||||
final request = items[index];
|
relationship: request,
|
||||||
return RelationshipListTile(
|
onCancel: () => cancelRequest(request),
|
||||||
relationship: request,
|
currentUserId: user.value?.id,
|
||||||
onCancel: () => cancelRequest(request),
|
showRelatedAccount: true,
|
||||||
currentUserId: user.value?.id,
|
);
|
||||||
showRelatedAccount: true,
|
},
|
||||||
);
|
),
|
||||||
},
|
|
||||||
),
|
|
||||||
loading: () => const Center(child: CircularProgressIndicator()),
|
loading: () => const Center(child: CircularProgressIndicator()),
|
||||||
error: (error, stack) => Center(child: Text('Error: $error')),
|
error: (error, stack) => Center(child: Text('Error: $error')),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -6,46 +6,46 @@ part of 'relationship.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$sentFriendRequestHash() => r'0c52813eb6f86c05f6e0b1e4e840d0d9c350aa9e';
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
/// See also [sentFriendRequest].
|
|
||||||
@ProviderFor(sentFriendRequest)
|
@ProviderFor(sentFriendRequest)
|
||||||
final sentFriendRequestProvider =
|
const sentFriendRequestProvider = SentFriendRequestProvider._();
|
||||||
AutoDisposeFutureProvider<List<SnRelationship>>.internal(
|
|
||||||
sentFriendRequest,
|
|
||||||
name: r'sentFriendRequestProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$sentFriendRequestHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
final class SentFriendRequestProvider
|
||||||
// ignore: unused_element
|
extends
|
||||||
typedef SentFriendRequestRef =
|
$FunctionalProvider<
|
||||||
AutoDisposeFutureProviderRef<List<SnRelationship>>;
|
AsyncValue<List<SnRelationship>>,
|
||||||
String _$relationshipListNotifierHash() =>
|
List<SnRelationship>,
|
||||||
r'fc46920256f7c48445c00652165e879890f2c9a3';
|
FutureOr<List<SnRelationship>>
|
||||||
|
>
|
||||||
|
with
|
||||||
|
$FutureModifier<List<SnRelationship>>,
|
||||||
|
$FutureProvider<List<SnRelationship>> {
|
||||||
|
const SentFriendRequestProvider._()
|
||||||
|
: super(
|
||||||
|
from: null,
|
||||||
|
argument: null,
|
||||||
|
retry: null,
|
||||||
|
name: r'sentFriendRequestProvider',
|
||||||
|
isAutoDispose: true,
|
||||||
|
dependencies: null,
|
||||||
|
$allTransitiveDependencies: null,
|
||||||
|
);
|
||||||
|
|
||||||
/// See also [RelationshipListNotifier].
|
@override
|
||||||
@ProviderFor(RelationshipListNotifier)
|
String debugGetCreateSourceHash() => _$sentFriendRequestHash();
|
||||||
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,
|
|
||||||
);
|
|
||||||
|
|
||||||
typedef _$RelationshipListNotifier =
|
@$internal
|
||||||
AutoDisposeAsyncNotifier<CursorPagingData<SnRelationship>>;
|
@override
|
||||||
// ignore_for_file: type=lint
|
$FutureProviderElement<List<SnRelationship>> $createElement(
|
||||||
// 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
|
$ProviderPointer pointer,
|
||||||
|
) => $FutureProviderElement(pointer);
|
||||||
|
|
||||||
|
@override
|
||||||
|
FutureOr<List<SnRelationship>> create(Ref ref) {
|
||||||
|
return sentFriendRequest(ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String _$sentFriendRequestHash() => r'0c52813eb6f86c05f6e0b1e4e840d0d9c350aa9e';
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
|
|||||||
@@ -6,21 +6,38 @@ part of 'captcha.config.dart';
|
|||||||
// RiverpodGenerator
|
// RiverpodGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
String _$captchaUrlHash() => r'5d59de4f26a0544bf4fbd5209943f0b111959ce6';
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
// ignore_for_file: type=lint, type=warning
|
||||||
|
|
||||||
/// See also [captchaUrl].
|
|
||||||
@ProviderFor(captchaUrl)
|
@ProviderFor(captchaUrl)
|
||||||
final captchaUrlProvider = AutoDisposeFutureProvider<String>.internal(
|
const captchaUrlProvider = CaptchaUrlProvider._();
|
||||||
captchaUrl,
|
|
||||||
name: r'captchaUrlProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product') ? null : _$captchaUrlHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
final class CaptchaUrlProvider
|
||||||
// ignore: unused_element
|
extends $FunctionalProvider<AsyncValue<String>, String, FutureOr<String>>
|
||||||
typedef CaptchaUrlRef = AutoDisposeFutureProviderRef<String>;
|
with $FutureModifier<String>, $FutureProvider<String> {
|
||||||
// ignore_for_file: type=lint
|
const CaptchaUrlProvider._()
|
||||||
// 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
|
: 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';
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ class CallScreen extends HookConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final ongoingCall = ref.watch(ongoingCallProvider(room.id));
|
final ongoingCall = ref.watch(ongoingCallProvider(room.id));
|
||||||
final callState = ref.watch(callNotifierProvider);
|
final callState = ref.watch(callProvider);
|
||||||
final callNotifier = ref.watch(callNotifierProvider.notifier);
|
final callNotifier = ref.watch(callProvider.notifier);
|
||||||
|
|
||||||
useEffect(() {
|
useEffect(() {
|
||||||
talker.info('[Call] Joining the call...');
|
talker.info('[Call] Joining the call...');
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:dio/dio.dart';
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
@@ -7,9 +6,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
|||||||
import 'package:gap/gap.dart';
|
import 'package:gap/gap.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:island/models/chat.dart';
|
import 'package:island/models/chat.dart';
|
||||||
import 'package:island/models/file.dart';
|
|
||||||
import 'package:island/models/account.dart';
|
|
||||||
import 'package:island/pods/database.dart';
|
|
||||||
import 'package:island/pods/chat/chat_summary.dart';
|
import 'package:island/pods/chat/chat_summary.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
@@ -24,11 +20,10 @@ import 'package:island/widgets/navigation/fab_menu.dart';
|
|||||||
import 'package:island/widgets/response.dart';
|
import 'package:island/widgets/response.dart';
|
||||||
import 'package:material_symbols_icons/symbols.dart';
|
import 'package:material_symbols_icons/symbols.dart';
|
||||||
import 'package:relative_time/relative_time.dart';
|
import 'package:relative_time/relative_time.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:skeletonizer/skeletonizer.dart';
|
||||||
import 'package:styled_widget/styled_widget.dart';
|
import 'package:styled_widget/styled_widget.dart';
|
||||||
import 'package:super_sliver_list/super_sliver_list.dart';
|
import 'package:super_sliver_list/super_sliver_list.dart';
|
||||||
|
import 'package:island/pods/chat/chat_room.dart';
|
||||||
part 'chat.g.dart';
|
|
||||||
|
|
||||||
class ChatRoomListTile extends HookConsumerWidget {
|
class ChatRoomListTile extends HookConsumerWidget {
|
||||||
final SnChatRoom room;
|
final SnChatRoom room;
|
||||||
@@ -56,84 +51,124 @@ class ChatRoomListTile extends HookConsumerWidget {
|
|||||||
if (validMembers.isNotEmpty) {
|
if (validMembers.isNotEmpty) {
|
||||||
final userInfo = ref.watch(userInfoProvider);
|
final userInfo = ref.watch(userInfoProvider);
|
||||||
if (userInfo.value != null) {
|
if (userInfo.value != null) {
|
||||||
validMembers =
|
validMembers = validMembers
|
||||||
validMembers
|
.where((e) => e.accountId != userInfo.value!.id)
|
||||||
.where((e) => e.accountId != userInfo.value!.id)
|
.toList();
|
||||||
.toList();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildSubtitle() {
|
Widget buildSubtitle() {
|
||||||
if (subtitle != null) return subtitle!;
|
if (subtitle != null) return subtitle!;
|
||||||
|
|
||||||
return summary.when(
|
return AnimatedSwitcher(
|
||||||
data: (data) {
|
duration: const Duration(milliseconds: 300),
|
||||||
if (data == null) {
|
layoutBuilder: (currentChild, previousChildren) => Stack(
|
||||||
return isDirect && room.description == null
|
alignment: Alignment.centerLeft,
|
||||||
? Text(
|
children: [
|
||||||
validMembers.map((e) => '@${e.account.name}').join(', '),
|
...previousChildren,
|
||||||
maxLines: 1,
|
if (currentChild != null) currentChild,
|
||||||
)
|
],
|
||||||
: Text(room.description ?? 'descriptionNone'.tr(), maxLines: 1);
|
),
|
||||||
}
|
child: summary.when(
|
||||||
|
data: (data) => Container(
|
||||||
return Column(
|
key: const ValueKey('data'),
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
child: data == null
|
||||||
children: [
|
? isDirect && room.description == null
|
||||||
if (data.unreadCount > 0)
|
? Text(
|
||||||
Text(
|
validMembers
|
||||||
'unreadMessages'.plural(data.unreadCount),
|
.map((e) => '@${e.account.name}')
|
||||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
.join(', '),
|
||||||
color: Theme.of(context).colorScheme.primary,
|
maxLines: 1,
|
||||||
|
)
|
||||||
|
: Text(
|
||||||
|
room.description ?? 'descriptionNone'.tr(),
|
||||||
|
maxLines: 1,
|
||||||
|
)
|
||||||
|
: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
if (data.unreadCount > 0)
|
||||||
|
Text(
|
||||||
|
'unreadMessages'.plural(data.unreadCount),
|
||||||
|
style: Theme.of(context).textTheme.bodySmall
|
||||||
|
?.copyWith(
|
||||||
|
color: Theme.of(context).colorScheme.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (data.lastMessage == null)
|
||||||
|
Text(
|
||||||
|
room.description ?? 'descriptionNone'.tr(),
|
||||||
|
maxLines: 1,
|
||||||
|
)
|
||||||
|
else
|
||||||
|
Row(
|
||||||
|
spacing: 4,
|
||||||
|
children: [
|
||||||
|
Badge(
|
||||||
|
label: Text(
|
||||||
|
data.lastMessage!.sender.account.nick,
|
||||||
|
),
|
||||||
|
textColor: Theme.of(
|
||||||
|
context,
|
||||||
|
).colorScheme.onPrimary,
|
||||||
|
backgroundColor: Theme.of(
|
||||||
|
context,
|
||||||
|
).colorScheme.primary,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
(data.lastMessage!.content?.isNotEmpty ?? false)
|
||||||
|
? data.lastMessage!.content!
|
||||||
|
: 'messageNone'.tr(),
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.centerRight,
|
||||||
|
child: Text(
|
||||||
|
RelativeTime(
|
||||||
|
context,
|
||||||
|
).format(data.lastMessage!.createdAt),
|
||||||
|
style: Theme.of(context).textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (data.lastMessage == null)
|
loading: () => Container(
|
||||||
Text(room.description ?? 'descriptionNone'.tr(), maxLines: 1)
|
key: const ValueKey('loading'),
|
||||||
else
|
child: Builder(
|
||||||
Row(
|
builder: (context) {
|
||||||
spacing: 4,
|
final seed = DateTime.now().microsecondsSinceEpoch;
|
||||||
children: [
|
final len = 4 + (seed % 17); // 4..20 inclusive
|
||||||
Badge(
|
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||||
label: Text(data.lastMessage!.sender.account.nick),
|
var s = seed;
|
||||||
textColor: Theme.of(context).colorScheme.onPrimary,
|
final buffer = StringBuffer();
|
||||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
for (var i = 0; i < len; i++) {
|
||||||
),
|
s = (s * 1103515245 + 12345) & 0x7fffffff;
|
||||||
Expanded(
|
buffer.write(chars[s % chars.length]);
|
||||||
child: Text(
|
}
|
||||||
(data.lastMessage!.content?.isNotEmpty ?? false)
|
return Skeletonizer(
|
||||||
? data.lastMessage!.content!
|
enabled: true,
|
||||||
: 'messageNone'.tr(),
|
child: Text(buffer.toString()),
|
||||||
maxLines: 1,
|
);
|
||||||
overflow: TextOverflow.ellipsis,
|
},
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
),
|
||||||
),
|
),
|
||||||
),
|
error: (_, _) => Container(
|
||||||
Align(
|
key: const ValueKey('error'),
|
||||||
alignment: Alignment.centerRight,
|
child: isDirect && room.description == null
|
||||||
child: Text(
|
? Text(
|
||||||
RelativeTime(
|
validMembers.map((e) => '@${e.account.name}').join(', '),
|
||||||
context,
|
maxLines: 1,
|
||||||
).format(data.lastMessage!.createdAt),
|
)
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
: Text(room.description ?? 'descriptionNone'.tr(), maxLines: 1),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
},
|
|
||||||
loading: () => const SizedBox.shrink(),
|
|
||||||
error:
|
|
||||||
(_, _) =>
|
|
||||||
isDirect && room.description == null
|
|
||||||
? Text(
|
|
||||||
validMembers.map((e) => '@${e.account.name}').join(', '),
|
|
||||||
maxLines: 1,
|
|
||||||
)
|
|
||||||
: Text(
|
|
||||||
room.description ?? 'descriptionNone'.tr(),
|
|
||||||
maxLines: 1,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,17 +190,15 @@ class ChatRoomListTile extends HookConsumerWidget {
|
|||||||
loading: () => false,
|
loading: () => false,
|
||||||
error: (_, _) => false,
|
error: (_, _) => false,
|
||||||
),
|
),
|
||||||
child:
|
child: (isDirect && room.picture?.id == null)
|
||||||
(isDirect && room.picture?.id == null)
|
? SplitAvatarWidget(
|
||||||
? SplitAvatarWidget(
|
filesId: validMembers
|
||||||
filesId:
|
.map((e) => e.account.profile.picture?.id)
|
||||||
validMembers
|
.toList(),
|
||||||
.map((e) => e.account.profile.picture?.id)
|
)
|
||||||
.toList(),
|
: room.picture?.id == null
|
||||||
)
|
? CircleAvatar(child: Text(room.name![0].toUpperCase()))
|
||||||
: room.picture?.id == null
|
: ProfilePictureWidget(fileId: room.picture?.id),
|
||||||
? CircleAvatar(child: Text(room.name![0].toUpperCase()))
|
|
||||||
: ProfilePictureWidget(fileId: room.picture?.id),
|
|
||||||
),
|
),
|
||||||
title: Text(titleText),
|
title: Text(titleText),
|
||||||
subtitle: buildSubtitle(),
|
subtitle: buildSubtitle(),
|
||||||
@@ -183,90 +216,6 @@ class ChatRoomListTile extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
|
||||||
Future<List<SnChatRoom>> chatroomsJoined(Ref ref) async {
|
|
||||||
final db = ref.watch(databaseProvider);
|
|
||||||
|
|
||||||
try {
|
|
||||||
final localRoomsData = await db.select(db.chatRooms).get();
|
|
||||||
if (localRoomsData.isNotEmpty) {
|
|
||||||
final localRooms = await Future.wait(
|
|
||||||
localRoomsData.map((row) async {
|
|
||||||
final membersRows =
|
|
||||||
await (db.select(db.chatMembers)
|
|
||||||
..where((m) => m.chatRoomId.equals(row.id))).get();
|
|
||||||
final members =
|
|
||||||
membersRows.map((mRow) {
|
|
||||||
final account = SnAccount.fromJson(mRow.account);
|
|
||||||
return SnChatMember(
|
|
||||||
id: mRow.id,
|
|
||||||
chatRoomId: mRow.chatRoomId,
|
|
||||||
accountId: mRow.accountId,
|
|
||||||
account: account,
|
|
||||||
nick: mRow.nick,
|
|
||||||
notify: mRow.notify,
|
|
||||||
joinedAt: mRow.joinedAt,
|
|
||||||
breakUntil: mRow.breakUntil,
|
|
||||||
timeoutUntil: mRow.timeoutUntil,
|
|
||||||
status: null,
|
|
||||||
createdAt: mRow.createdAt,
|
|
||||||
updatedAt: mRow.updatedAt,
|
|
||||||
deletedAt: mRow.deletedAt,
|
|
||||||
chatRoom: null,
|
|
||||||
);
|
|
||||||
}).toList();
|
|
||||||
return SnChatRoom(
|
|
||||||
id: row.id,
|
|
||||||
name: row.name,
|
|
||||||
description: row.description,
|
|
||||||
type: row.type,
|
|
||||||
isPublic: row.isPublic!,
|
|
||||||
isCommunity: row.isCommunity!,
|
|
||||||
picture:
|
|
||||||
row.picture != null ? SnCloudFile.fromJson(row.picture!) : null,
|
|
||||||
background:
|
|
||||||
row.background != null
|
|
||||||
? SnCloudFile.fromJson(row.background!)
|
|
||||||
: null,
|
|
||||||
realmId: row.realmId,
|
|
||||||
accountId: row.accountId,
|
|
||||||
realm: null,
|
|
||||||
createdAt: row.createdAt,
|
|
||||||
updatedAt: row.updatedAt,
|
|
||||||
deletedAt: row.deletedAt,
|
|
||||||
members: members,
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
// Background sync
|
|
||||||
Future(() async {
|
|
||||||
try {
|
|
||||||
final client = ref.read(apiClientProvider);
|
|
||||||
final resp = await client.get('/sphere/chat');
|
|
||||||
final remoteRooms =
|
|
||||||
resp.data
|
|
||||||
.map((e) => SnChatRoom.fromJson(e))
|
|
||||||
.cast<SnChatRoom>()
|
|
||||||
.toList();
|
|
||||||
await db.saveChatRooms(remoteRooms);
|
|
||||||
ref.invalidateSelf();
|
|
||||||
} catch (_) {}
|
|
||||||
}).ignore();
|
|
||||||
|
|
||||||
return localRooms;
|
|
||||||
}
|
|
||||||
} catch (_) {}
|
|
||||||
|
|
||||||
// Fallback to API
|
|
||||||
final client = ref.watch(apiClientProvider);
|
|
||||||
final resp = await client.get('/sphere/chat');
|
|
||||||
final rooms =
|
|
||||||
resp.data.map((e) => SnChatRoom.fromJson(e)).cast<SnChatRoom>().toList();
|
|
||||||
await db.saveChatRooms(rooms);
|
|
||||||
return rooms;
|
|
||||||
}
|
|
||||||
|
|
||||||
class ChatListBodyWidget extends HookConsumerWidget {
|
class ChatListBodyWidget extends HookConsumerWidget {
|
||||||
final bool isFloating;
|
final bool isFloating;
|
||||||
final TabController tabController;
|
final TabController tabController;
|
||||||
@@ -281,7 +230,7 @@ class ChatListBodyWidget extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final chats = ref.watch(chatroomsJoinedProvider);
|
final chats = ref.watch(chatRoomJoinedProvider);
|
||||||
|
|
||||||
Widget bodyWidget = Column(
|
Widget bodyWidget = Column(
|
||||||
children: [
|
children: [
|
||||||
@@ -289,74 +238,67 @@ class ChatListBodyWidget extends HookConsumerWidget {
|
|||||||
builder: (context, ref, _) {
|
builder: (context, ref, _) {
|
||||||
final summaryState = ref.watch(chatSummaryProvider);
|
final summaryState = ref.watch(chatSummaryProvider);
|
||||||
return summaryState.maybeWhen(
|
return summaryState.maybeWhen(
|
||||||
loading:
|
loading: () => const LinearProgressIndicator(
|
||||||
() => const LinearProgressIndicator(
|
minHeight: 2,
|
||||||
minHeight: 2,
|
borderRadius: BorderRadius.zero,
|
||||||
borderRadius: BorderRadius.zero,
|
),
|
||||||
),
|
|
||||||
orElse: () => const SizedBox.shrink(),
|
orElse: () => const SizedBox.shrink(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: chats.when(
|
child: chats.when(
|
||||||
data:
|
data: (items) => RefreshIndicator(
|
||||||
(items) => RefreshIndicator(
|
onRefresh: () => Future.sync(() {
|
||||||
onRefresh:
|
ref.invalidate(chatRoomJoinedProvider);
|
||||||
() => Future.sync(() {
|
}),
|
||||||
ref.invalidate(chatroomsJoinedProvider);
|
child: SuperListView.builder(
|
||||||
}),
|
padding: EdgeInsets.only(bottom: 96),
|
||||||
child: SuperListView.builder(
|
itemCount: items
|
||||||
padding: EdgeInsets.only(bottom: 96),
|
.where(
|
||||||
itemCount:
|
(item) =>
|
||||||
items
|
selectedTab.value == 0 ||
|
||||||
.where(
|
(selectedTab.value == 1 && item.type == 1) ||
|
||||||
(item) =>
|
(selectedTab.value == 2 && item.type != 1),
|
||||||
selectedTab.value == 0 ||
|
)
|
||||||
(selectedTab.value == 1 && item.type == 1) ||
|
.length,
|
||||||
(selectedTab.value == 2 && item.type != 1),
|
itemBuilder: (context, index) {
|
||||||
)
|
final filteredItems = items
|
||||||
.length,
|
.where(
|
||||||
itemBuilder: (context, index) {
|
(item) =>
|
||||||
final filteredItems =
|
selectedTab.value == 0 ||
|
||||||
items
|
(selectedTab.value == 1 && item.type == 1) ||
|
||||||
.where(
|
(selectedTab.value == 2 && item.type != 1),
|
||||||
(item) =>
|
)
|
||||||
selectedTab.value == 0 ||
|
.toList();
|
||||||
(selectedTab.value == 1 &&
|
final item = filteredItems[index];
|
||||||
item.type == 1) ||
|
return ChatRoomListTile(
|
||||||
(selectedTab.value == 2 && item.type != 1),
|
room: item,
|
||||||
)
|
isDirect: item.type == 1,
|
||||||
.toList();
|
onTap: () {
|
||||||
final item = filteredItems[index];
|
if (isWideScreen(context)) {
|
||||||
return ChatRoomListTile(
|
context.replaceNamed(
|
||||||
room: item,
|
'chatRoom',
|
||||||
isDirect: item.type == 1,
|
pathParameters: {'id': item.id},
|
||||||
onTap: () {
|
);
|
||||||
if (isWideScreen(context)) {
|
} else {
|
||||||
context.replaceNamed(
|
context.pushNamed(
|
||||||
'chatRoom',
|
'chatRoom',
|
||||||
pathParameters: {'id': item.id},
|
pathParameters: {'id': item.id},
|
||||||
);
|
);
|
||||||
} else {
|
}
|
||||||
context.pushNamed(
|
|
||||||
'chatRoom',
|
|
||||||
pathParameters: {'id': item.id},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
},
|
||||||
),
|
);
|
||||||
),
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
loading: () => const Center(child: CircularProgressIndicator()),
|
loading: () => const Center(child: CircularProgressIndicator()),
|
||||||
error:
|
error: (error, stack) => ResponseErrorWidget(
|
||||||
(error, stack) => ResponseErrorWidget(
|
error: error,
|
||||||
error: error,
|
onRetry: () {
|
||||||
onRetry: () {
|
ref.invalidate(chatRoomJoinedProvider);
|
||||||
ref.invalidate(chatroomsJoinedProvider);
|
},
|
||||||
},
|
),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -431,7 +373,7 @@ class ChatListScreen extends HookConsumerWidget {
|
|||||||
|
|
||||||
// Listen for chat rooms refresh events
|
// Listen for chat rooms refresh events
|
||||||
final subscription = eventBus.on<ChatRoomsRefreshEvent>().listen((event) {
|
final subscription = eventBus.on<ChatRoomsRefreshEvent>().listen((event) {
|
||||||
ref.invalidate(chatroomsJoinedProvider);
|
ref.invalidate(chatRoomJoinedProvider);
|
||||||
});
|
});
|
||||||
|
|
||||||
return () {
|
return () {
|
||||||
@@ -443,13 +385,14 @@ class ChatListScreen extends HookConsumerWidget {
|
|||||||
// Set FAB type to chat
|
// Set FAB type to chat
|
||||||
final fabMenuNotifier = ref.read(fabMenuTypeProvider.notifier);
|
final fabMenuNotifier = ref.read(fabMenuTypeProvider.notifier);
|
||||||
Future(() {
|
Future(() {
|
||||||
fabMenuNotifier.state = FabMenuType.chat;
|
fabMenuNotifier.setMenuType(FabMenuType.chat);
|
||||||
});
|
});
|
||||||
return () {
|
return () {
|
||||||
// Clean up: reset FAB type to main
|
// Clean up: reset FAB type to main
|
||||||
|
final fabMenu = ref.read(fabMenuTypeProvider);
|
||||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
if (fabMenuNotifier.state == FabMenuType.chat) {
|
if (fabMenu == FabMenuType.chat) {
|
||||||
fabMenuNotifier.state = FabMenuType.main;
|
fabMenuNotifier.setMenuType(FabMenuType.main);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -599,46 +542,6 @@ class ChatListScreen extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@riverpod
|
|
||||||
Future<SnChatRoom?> chatroom(Ref ref, String? identifier) async {
|
|
||||||
if (identifier == null) return null;
|
|
||||||
try {
|
|
||||||
final client = ref.watch(apiClientProvider);
|
|
||||||
final resp = await client.get('/sphere/chat/$identifier');
|
|
||||||
return SnChatRoom.fromJson(resp.data);
|
|
||||||
} catch (err) {
|
|
||||||
if (err is DioException && err.response?.statusCode == 404) {
|
|
||||||
return null; // Chat room not found
|
|
||||||
}
|
|
||||||
rethrow; // Rethrow other errors
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@riverpod
|
|
||||||
Future<SnChatMember?> chatroomIdentity(Ref ref, String? identifier) async {
|
|
||||||
if (identifier == null) return null;
|
|
||||||
try {
|
|
||||||
final client = ref.watch(apiClientProvider);
|
|
||||||
final resp = await client.get('/sphere/chat/$identifier/members/me');
|
|
||||||
return SnChatMember.fromJson(resp.data);
|
|
||||||
} catch (err) {
|
|
||||||
if (err is DioException && err.response?.statusCode == 404) {
|
|
||||||
return null; // Chat member not found
|
|
||||||
}
|
|
||||||
rethrow; // Rethrow other errors
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@riverpod
|
|
||||||
Future<List<SnChatMember>> chatroomInvites(Ref ref) async {
|
|
||||||
final client = ref.watch(apiClientProvider);
|
|
||||||
final resp = await client.get('/sphere/chat/invites');
|
|
||||||
return resp.data
|
|
||||||
.map((e) => SnChatMember.fromJson(e))
|
|
||||||
.cast<SnChatMember>()
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ChatInvitesSheet extends HookConsumerWidget {
|
class _ChatInvitesSheet extends HookConsumerWidget {
|
||||||
const _ChatInvitesSheet();
|
const _ChatInvitesSheet();
|
||||||
|
|
||||||
@@ -651,7 +554,7 @@ class _ChatInvitesSheet extends HookConsumerWidget {
|
|||||||
final client = ref.read(apiClientProvider);
|
final client = ref.read(apiClientProvider);
|
||||||
await client.post('/sphere/chat/invites/${invite.chatRoom!.id}/accept');
|
await client.post('/sphere/chat/invites/${invite.chatRoom!.id}/accept');
|
||||||
ref.invalidate(chatroomInvitesProvider);
|
ref.invalidate(chatroomInvitesProvider);
|
||||||
ref.invalidate(chatroomsJoinedProvider);
|
ref.invalidate(chatRoomJoinedProvider);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
showErrorAlert(err);
|
showErrorAlert(err);
|
||||||
}
|
}
|
||||||
@@ -681,53 +584,47 @@ class _ChatInvitesSheet extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
child: invites.when(
|
child: invites.when(
|
||||||
data:
|
data: (items) => items.isEmpty
|
||||||
(items) =>
|
? Center(
|
||||||
items.isEmpty
|
child: Text('invitesEmpty', textAlign: TextAlign.center).tr(),
|
||||||
? Center(
|
)
|
||||||
child:
|
: ListView.builder(
|
||||||
Text(
|
shrinkWrap: true,
|
||||||
'invitesEmpty',
|
itemCount: items.length,
|
||||||
textAlign: TextAlign.center,
|
itemBuilder: (context, index) {
|
||||||
).tr(),
|
final invite = items[index];
|
||||||
)
|
return ChatRoomListTile(
|
||||||
: ListView.builder(
|
room: invite.chatRoom!,
|
||||||
shrinkWrap: true,
|
isDirect: invite.chatRoom!.type == 1,
|
||||||
itemCount: items.length,
|
subtitle: Row(
|
||||||
itemBuilder: (context, index) {
|
spacing: 6,
|
||||||
final invite = items[index];
|
children: [
|
||||||
return ChatRoomListTile(
|
if (invite.chatRoom!.type == 1)
|
||||||
room: invite.chatRoom!,
|
Badge(
|
||||||
isDirect: invite.chatRoom!.type == 1,
|
label: const Text('directMessage').tr(),
|
||||||
subtitle: Row(
|
backgroundColor: Theme.of(
|
||||||
spacing: 6,
|
context,
|
||||||
children: [
|
).colorScheme.primary,
|
||||||
if (invite.chatRoom!.type == 1)
|
textColor: Theme.of(context).colorScheme.onPrimary,
|
||||||
Badge(
|
|
||||||
label: const Text('directMessage').tr(),
|
|
||||||
backgroundColor:
|
|
||||||
Theme.of(context).colorScheme.primary,
|
|
||||||
textColor:
|
|
||||||
Theme.of(context).colorScheme.onPrimary,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
trailing: Row(
|
],
|
||||||
mainAxisSize: MainAxisSize.min,
|
|
||||||
children: [
|
|
||||||
IconButton(
|
|
||||||
icon: const Icon(Symbols.check),
|
|
||||||
onPressed: () => acceptInvite(invite),
|
|
||||||
),
|
|
||||||
IconButton(
|
|
||||||
icon: const Icon(Symbols.close),
|
|
||||||
onPressed: () => declineInvite(invite),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
|
trailing: Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Symbols.check),
|
||||||
|
onPressed: () => acceptInvite(invite),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Symbols.close),
|
||||||
|
onPressed: () => declineInvite(invite),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
loading: () => const Center(child: CircularProgressIndicator()),
|
loading: () => const Center(child: CircularProgressIndicator()),
|
||||||
error: (error, stack) => Center(child: Text('Error: $error')),
|
error: (error, stack) => Center(child: Text('Error: $error')),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,309 +0,0 @@
|
|||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
|
||||||
|
|
||||||
part of 'chat.dart';
|
|
||||||
|
|
||||||
// **************************************************************************
|
|
||||||
// RiverpodGenerator
|
|
||||||
// **************************************************************************
|
|
||||||
|
|
||||||
String _$chatroomsJoinedHash() => r'50abce4f03a7a8509f16d5ad0b1dbf8e3aeb73b6';
|
|
||||||
|
|
||||||
/// See also [chatroomsJoined].
|
|
||||||
@ProviderFor(chatroomsJoined)
|
|
||||||
final chatroomsJoinedProvider =
|
|
||||||
AutoDisposeFutureProvider<List<SnChatRoom>>.internal(
|
|
||||||
chatroomsJoined,
|
|
||||||
name: r'chatroomsJoinedProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$chatroomsJoinedHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
typedef ChatroomsJoinedRef = AutoDisposeFutureProviderRef<List<SnChatRoom>>;
|
|
||||||
String _$chatroomHash() => r'2b17d94728026420d18d6c383d2400cf4a070913';
|
|
||||||
|
|
||||||
/// 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 [chatroom].
|
|
||||||
@ProviderFor(chatroom)
|
|
||||||
const chatroomProvider = ChatroomFamily();
|
|
||||||
|
|
||||||
/// See also [chatroom].
|
|
||||||
class ChatroomFamily extends Family<AsyncValue<SnChatRoom?>> {
|
|
||||||
/// See also [chatroom].
|
|
||||||
const ChatroomFamily();
|
|
||||||
|
|
||||||
/// See also [chatroom].
|
|
||||||
ChatroomProvider call(String? identifier) {
|
|
||||||
return ChatroomProvider(identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
ChatroomProvider getProviderOverride(covariant ChatroomProvider 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'chatroomProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [chatroom].
|
|
||||||
class ChatroomProvider extends AutoDisposeFutureProvider<SnChatRoom?> {
|
|
||||||
/// See also [chatroom].
|
|
||||||
ChatroomProvider(String? identifier)
|
|
||||||
: this._internal(
|
|
||||||
(ref) => chatroom(ref as ChatroomRef, identifier),
|
|
||||||
from: chatroomProvider,
|
|
||||||
name: r'chatroomProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$chatroomHash,
|
|
||||||
dependencies: ChatroomFamily._dependencies,
|
|
||||||
allTransitiveDependencies: ChatroomFamily._allTransitiveDependencies,
|
|
||||||
identifier: identifier,
|
|
||||||
);
|
|
||||||
|
|
||||||
ChatroomProvider._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<SnChatRoom?> Function(ChatroomRef provider) create,
|
|
||||||
) {
|
|
||||||
return ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
override: ChatroomProvider._internal(
|
|
||||||
(ref) => create(ref as ChatroomRef),
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
identifier: identifier,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<SnChatRoom?> createElement() {
|
|
||||||
return _ChatroomProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return other is ChatroomProvider && other.identifier == identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode {
|
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, identifier.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
mixin ChatroomRef on AutoDisposeFutureProviderRef<SnChatRoom?> {
|
|
||||||
/// The parameter `identifier` of this provider.
|
|
||||||
String? get identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ChatroomProviderElement
|
|
||||||
extends AutoDisposeFutureProviderElement<SnChatRoom?>
|
|
||||||
with ChatroomRef {
|
|
||||||
_ChatroomProviderElement(super.provider);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get identifier => (origin as ChatroomProvider).identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
String _$chatroomIdentityHash() => r'35e19a5a3e31752c79b97ba0358a7ec8fb8f6e99';
|
|
||||||
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
@ProviderFor(chatroomIdentity)
|
|
||||||
const chatroomIdentityProvider = ChatroomIdentityFamily();
|
|
||||||
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
class ChatroomIdentityFamily extends Family<AsyncValue<SnChatMember?>> {
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
const ChatroomIdentityFamily();
|
|
||||||
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
ChatroomIdentityProvider call(String? identifier) {
|
|
||||||
return ChatroomIdentityProvider(identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
ChatroomIdentityProvider getProviderOverride(
|
|
||||||
covariant ChatroomIdentityProvider 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'chatroomIdentityProvider';
|
|
||||||
}
|
|
||||||
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
class ChatroomIdentityProvider
|
|
||||||
extends AutoDisposeFutureProvider<SnChatMember?> {
|
|
||||||
/// See also [chatroomIdentity].
|
|
||||||
ChatroomIdentityProvider(String? identifier)
|
|
||||||
: this._internal(
|
|
||||||
(ref) => chatroomIdentity(ref as ChatroomIdentityRef, identifier),
|
|
||||||
from: chatroomIdentityProvider,
|
|
||||||
name: r'chatroomIdentityProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$chatroomIdentityHash,
|
|
||||||
dependencies: ChatroomIdentityFamily._dependencies,
|
|
||||||
allTransitiveDependencies:
|
|
||||||
ChatroomIdentityFamily._allTransitiveDependencies,
|
|
||||||
identifier: identifier,
|
|
||||||
);
|
|
||||||
|
|
||||||
ChatroomIdentityProvider._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<SnChatMember?> Function(ChatroomIdentityRef provider) create,
|
|
||||||
) {
|
|
||||||
return ProviderOverride(
|
|
||||||
origin: this,
|
|
||||||
override: ChatroomIdentityProvider._internal(
|
|
||||||
(ref) => create(ref as ChatroomIdentityRef),
|
|
||||||
from: from,
|
|
||||||
name: null,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
debugGetCreateSourceHash: null,
|
|
||||||
identifier: identifier,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
AutoDisposeFutureProviderElement<SnChatMember?> createElement() {
|
|
||||||
return _ChatroomIdentityProviderElement(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool operator ==(Object other) {
|
|
||||||
return other is ChatroomIdentityProvider && other.identifier == identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
int get hashCode {
|
|
||||||
var hash = _SystemHash.combine(0, runtimeType.hashCode);
|
|
||||||
hash = _SystemHash.combine(hash, identifier.hashCode);
|
|
||||||
|
|
||||||
return _SystemHash.finish(hash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
mixin ChatroomIdentityRef on AutoDisposeFutureProviderRef<SnChatMember?> {
|
|
||||||
/// The parameter `identifier` of this provider.
|
|
||||||
String? get identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ChatroomIdentityProviderElement
|
|
||||||
extends AutoDisposeFutureProviderElement<SnChatMember?>
|
|
||||||
with ChatroomIdentityRef {
|
|
||||||
_ChatroomIdentityProviderElement(super.provider);
|
|
||||||
|
|
||||||
@override
|
|
||||||
String? get identifier => (origin as ChatroomIdentityProvider).identifier;
|
|
||||||
}
|
|
||||||
|
|
||||||
String _$chatroomInvitesHash() => r'5cd6391b09c5517ede19bacce43b45c8d71dd087';
|
|
||||||
|
|
||||||
/// See also [chatroomInvites].
|
|
||||||
@ProviderFor(chatroomInvites)
|
|
||||||
final chatroomInvitesProvider =
|
|
||||||
AutoDisposeFutureProvider<List<SnChatMember>>.internal(
|
|
||||||
chatroomInvites,
|
|
||||||
name: r'chatroomInvitesProvider',
|
|
||||||
debugGetCreateSourceHash:
|
|
||||||
const bool.fromEnvironment('dart.vm.product')
|
|
||||||
? null
|
|
||||||
: _$chatroomInvitesHash,
|
|
||||||
dependencies: null,
|
|
||||||
allTransitiveDependencies: null,
|
|
||||||
);
|
|
||||||
|
|
||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
|
||||||
// ignore: unused_element
|
|
||||||
typedef ChatroomInvitesRef = AutoDisposeFutureProviderRef<List<SnChatMember>>;
|
|
||||||
// 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
|
|
||||||
@@ -10,8 +10,8 @@ import 'package:image_picker/image_picker.dart';
|
|||||||
import 'package:island/models/chat.dart';
|
import 'package:island/models/chat.dart';
|
||||||
import 'package:island/models/file.dart';
|
import 'package:island/models/file.dart';
|
||||||
import 'package:island/models/realm.dart';
|
import 'package:island/models/realm.dart';
|
||||||
|
import 'package:island/pods/chat/chat_room.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/screens/chat/chat.dart';
|
|
||||||
import 'package:island/screens/realm/realms.dart';
|
import 'package:island/screens/realm/realms.dart';
|
||||||
import 'package:island/services/file.dart';
|
import 'package:island/services/file.dart';
|
||||||
import 'package:island/services/file_uploader.dart';
|
import 'package:island/services/file_uploader.dart';
|
||||||
@@ -47,7 +47,7 @@ class EditChatScreen extends HookConsumerWidget {
|
|||||||
final isPublic = useState(true);
|
final isPublic = useState(true);
|
||||||
final isCommunity = useState(false);
|
final isCommunity = useState(false);
|
||||||
|
|
||||||
final chat = ref.watch(chatroomProvider(id));
|
final chat = ref.watch(chatRoomProvider(id));
|
||||||
|
|
||||||
final joinedRealms = ref.watch(realmsJoinedProvider);
|
final joinedRealms = ref.watch(realmsJoinedProvider);
|
||||||
final currentRealm = useState<SnRealm?>(null);
|
final currentRealm = useState<SnRealm?>(null);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import "package:flutter_hooks/flutter_hooks.dart";
|
|||||||
import "package:gap/gap.dart";
|
import "package:gap/gap.dart";
|
||||||
import "package:hooks_riverpod/hooks_riverpod.dart";
|
import "package:hooks_riverpod/hooks_riverpod.dart";
|
||||||
import "package:island/database/message.dart";
|
import "package:island/database/message.dart";
|
||||||
import "package:island/screens/chat/chat.dart";
|
import "package:island/pods/chat/chat_room.dart";
|
||||||
import "package:island/widgets/content/cloud_files.dart";
|
import "package:island/widgets/content/cloud_files.dart";
|
||||||
import "package:super_sliver_list/super_sliver_list.dart";
|
import "package:super_sliver_list/super_sliver_list.dart";
|
||||||
import "package:easy_localization/easy_localization.dart";
|
import "package:easy_localization/easy_localization.dart";
|
||||||
@@ -27,8 +27,8 @@ class PublicRoomPreview extends HookConsumerWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final messages = ref.watch(messagesNotifierProvider(id));
|
final messages = ref.watch(messagesProvider(id));
|
||||||
final messagesNotifier = ref.read(messagesNotifierProvider(id).notifier);
|
final messagesNotifier = ref.read(messagesProvider(id).notifier);
|
||||||
final scrollController = useScrollController();
|
final scrollController = useScrollController();
|
||||||
|
|
||||||
final listController = useMemoized(() => ListController(), []);
|
final listController = useMemoized(() => ListController(), []);
|
||||||
@@ -203,7 +203,7 @@ class PublicRoomPreview extends HookConsumerWidget {
|
|||||||
showLoadingModal(context);
|
showLoadingModal(context);
|
||||||
final apiClient = ref.read(apiClientProvider);
|
final apiClient = ref.read(apiClientProvider);
|
||||||
await apiClient.post('/sphere/chat/${room.id}/members/me');
|
await apiClient.post('/sphere/chat/${room.id}/members/me');
|
||||||
ref.invalidate(chatroomIdentityProvider(id));
|
ref.invalidate(chatRoomIdentityProvider(id));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
showErrorAlert(err);
|
showErrorAlert(err);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user