Compare commits
	
		
			83 Commits
		
	
	
		
			3.0.0+111
			...
			a6d869ebf6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a6d869ebf6 | |||
| f3a8699389 | |||
| d345c00e84 | |||
| a706f127b6 | |||
| 680ece0b6a | |||
| b976c6ed37 | |||
| 6ae6b132de | |||
| 95aec7c95b | |||
| edd760fbcb | |||
| ba269dbbb8 | |||
| 1aa45dd9f1 | |||
| 92685d7410 | |||
| c8e351514d | |||
| f3900825e3 | |||
| 2cc6652f75 | |||
| 4d4409de2e | |||
| e1286c797f | |||
| bec037622f | |||
| a0d8c1a9b3 | |||
| 26135d2116 | |||
| 71b67fd22d | |||
| 855072dfea | |||
| b39e2e2d64 | |||
| 84b1d6a346 | |||
| 28335dd548 | |||
| 7253e2d3ef | |||
| 4d489425fa | |||
| 890a8a44cf | |||
| 8e3583f57a | |||
| d0ff14659f | |||
| 1f7caaeaac | |||
| 9f9f42071a | |||
| 6bd6e994cb | |||
| 02e68d76ee | |||
| d04b06089c | |||
| 9be6fea2e0 | |||
| 6b1214a06f | |||
| 4597373ac9 | |||
| 047c8d93aa | |||
| 715f95ca22 | |||
| ba709012d7 | |||
| fd186f8391 | |||
| 262d36cd2d | |||
| f320855348 | |||
| ed90152462 | |||
| 6e5c5f1690 | |||
| 7c92dee097 | |||
| e4bb031138 | |||
| 97226ae96b | |||
| d8cd33e79a | |||
| 5ecd39b6a9 | |||
| 8854305e99 | |||
| 903cade296 | |||
| e48410a528 | |||
| 170ea4f2c0 | |||
| 19f0e11384 | |||
| 80bf6c3bbe | |||
| 8352ce8b5b | |||
| c06abf6e42 | |||
| 37cc0a5291 | |||
| 25ae18d6a9 | |||
| 18db50d80c | |||
| 903008d397 | |||
| 4499d4ec8e | |||
| 3a4faac8cb | |||
| e6c58b7b63 | |||
| a7454edec0 | |||
| cbf1952eb7 | |||
| 6d06f0a1b4 | |||
| f2d2a9efd8 | |||
| d44c8217b0 | |||
| 446c33d8b0 | |||
| 996462f1fd | |||
| 778f6bb79f | |||
| 8747f948b9 | |||
| 9546d6e4b8 | |||
| f8d1940af6 | |||
| b2b0891d24 | |||
| 274168d4bc | |||
| 2c98b348d5 | |||
| afc7887ddd | |||
| 99ff78a3d5 | |||
| 2ad85addf6 | 
							
								
								
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
								
							@@ -59,7 +59,7 @@ jobs:
 | 
				
			|||||||
          sudo apt-get install -y libnotify-dev
 | 
					          sudo apt-get install -y libnotify-dev
 | 
				
			||||||
          sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
 | 
					          sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
 | 
				
			||||||
          sudo apt-get install -y gstreamer-1.0
 | 
					          sudo apt-get install -y gstreamer-1.0
 | 
				
			||||||
          sudo apt-get install -y libsecret-1-0
 | 
					          sudo apt-get install -y libsecret-1-dev
 | 
				
			||||||
      - run: flutter pub get
 | 
					      - run: flutter pub get
 | 
				
			||||||
      - run: flutter build linux
 | 
					      - run: flutter build linux
 | 
				
			||||||
      - name: Archive production artifacts
 | 
					      - name: Archive production artifacts
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Hello there! Welcome to the main repository of the DysonNetwork (also known as the Solar Network). The code here is mainly about the front-end app (also known as Solian). But you can still post issues here to get help and request new features!
 | 
					Hello there! Welcome to the main repository of the DysonNetwork (also known as the Solar Network). The code here is mainly about the front-end app (also known as Solian). But you can still post issues here to get help and request new features!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果你看得懂这行字,你可以前往我们的文档来了解更多:
 | 
				
			||||||
 | 
					[Suki - Solar Network](https://kb.solsynth.dev/zh/solar-network)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Server
 | 
					## Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The backend of the Solar Network project is located at [Solsynth/DysonNetwork](https://github.com/Solsynth/DysonNetwork)
 | 
					The backend of the Solar Network project is located at [Solsynth/DysonNetwork](https://github.com/Solsynth/DysonNetwork)
 | 
				
			||||||
@@ -25,8 +28,6 @@ The content below will lead you to the world of Solar Network.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### For Normal Users
 | 
					### For Normal Users
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**The v3 Release is not ready, yet.**
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1. Go to the Github Releases page, and download the latest release / pre-release according to your platform.
 | 
					1. Go to the Github Releases page, and download the latest release / pre-release according to your platform.
 | 
				
			||||||
   - **What's the difference between stable and pre-release?** The pre-release is untested by the other users and includes the new cutting-edge features, usually the pre-release is the feature drop. At the same time, due to we're not doing the API versioning, some breaking changes may break the stable release, so use the pre-release one instead.
 | 
					   - **What's the difference between stable and pre-release?** The pre-release is untested by the other users and includes the new cutting-edge features, usually the pre-release is the feature drop. At the same time, due to we're not doing the API versioning, some breaking changes may break the stable release, so use the pre-release one instead.
 | 
				
			||||||
2. Create an account on the Solar Network
 | 
					2. Create an account on the Solar Network
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@
 | 
				
			|||||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
					    <uses-permission android:name="android.permission.INTERNET" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.CAMERA" />
 | 
					    <uses-permission android:name="android.permission.CAMERA" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 | 
					    <uses-permission android:name="android.permission.RECORD_AUDIO" />
 | 
				
			||||||
 | 
					    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
					    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 | 
					    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
					    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 | 
				
			||||||
@@ -42,6 +43,15 @@
 | 
				
			|||||||
                <category android:name="android.intent.category.LAUNCHER" />
 | 
					                <category android:name="android.intent.category.LAUNCHER" />
 | 
				
			||||||
            </intent-filter>
 | 
					            </intent-filter>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <!-- Deeplinking -->
 | 
				
			||||||
 | 
					            <intent-filter android:autoVerify="true">
 | 
				
			||||||
 | 
					                <action android:name="android.intent.action.VIEW" />
 | 
				
			||||||
 | 
					                <category android:name="android.intent.category.DEFAULT" />
 | 
				
			||||||
 | 
					                <category android:name="android.intent.category.BROWSABLE" />
 | 
				
			||||||
 | 
					                <data android:scheme="http" android:host="solian.app" />
 | 
				
			||||||
 | 
					                <data android:scheme="https" />
 | 
				
			||||||
 | 
					            </intent-filter>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <!-- Share Intent Filters -->
 | 
					            <!-- Share Intent Filters -->
 | 
				
			||||||
            <intent-filter>
 | 
					            <intent-filter>
 | 
				
			||||||
                <action android:name="android.intent.action.SEND" />
 | 
					                <action android:name="android.intent.action.SEND" />
 | 
				
			||||||
@@ -80,6 +90,13 @@
 | 
				
			|||||||
            </intent-filter>
 | 
					            </intent-filter>
 | 
				
			||||||
        </activity>
 | 
					        </activity>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!-- Livekit Screenshare -->
 | 
				
			||||||
 | 
					        <service
 | 
				
			||||||
 | 
					            android:name="de.julianassmann.flutter_background.IsolateHolderService"
 | 
				
			||||||
 | 
					            android:enabled="true"
 | 
				
			||||||
 | 
					            android:exported="false"
 | 
				
			||||||
 | 
					            android:foregroundServiceType="mediaProjection" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Sign in with Apple -->
 | 
					        <!-- Sign in with Apple -->
 | 
				
			||||||
        <activity
 | 
					        <activity
 | 
				
			||||||
            android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback"
 | 
					            android:name="com.aboutyou.dart_packages.sign_in_with_apple.SignInWithAppleCallback"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,7 +146,13 @@
 | 
				
			|||||||
  "edited": "Edited",
 | 
					  "edited": "Edited",
 | 
				
			||||||
  "addVideo": "Add video",
 | 
					  "addVideo": "Add video",
 | 
				
			||||||
  "addPhoto": "Add photo",
 | 
					  "addPhoto": "Add photo",
 | 
				
			||||||
 | 
					  "addAudio": "Add audio",
 | 
				
			||||||
  "addFile": "Add file",
 | 
					  "addFile": "Add file",
 | 
				
			||||||
 | 
					  "recordAudio": "Record Audio",
 | 
				
			||||||
 | 
					  "linkAttachment": "Link Attachment",
 | 
				
			||||||
 | 
					  "fileIdCannotBeEmpty": "File ID cannot be empty",
 | 
				
			||||||
 | 
					  "fileIdLinkHint": "Haven't upload to the Solar Network? Tap here to open Solar Network Drive to customize your uploads.",
 | 
				
			||||||
 | 
					  "failedToFetchFile": "Failed to fetch file: {}",
 | 
				
			||||||
  "createDirectMessage": "Send new DM",
 | 
					  "createDirectMessage": "Send new DM",
 | 
				
			||||||
  "gotoDirectMessage": "Go to DM",
 | 
					  "gotoDirectMessage": "Go to DM",
 | 
				
			||||||
  "react": "React",
 | 
					  "react": "React",
 | 
				
			||||||
@@ -352,6 +358,8 @@
 | 
				
			|||||||
  "postTitle": "Title",
 | 
					  "postTitle": "Title",
 | 
				
			||||||
  "postDescription": "Description",
 | 
					  "postDescription": "Description",
 | 
				
			||||||
  "call": "Call",
 | 
					  "call": "Call",
 | 
				
			||||||
 | 
					  "callLeave": "Leave",
 | 
				
			||||||
 | 
					  "callEnd": "End this call",
 | 
				
			||||||
  "done": "Done",
 | 
					  "done": "Done",
 | 
				
			||||||
  "loginResetPasswordSent": "Password reset link sent, please check your email inbox.",
 | 
					  "loginResetPasswordSent": "Password reset link sent, please check your email inbox.",
 | 
				
			||||||
  "accountDeletion": "Delete Account",
 | 
					  "accountDeletion": "Delete Account",
 | 
				
			||||||
@@ -590,6 +598,7 @@
 | 
				
			|||||||
  "yes": "Yes",
 | 
					  "yes": "Yes",
 | 
				
			||||||
  "navigateToChat": "Navigate to Chat",
 | 
					  "navigateToChat": "Navigate to Chat",
 | 
				
			||||||
  "wouldYouLikeToNavigateToChat": "Would You like to navigate to the chat?",
 | 
					  "wouldYouLikeToNavigateToChat": "Would You like to navigate to the chat?",
 | 
				
			||||||
 | 
					  "abuseReports": "Abuse Reports",
 | 
				
			||||||
  "abuseReport": "Report",
 | 
					  "abuseReport": "Report",
 | 
				
			||||||
  "abuseReportTitle": "Report Content",
 | 
					  "abuseReportTitle": "Report Content",
 | 
				
			||||||
  "abuseReportDescription": "Help us keep the community safe by reporting inappropriate content or behavior.",
 | 
					  "abuseReportDescription": "Help us keep the community safe by reporting inappropriate content or behavior.",
 | 
				
			||||||
@@ -621,8 +630,8 @@
 | 
				
			|||||||
  "chatJoin": "Join the Chat",
 | 
					  "chatJoin": "Join the Chat",
 | 
				
			||||||
  "realmJoin": "Join the Realm",
 | 
					  "realmJoin": "Join the Realm",
 | 
				
			||||||
  "realmJoinSuccess": "Successfully joined the realm.",
 | 
					  "realmJoinSuccess": "Successfully joined the realm.",
 | 
				
			||||||
  "discoverRealms": "Discover Realms",
 | 
					  "discoverRealms": "Discover realms",
 | 
				
			||||||
  "discoverPublishers": "Discover Publishers",
 | 
					  "discoverPublishers": "Discover publishers",
 | 
				
			||||||
  "search": "Search",
 | 
					  "search": "Search",
 | 
				
			||||||
  "publisherMembers": "Collaborators",
 | 
					  "publisherMembers": "Collaborators",
 | 
				
			||||||
  "developerHub": "Developer Hub",
 | 
					  "developerHub": "Developer Hub",
 | 
				
			||||||
@@ -697,5 +706,60 @@
 | 
				
			|||||||
  "postForwardingTo": "Forwarding to",
 | 
					  "postForwardingTo": "Forwarding to",
 | 
				
			||||||
  "postReplyingTo": "Replying to",
 | 
					  "postReplyingTo": "Replying to",
 | 
				
			||||||
  "postEditing": "You are editing an existing post",
 | 
					  "postEditing": "You are editing an existing post",
 | 
				
			||||||
  "postArticle": "Article"
 | 
					  "postArticle": "Article",
 | 
				
			||||||
 | 
					  "aboutDeviceName": "Device Name",
 | 
				
			||||||
 | 
					  "aboutDeviceIdentifier": "Device Identifier",
 | 
				
			||||||
 | 
					  "donate": "Donate",
 | 
				
			||||||
 | 
					  "donateDescription": "Support us to continue developing the Solar Network and keep the server up and running.",
 | 
				
			||||||
 | 
					  "fileId": "File ID",
 | 
				
			||||||
 | 
					  "fileIdHint": "The file ID is the ID you get after upload the file via the Solar Network Drive.",
 | 
				
			||||||
 | 
					  "translate": "Translate",
 | 
				
			||||||
 | 
					  "translating": "Translating",
 | 
				
			||||||
 | 
					  "translated": "Translated",
 | 
				
			||||||
 | 
					  "reactionThumbUp": "Thumbs Up",
 | 
				
			||||||
 | 
					  "reactionThumbDown": "Thumbs Down",
 | 
				
			||||||
 | 
					  "reactionJustOkay": "Just Okay",
 | 
				
			||||||
 | 
					  "reactionCry": "Cry",
 | 
				
			||||||
 | 
					  "reactionConfuse": "Confused",
 | 
				
			||||||
 | 
					  "reactionClap": "Clap",
 | 
				
			||||||
 | 
					  "reactionLaugh": "Laugh",
 | 
				
			||||||
 | 
					  "reactionAngry": "Angry",
 | 
				
			||||||
 | 
					  "reactionParty": "Party",
 | 
				
			||||||
 | 
					  "reactionPray": "Pray",
 | 
				
			||||||
 | 
					  "reactionHeart": "Heart",
 | 
				
			||||||
 | 
					  "selectMicrophone": "Select Microphone",
 | 
				
			||||||
 | 
					  "selectCamera": "Select Camera",
 | 
				
			||||||
 | 
					  "switchedTo": "Switched to {}",
 | 
				
			||||||
 | 
					  "connecting": "Connecting",
 | 
				
			||||||
 | 
					  "reconnecting": "Reconnecting",
 | 
				
			||||||
 | 
					  "disconnected": "Disconnected",
 | 
				
			||||||
 | 
					  "connected": "Connected",
 | 
				
			||||||
 | 
					  "repliesLoadMore": "Load more replies",
 | 
				
			||||||
 | 
					  "attachmentsRecentUploads": "Recent Uploads",
 | 
				
			||||||
 | 
					  "attachmentsManualInput": "Manual Input",
 | 
				
			||||||
 | 
					  "crop": "Crop",
 | 
				
			||||||
 | 
					  "rename": "Rename",
 | 
				
			||||||
 | 
					  "markAsSensitive": "Mark as Sensitive",
 | 
				
			||||||
 | 
					  "fileName": "File name",
 | 
				
			||||||
 | 
					  "sensitiveCategories.language": "Language",
 | 
				
			||||||
 | 
					  "sensitiveCategories.sexualContent": "Sexual Content",
 | 
				
			||||||
 | 
					  "sensitiveCategories.violence": "Violence",
 | 
				
			||||||
 | 
					  "sensitiveCategories.profanity": "Profanity",
 | 
				
			||||||
 | 
					  "sensitiveCategories.hateSpeech": "Hate Speech",
 | 
				
			||||||
 | 
					  "sensitiveCategories.racism": "Racism",
 | 
				
			||||||
 | 
					  "sensitiveCategories.adultContent": "Adult Content",
 | 
				
			||||||
 | 
					  "sensitiveCategories.drugAbuse": "Drug Abuse",
 | 
				
			||||||
 | 
					  "sensitiveCategories.alcoholAbuse": "Alcohol Abuse",
 | 
				
			||||||
 | 
					  "sensitiveCategories.gambling": "Gambling",
 | 
				
			||||||
 | 
					  "sensitiveCategories.selfHarm": "Self-harm",
 | 
				
			||||||
 | 
					  "sensitiveCategories.childAbuse": "Child Abuse",
 | 
				
			||||||
 | 
					  "sensitiveCategories.other": "Other",
 | 
				
			||||||
 | 
					  "poll": "Poll",
 | 
				
			||||||
 | 
					  "pollsRecent": "Recent Polls",
 | 
				
			||||||
 | 
					  "pollCreateNew": "Create New",
 | 
				
			||||||
 | 
					  "pollCreateNewHint": "Create a new poll for your post. Pick a publisher and continue.",
 | 
				
			||||||
 | 
					  "publisher": "Publisher",
 | 
				
			||||||
 | 
					  "publisherHint": "Enter the publisher name",
 | 
				
			||||||
 | 
					  "publisherCannotBeEmpty": "Publisher cannot be empty",
 | 
				
			||||||
 | 
					  "operationFailed": "Operation failed: {}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -123,6 +123,10 @@
 | 
				
			|||||||
  "addVideo": "添加视频",
 | 
					  "addVideo": "添加视频",
 | 
				
			||||||
  "addPhoto": "添加照片",
 | 
					  "addPhoto": "添加照片",
 | 
				
			||||||
  "addFile": "添加文件",
 | 
					  "addFile": "添加文件",
 | 
				
			||||||
 | 
					  "addAttachmentById": "通过 ID 添加附件",
 | 
				
			||||||
 | 
					  "enterFileId": "输入文件 ID",
 | 
				
			||||||
 | 
					  "fileIdCannotBeEmpty": "文件 ID 不能为空",
 | 
				
			||||||
 | 
					  "failedToFetchFile": "获取文件失败: {}",
 | 
				
			||||||
  "createDirectMessage": "创建新私人消息",
 | 
					  "createDirectMessage": "创建新私人消息",
 | 
				
			||||||
  "gotoDirectMessage": "前往私信",
 | 
					  "gotoDirectMessage": "前往私信",
 | 
				
			||||||
  "react": "反应",
 | 
					  "react": "反应",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -123,6 +123,10 @@
 | 
				
			|||||||
    "addVideo": "新增影片",
 | 
					    "addVideo": "新增影片",
 | 
				
			||||||
    "addPhoto": "新增照片",
 | 
					    "addPhoto": "新增照片",
 | 
				
			||||||
    "addFile": "新增檔案",
 | 
					    "addFile": "新增檔案",
 | 
				
			||||||
 | 
					    "addAttachmentById": "透過 ID 新增附件",
 | 
				
			||||||
 | 
					    "enterFileId": "輸入檔案 ID",
 | 
				
			||||||
 | 
					    "fileIdCannotBeEmpty": "檔案 ID 不能為空",
 | 
				
			||||||
 | 
					    "failedToFetchFile": "無法取得檔案: {}",
 | 
				
			||||||
    "createDirectMessage": "建立新私人訊息",
 | 
					    "createDirectMessage": "建立新私人訊息",
 | 
				
			||||||
    "gotoDirectMessage": "Go to DM",
 | 
					    "gotoDirectMessage": "Go to DM",
 | 
				
			||||||
    "react": "反應",
 | 
					    "react": "反應",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
# Uncomment this line to define a global platform for your project
 | 
					# Uncomment this line to define a global platform for your project
 | 
				
			||||||
platform :ios, '13.0'
 | 
					platform :ios, '15.0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 | 
					# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 | 
				
			||||||
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
 | 
					ENV['COCOAPODS_DISABLE_STATS'] = 'true'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,33 +40,33 @@ PODS:
 | 
				
			|||||||
  - file_picker (0.0.1):
 | 
					  - file_picker (0.0.1):
 | 
				
			||||||
    - DKImagePickerController/PhotoGallery
 | 
					    - DKImagePickerController/PhotoGallery
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - Firebase/CoreOnly (11.15.0):
 | 
					  - Firebase/CoreOnly (12.0.0):
 | 
				
			||||||
    - FirebaseCore (~> 11.15.0)
 | 
					    - FirebaseCore (~> 12.0.0)
 | 
				
			||||||
  - Firebase/Messaging (11.15.0):
 | 
					  - Firebase/Messaging (12.0.0):
 | 
				
			||||||
    - Firebase/CoreOnly
 | 
					    - Firebase/CoreOnly
 | 
				
			||||||
    - FirebaseMessaging (~> 11.15.0)
 | 
					    - FirebaseMessaging (~> 12.0.0)
 | 
				
			||||||
  - firebase_core (3.15.0):
 | 
					  - firebase_core (4.0.0):
 | 
				
			||||||
    - Firebase/CoreOnly (= 11.15.0)
 | 
					    - Firebase/CoreOnly (= 12.0.0)
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - firebase_messaging (15.2.8):
 | 
					  - firebase_messaging (16.0.0):
 | 
				
			||||||
    - Firebase/Messaging (= 11.15.0)
 | 
					    - Firebase/Messaging (= 12.0.0)
 | 
				
			||||||
    - firebase_core
 | 
					    - firebase_core
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - FirebaseCore (11.15.0):
 | 
					  - FirebaseCore (12.0.0):
 | 
				
			||||||
    - FirebaseCoreInternal (~> 11.15.0)
 | 
					    - FirebaseCoreInternal (~> 12.0.0)
 | 
				
			||||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
					    - GoogleUtilities/Environment (~> 8.1)
 | 
				
			||||||
    - GoogleUtilities/Logger (~> 8.1)
 | 
					    - GoogleUtilities/Logger (~> 8.1)
 | 
				
			||||||
  - FirebaseCoreInternal (11.15.0):
 | 
					  - FirebaseCoreInternal (12.0.0):
 | 
				
			||||||
    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
					    - "GoogleUtilities/NSData+zlib (~> 8.1)"
 | 
				
			||||||
  - FirebaseInstallations (11.15.0):
 | 
					  - FirebaseInstallations (12.0.0):
 | 
				
			||||||
    - FirebaseCore (~> 11.15.0)
 | 
					    - FirebaseCore (~> 12.0.0)
 | 
				
			||||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
					    - GoogleUtilities/Environment (~> 8.1)
 | 
				
			||||||
    - GoogleUtilities/UserDefaults (~> 8.1)
 | 
					    - GoogleUtilities/UserDefaults (~> 8.1)
 | 
				
			||||||
    - PromisesObjC (~> 2.4)
 | 
					    - PromisesObjC (~> 2.4)
 | 
				
			||||||
  - FirebaseMessaging (11.15.0):
 | 
					  - FirebaseMessaging (12.0.0):
 | 
				
			||||||
    - FirebaseCore (~> 11.15.0)
 | 
					    - FirebaseCore (~> 12.0.0)
 | 
				
			||||||
    - FirebaseInstallations (~> 11.0)
 | 
					    - FirebaseInstallations (~> 12.0.0)
 | 
				
			||||||
    - GoogleDataTransport (~> 10.0)
 | 
					    - GoogleDataTransport (~> 10.1)
 | 
				
			||||||
    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
					    - GoogleUtilities/AppDelegateSwizzler (~> 8.1)
 | 
				
			||||||
    - GoogleUtilities/Environment (~> 8.1)
 | 
					    - GoogleUtilities/Environment (~> 8.1)
 | 
				
			||||||
    - GoogleUtilities/Reachability (~> 8.1)
 | 
					    - GoogleUtilities/Reachability (~> 8.1)
 | 
				
			||||||
@@ -93,9 +93,9 @@ PODS:
 | 
				
			|||||||
  - flutter_udid (0.0.1):
 | 
					  - flutter_udid (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - SAMKeychain
 | 
					    - SAMKeychain
 | 
				
			||||||
  - flutter_webrtc (0.14.0):
 | 
					  - flutter_webrtc (1.0.0):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - WebRTC-SDK (= 125.6422.07)
 | 
					    - WebRTC-SDK (= 137.7151.02)
 | 
				
			||||||
  - gal (1.0.0):
 | 
					  - gal (1.0.0):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - FlutterMacOS
 | 
					    - FlutterMacOS
 | 
				
			||||||
@@ -130,11 +130,11 @@ PODS:
 | 
				
			|||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - irondash_engine_context (0.0.1):
 | 
					  - irondash_engine_context (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - Kingfisher (8.3.3)
 | 
					  - Kingfisher (8.5.0)
 | 
				
			||||||
  - livekit_client (2.4.9):
 | 
					  - livekit_client (2.5.0):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - flutter_webrtc
 | 
					    - flutter_webrtc
 | 
				
			||||||
    - WebRTC-SDK (= 125.6422.07)
 | 
					    - WebRTC-SDK (= 137.7151.02)
 | 
				
			||||||
  - local_auth_darwin (0.0.1):
 | 
					  - local_auth_darwin (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - FlutterMacOS
 | 
					    - FlutterMacOS
 | 
				
			||||||
@@ -178,28 +178,31 @@ PODS:
 | 
				
			|||||||
  - sqflite_darwin (0.0.4):
 | 
					  - sqflite_darwin (0.0.4):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - FlutterMacOS
 | 
					    - FlutterMacOS
 | 
				
			||||||
  - sqlite3 (3.50.1):
 | 
					  - sqlite3 (3.50.3):
 | 
				
			||||||
    - sqlite3/common (= 3.50.1)
 | 
					    - sqlite3/common (= 3.50.3)
 | 
				
			||||||
  - sqlite3/common (3.50.1)
 | 
					  - sqlite3/common (3.50.3)
 | 
				
			||||||
  - sqlite3/dbstatvtab (3.50.1):
 | 
					  - sqlite3/dbstatvtab (3.50.3):
 | 
				
			||||||
    - sqlite3/common
 | 
					    - sqlite3/common
 | 
				
			||||||
  - sqlite3/fts5 (3.50.1):
 | 
					  - sqlite3/fts5 (3.50.3):
 | 
				
			||||||
    - sqlite3/common
 | 
					    - sqlite3/common
 | 
				
			||||||
  - sqlite3/math (3.50.1):
 | 
					  - sqlite3/math (3.50.3):
 | 
				
			||||||
    - sqlite3/common
 | 
					    - sqlite3/common
 | 
				
			||||||
  - sqlite3/perf-threadsafe (3.50.1):
 | 
					  - sqlite3/perf-threadsafe (3.50.3):
 | 
				
			||||||
    - sqlite3/common
 | 
					    - sqlite3/common
 | 
				
			||||||
  - sqlite3/rtree (3.50.1):
 | 
					  - sqlite3/rtree (3.50.3):
 | 
				
			||||||
 | 
					    - sqlite3/common
 | 
				
			||||||
 | 
					  - sqlite3/session (3.50.3):
 | 
				
			||||||
    - sqlite3/common
 | 
					    - sqlite3/common
 | 
				
			||||||
  - sqlite3_flutter_libs (0.0.1):
 | 
					  - sqlite3_flutter_libs (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
    - FlutterMacOS
 | 
					    - FlutterMacOS
 | 
				
			||||||
    - sqlite3 (~> 3.50.1)
 | 
					    - sqlite3 (~> 3.50.3)
 | 
				
			||||||
    - sqlite3/dbstatvtab
 | 
					    - sqlite3/dbstatvtab
 | 
				
			||||||
    - sqlite3/fts5
 | 
					    - sqlite3/fts5
 | 
				
			||||||
    - sqlite3/math
 | 
					    - sqlite3/math
 | 
				
			||||||
    - sqlite3/perf-threadsafe
 | 
					    - sqlite3/perf-threadsafe
 | 
				
			||||||
    - sqlite3/rtree
 | 
					    - sqlite3/rtree
 | 
				
			||||||
 | 
					    - sqlite3/session
 | 
				
			||||||
  - super_native_extensions (0.0.1):
 | 
					  - super_native_extensions (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - SwiftyGif (5.4.5)
 | 
					  - SwiftyGif (5.4.5)
 | 
				
			||||||
@@ -209,7 +212,7 @@ PODS:
 | 
				
			|||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - wakelock_plus (0.0.1):
 | 
					  - wakelock_plus (0.0.1):
 | 
				
			||||||
    - Flutter
 | 
					    - Flutter
 | 
				
			||||||
  - WebRTC-SDK (125.6422.07)
 | 
					  - WebRTC-SDK (137.7151.02)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEPENDENCIES:
 | 
					DEPENDENCIES:
 | 
				
			||||||
  - Alamofire
 | 
					  - Alamofire
 | 
				
			||||||
@@ -361,13 +364,13 @@ SPEC CHECKSUMS:
 | 
				
			|||||||
  DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
 | 
					  DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c
 | 
				
			||||||
  DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
 | 
					  DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60
 | 
				
			||||||
  file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
 | 
					  file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be
 | 
				
			||||||
  Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e
 | 
					  Firebase: 800d487043c0557d9faed71477a38d9aafb08a41
 | 
				
			||||||
  firebase_core: c727a02c560a53f1f1e56e18f16515eb5753c492
 | 
					  firebase_core: 633e1851ffe1b9ab875f6467a4f574c79cef02e4
 | 
				
			||||||
  firebase_messaging: 4158969b04b667f5435731ec9d6e453bb58b0c4c
 | 
					  firebase_messaging: d17feef781edc84ebefe62624fb384358ad96361
 | 
				
			||||||
  FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e
 | 
					  FirebaseCore: 055f4ab117d5964158c833f3d5e7ec6d91648d4a
 | 
				
			||||||
  FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4
 | 
					  FirebaseCoreInternal: dedc28e569a4be85f38f3d6af1070a2e12018d55
 | 
				
			||||||
  FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843
 | 
					  FirebaseInstallations: d4c7c958f99c8860d7fcece786314ae790e2f988
 | 
				
			||||||
  FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09
 | 
					  FirebaseMessaging: af49f8d7c0a3d2a017d9302c80946f45a7777dde
 | 
				
			||||||
  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
 | 
					  Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
 | 
				
			||||||
  flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
 | 
					  flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99
 | 
				
			||||||
  flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
 | 
					  flutter_keyboard_visibility: 4625131e43015dbbe759d9b20daaf77e0e3f6619
 | 
				
			||||||
@@ -376,15 +379,15 @@ SPEC CHECKSUMS:
 | 
				
			|||||||
  flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
 | 
					  flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13
 | 
				
			||||||
  flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
 | 
					  flutter_timezone: 7c838e17ffd4645d261e87037e5bebf6d38fe544
 | 
				
			||||||
  flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9
 | 
					  flutter_udid: f7c3884e6ec2951efe4f9de082257fc77c4d15e9
 | 
				
			||||||
  flutter_webrtc: fd0d3bdef8766a0736dbbe2e5b7e85f1f3c52117
 | 
					  flutter_webrtc: 6f7da106613d52ade777d5b4875a43f48c28b457
 | 
				
			||||||
  gal: baecd024ebfd13c441269ca7404792a7152fde89
 | 
					  gal: baecd024ebfd13c441269ca7404792a7152fde89
 | 
				
			||||||
  GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
 | 
					  GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
 | 
				
			||||||
  GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
 | 
					  GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
 | 
				
			||||||
  image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
 | 
					  image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
 | 
				
			||||||
  irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486
 | 
					  irondash_engine_context: 8e58ca8e0212ee9d1c7dc6a42121849986c88486
 | 
				
			||||||
  Kingfisher: ff82cb91d9266ddb56cbb2f72d32c26f00d3e5be
 | 
					  Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c
 | 
				
			||||||
  livekit_client: 3f79d79233a5bd13d5b541732624ef959d7c538e
 | 
					  livekit_client: e3b79b99405428aac439b6b76a254cd9a11dbbfb
 | 
				
			||||||
  local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391
 | 
					  local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19
 | 
				
			||||||
  media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854
 | 
					  media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854
 | 
				
			||||||
  media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474
 | 
					  media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474
 | 
				
			||||||
  nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
 | 
					  nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
 | 
				
			||||||
@@ -403,15 +406,15 @@ SPEC CHECKSUMS:
 | 
				
			|||||||
  shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
 | 
					  shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
 | 
				
			||||||
  sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
 | 
					  sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418
 | 
				
			||||||
  sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
 | 
					  sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0
 | 
				
			||||||
  sqlite3: 1d85290c3321153511f6e900ede7a1608718bbd5
 | 
					  sqlite3: 83105acd294c9137c026e2da1931c30b4588ab81
 | 
				
			||||||
  sqlite3_flutter_libs: e7fc8c9ea2200ff3271f08f127842131746b70e2
 | 
					  sqlite3_flutter_libs: 616267f2fca40e9c6af8c5d82324e05667040b6e
 | 
				
			||||||
  super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
 | 
					  super_native_extensions: b763c02dc3a8fd078389f410bf15149179020cb4
 | 
				
			||||||
  SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
 | 
					  SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4
 | 
				
			||||||
  url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
 | 
					  url_launcher_ios: 694010445543906933d732453a59da0a173ae33d
 | 
				
			||||||
  volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
 | 
					  volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12
 | 
				
			||||||
  wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
 | 
					  wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556
 | 
				
			||||||
  WebRTC-SDK: dff00a3892bc570b6014e046297782084071657e
 | 
					  WebRTC-SDK: d20de357dcbf7c9696b124b39f3ff62125107e4b
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PODFILE CHECKSUM: f6df17c2a0cbd7af89692fd3877231eaea40230f
 | 
					PODFILE CHECKSUM: c818292390b02fa379036ea099713a332bd7193f
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COCOAPODS: 1.16.2
 | 
					COCOAPODS: 1.16.2
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,8 @@
 | 
				
			|||||||
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
							1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
 | 
				
			||||||
		331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
 | 
							331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
 | 
				
			||||||
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
							3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
 | 
				
			||||||
 | 
							73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */; };
 | 
				
			||||||
 | 
							73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
				
			||||||
		73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
							73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
				
			||||||
		73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
							73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 | 
				
			||||||
		73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; };
 | 
							73D4264B2DEB815D006C0AAE /* NotifyDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */; };
 | 
				
			||||||
@@ -32,6 +34,13 @@
 | 
				
			|||||||
			remoteGlobalIDString = 97C146ED1CF9000F007C117D;
 | 
								remoteGlobalIDString = 97C146ED1CF9000F007C117D;
 | 
				
			||||||
			remoteInfo = Runner;
 | 
								remoteInfo = Runner;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */ = {
 | 
				
			||||||
 | 
								isa = PBXContainerItemProxy;
 | 
				
			||||||
 | 
								containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
				
			||||||
 | 
								proxyType = 1;
 | 
				
			||||||
 | 
								remoteGlobalIDString = 73ACDFAA2E3D0E6100B63535;
 | 
				
			||||||
 | 
								remoteInfo = SolianBroadcastExtension;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305D62E0BE878009035B9 /* PBXContainerItemProxy */ = {
 | 
							73C305D62E0BE878009035B9 /* PBXContainerItemProxy */ = {
 | 
				
			||||||
			isa = PBXContainerItemProxy;
 | 
								isa = PBXContainerItemProxy;
 | 
				
			||||||
			containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
								containerPortal = 97C146E61CF9000F007C117D /* Project object */;
 | 
				
			||||||
@@ -55,6 +64,7 @@
 | 
				
			|||||||
			dstPath = "";
 | 
								dstPath = "";
 | 
				
			||||||
			dstSubfolderSpec = 13;
 | 
								dstSubfolderSpec = 13;
 | 
				
			||||||
			files = (
 | 
								files = (
 | 
				
			||||||
 | 
									73ACDFC32E3D0E6100B63535 /* SolianBroadcastExtension.appex in Embed Foundation Extensions */,
 | 
				
			||||||
				73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */,
 | 
									73C305D82E0BE878009035B9 /* SolianShareExtension.appex in Embed Foundation Extensions */,
 | 
				
			||||||
				73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */,
 | 
									73CDD6812DEC00480059D95D /* SolianNotificationService.appex in Embed Foundation Extensions */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
@@ -91,6 +101,9 @@
 | 
				
			|||||||
		3A1C47BD29CC6AC2587D4DBE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
 | 
							3A1C47BD29CC6AC2587D4DBE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
 | 
				
			||||||
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
 | 
							3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
 | 
				
			||||||
		737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
 | 
							737E920B2DB6A9FF00BE9CDB /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
 | 
				
			||||||
 | 
							73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
 | 
							73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
 | 
				
			||||||
 | 
							73ACDFB82E3D0E6100B63535 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
 | 
				
			||||||
		73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
							73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = SolianNotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 | 
				
			||||||
		73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; };
 | 
							73D4264A2DEB815D006C0AAE /* NotifyDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyDelegate.swift; sourceTree = "<group>"; };
 | 
				
			||||||
@@ -117,6 +130,13 @@
 | 
				
			|||||||
/* End PBXFileReference section */
 | 
					/* End PBXFileReference section */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
 | 
					/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
 | 
				
			||||||
 | 
							73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */ = {
 | 
				
			||||||
 | 
								isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 | 
				
			||||||
 | 
								membershipExceptions = (
 | 
				
			||||||
 | 
									Info.plist,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305DC2E0BE878009035B9 /* Exceptions for "SolianShareExtension" folder in "SolianShareExtension" target */ = {
 | 
							73C305DC2E0BE878009035B9 /* Exceptions for "SolianShareExtension" folder in "SolianShareExtension" target */ = {
 | 
				
			||||||
			isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 | 
								isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
 | 
				
			||||||
			membershipExceptions = (
 | 
								membershipExceptions = (
 | 
				
			||||||
@@ -150,6 +170,14 @@
 | 
				
			|||||||
			path = Services;
 | 
								path = Services;
 | 
				
			||||||
			sourceTree = "<group>";
 | 
								sourceTree = "<group>";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */ = {
 | 
				
			||||||
 | 
								isa = PBXFileSystemSynchronizedRootGroup;
 | 
				
			||||||
 | 
								exceptions = (
 | 
				
			||||||
 | 
									73ACDFCA2E3D0E6100B63535 /* Exceptions for "SolianBroadcastExtension" folder in "SolianBroadcastExtension" target */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								path = SolianBroadcastExtension;
 | 
				
			||||||
 | 
								sourceTree = "<group>";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305CF2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
							73C305CF2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
				
			||||||
			isa = PBXFileSystemSynchronizedRootGroup;
 | 
								isa = PBXFileSystemSynchronizedRootGroup;
 | 
				
			||||||
			exceptions = (
 | 
								exceptions = (
 | 
				
			||||||
@@ -177,6 +205,14 @@
 | 
				
			|||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFA82E3D0E6100B63535 /* Frameworks */ = {
 | 
				
			||||||
 | 
								isa = PBXFrameworksBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
									73ACDFAD2E3D0E6100B63535 /* ReplayKit.framework in Frameworks */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305CB2E0BE878009035B9 /* Frameworks */ = {
 | 
							73C305CB2E0BE878009035B9 /* Frameworks */ = {
 | 
				
			||||||
			isa = PBXFrameworksBuildPhase;
 | 
								isa = PBXFrameworksBuildPhase;
 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
@@ -220,6 +256,8 @@
 | 
				
			|||||||
				AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */,
 | 
									AA0CA8A3E15DEE023BB27438 /* Pods_NotificationService.framework */,
 | 
				
			||||||
				39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */,
 | 
									39FE4CC6223F0D3C0E1FFD04 /* Pods_SolianNotificationService.framework */,
 | 
				
			||||||
				7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */,
 | 
									7B40764A2C4CC0E7DC70A0D3 /* Pods_SolianShareExtension.framework */,
 | 
				
			||||||
 | 
									73ACDFAC2E3D0E6100B63535 /* ReplayKit.framework */,
 | 
				
			||||||
 | 
									73ACDFB82E3D0E6100B63535 /* UIKit.framework */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			name = Frameworks;
 | 
								name = Frameworks;
 | 
				
			||||||
			sourceTree = "<group>";
 | 
								sourceTree = "<group>";
 | 
				
			||||||
@@ -264,6 +302,7 @@
 | 
				
			|||||||
				97C146F01CF9000F007C117D /* Runner */,
 | 
									97C146F01CF9000F007C117D /* Runner */,
 | 
				
			||||||
				73CDD67B2DEC00480059D95D /* SolianNotificationService */,
 | 
									73CDD67B2DEC00480059D95D /* SolianNotificationService */,
 | 
				
			||||||
				73C305CF2E0BE878009035B9 /* SolianShareExtension */,
 | 
									73C305CF2E0BE878009035B9 /* SolianShareExtension */,
 | 
				
			||||||
 | 
									73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
				
			||||||
				97C146EF1CF9000F007C117D /* Products */,
 | 
									97C146EF1CF9000F007C117D /* Products */,
 | 
				
			||||||
				331C8082294A63A400263BE5 /* RunnerTests */,
 | 
									331C8082294A63A400263BE5 /* RunnerTests */,
 | 
				
			||||||
				91E124CE95BCB4DCD890160D /* Pods */,
 | 
									91E124CE95BCB4DCD890160D /* Pods */,
 | 
				
			||||||
@@ -279,6 +318,7 @@
 | 
				
			|||||||
				331C8081294A63A400263BE5 /* RunnerTests.xctest */,
 | 
									331C8081294A63A400263BE5 /* RunnerTests.xctest */,
 | 
				
			||||||
				73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */,
 | 
									73CDD67A2DEC00480059D95D /* SolianNotificationService.appex */,
 | 
				
			||||||
				73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */,
 | 
									73C305CE2E0BE878009035B9 /* SolianShareExtension.appex */,
 | 
				
			||||||
 | 
									73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			name = Products;
 | 
								name = Products;
 | 
				
			||||||
			sourceTree = "<group>";
 | 
								sourceTree = "<group>";
 | 
				
			||||||
@@ -323,6 +363,26 @@
 | 
				
			|||||||
			productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
 | 
								productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
 | 
				
			||||||
			productType = "com.apple.product-type.bundle.unit-test";
 | 
								productType = "com.apple.product-type.bundle.unit-test";
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */ = {
 | 
				
			||||||
 | 
								isa = PBXNativeTarget;
 | 
				
			||||||
 | 
								buildConfigurationList = 73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */;
 | 
				
			||||||
 | 
								buildPhases = (
 | 
				
			||||||
 | 
									73ACDFA72E3D0E6100B63535 /* Sources */,
 | 
				
			||||||
 | 
									73ACDFA82E3D0E6100B63535 /* Frameworks */,
 | 
				
			||||||
 | 
									73ACDFA92E3D0E6100B63535 /* Resources */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								buildRules = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								dependencies = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								fileSystemSynchronizedGroups = (
 | 
				
			||||||
 | 
									73ACDFAE2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								name = SolianBroadcastExtension;
 | 
				
			||||||
 | 
								productName = SolianBroadcastExtension;
 | 
				
			||||||
 | 
								productReference = 73ACDFAB2E3D0E6100B63535 /* SolianBroadcastExtension.appex */;
 | 
				
			||||||
 | 
								productType = "com.apple.product-type.app-extension";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305CD2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
							73C305CD2E0BE878009035B9 /* SolianShareExtension */ = {
 | 
				
			||||||
			isa = PBXNativeTarget;
 | 
								isa = PBXNativeTarget;
 | 
				
			||||||
			buildConfigurationList = 73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */;
 | 
								buildConfigurationList = 73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */;
 | 
				
			||||||
@@ -385,6 +445,7 @@
 | 
				
			|||||||
			dependencies = (
 | 
								dependencies = (
 | 
				
			||||||
				73CDD6802DEC00480059D95D /* PBXTargetDependency */,
 | 
									73CDD6802DEC00480059D95D /* PBXTargetDependency */,
 | 
				
			||||||
				73C305D72E0BE878009035B9 /* PBXTargetDependency */,
 | 
									73C305D72E0BE878009035B9 /* PBXTargetDependency */,
 | 
				
			||||||
 | 
									73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
			fileSystemSynchronizedGroups = (
 | 
								fileSystemSynchronizedGroups = (
 | 
				
			||||||
				73268D272DEB012A0076E970 /* Services */,
 | 
									73268D272DEB012A0076E970 /* Services */,
 | 
				
			||||||
@@ -409,6 +470,9 @@
 | 
				
			|||||||
						CreatedOnToolsVersion = 14.0;
 | 
											CreatedOnToolsVersion = 14.0;
 | 
				
			||||||
						TestTargetID = 97C146ED1CF9000F007C117D;
 | 
											TestTargetID = 97C146ED1CF9000F007C117D;
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
 | 
										73ACDFAA2E3D0E6100B63535 = {
 | 
				
			||||||
 | 
											CreatedOnToolsVersion = 16.4;
 | 
				
			||||||
 | 
										};
 | 
				
			||||||
					73C305CD2E0BE878009035B9 = {
 | 
										73C305CD2E0BE878009035B9 = {
 | 
				
			||||||
						CreatedOnToolsVersion = 16.4;
 | 
											CreatedOnToolsVersion = 16.4;
 | 
				
			||||||
					};
 | 
										};
 | 
				
			||||||
@@ -438,6 +502,7 @@
 | 
				
			|||||||
				331C8080294A63A400263BE5 /* RunnerTests */,
 | 
									331C8080294A63A400263BE5 /* RunnerTests */,
 | 
				
			||||||
				73CDD6792DEC00480059D95D /* SolianNotificationService */,
 | 
									73CDD6792DEC00480059D95D /* SolianNotificationService */,
 | 
				
			||||||
				73C305CD2E0BE878009035B9 /* SolianShareExtension */,
 | 
									73C305CD2E0BE878009035B9 /* SolianShareExtension */,
 | 
				
			||||||
 | 
									73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */,
 | 
				
			||||||
			);
 | 
								);
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
/* End PBXProject section */
 | 
					/* End PBXProject section */
 | 
				
			||||||
@@ -450,6 +515,13 @@
 | 
				
			|||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFA92E3D0E6100B63535 /* Resources */ = {
 | 
				
			||||||
 | 
								isa = PBXResourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305CC2E0BE878009035B9 /* Resources */ = {
 | 
							73C305CC2E0BE878009035B9 /* Resources */ = {
 | 
				
			||||||
			isa = PBXResourcesBuildPhase;
 | 
								isa = PBXResourcesBuildPhase;
 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
@@ -643,6 +715,13 @@
 | 
				
			|||||||
			);
 | 
								);
 | 
				
			||||||
			runOnlyForDeploymentPostprocessing = 0;
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFA72E3D0E6100B63535 /* Sources */ = {
 | 
				
			||||||
 | 
								isa = PBXSourcesBuildPhase;
 | 
				
			||||||
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
 | 
								files = (
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								runOnlyForDeploymentPostprocessing = 0;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305CA2E0BE878009035B9 /* Sources */ = {
 | 
							73C305CA2E0BE878009035B9 /* Sources */ = {
 | 
				
			||||||
			isa = PBXSourcesBuildPhase;
 | 
								isa = PBXSourcesBuildPhase;
 | 
				
			||||||
			buildActionMask = 2147483647;
 | 
								buildActionMask = 2147483647;
 | 
				
			||||||
@@ -675,6 +754,11 @@
 | 
				
			|||||||
			target = 97C146ED1CF9000F007C117D /* Runner */;
 | 
								target = 97C146ED1CF9000F007C117D /* Runner */;
 | 
				
			||||||
			targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
 | 
								targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFC22E3D0E6100B63535 /* PBXTargetDependency */ = {
 | 
				
			||||||
 | 
								isa = PBXTargetDependency;
 | 
				
			||||||
 | 
								target = 73ACDFAA2E3D0E6100B63535 /* SolianBroadcastExtension */;
 | 
				
			||||||
 | 
								targetProxy = 73ACDFC12E3D0E6100B63535 /* PBXContainerItemProxy */;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305D72E0BE878009035B9 /* PBXTargetDependency */ = {
 | 
							73C305D72E0BE878009035B9 /* PBXTargetDependency */ = {
 | 
				
			||||||
			isa = PBXTargetDependency;
 | 
								isa = PBXTargetDependency;
 | 
				
			||||||
			target = 73C305CD2E0BE878009035B9 /* SolianShareExtension */;
 | 
								target = 73C305CD2E0BE878009035B9 /* SolianShareExtension */;
 | 
				
			||||||
@@ -772,7 +856,8 @@
 | 
				
			|||||||
				ENABLE_BITCODE = NO;
 | 
									ENABLE_BITCODE = NO;
 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
									INFOPLIST_FILE = Runner/Info.plist;
 | 
				
			||||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
									INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
									INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
					"$(inherited)",
 | 
										"$(inherited)",
 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
@@ -835,6 +920,123 @@
 | 
				
			|||||||
			};
 | 
								};
 | 
				
			||||||
			name = Profile;
 | 
								name = Profile;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFC42E3D0E6100B63535 /* Debug */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_WEAK = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
 | 
									ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
				
			||||||
 | 
									GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
 | 
										"@executable_path/../../Frameworks",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 | 
				
			||||||
 | 
									MTL_FAST_MATH = YES;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SKIP_INSTALL = YES;
 | 
				
			||||||
 | 
									SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = YES;
 | 
				
			||||||
 | 
									SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TARGETED_DEVICE_FAMILY = "1,2";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Debug;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							73ACDFC52E3D0E6100B63535 /* Release */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_WEAK = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
 | 
									ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
				
			||||||
 | 
									GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
 | 
										"@executable_path/../../Frameworks",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									MTL_FAST_MATH = YES;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SKIP_INSTALL = YES;
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = YES;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TARGETED_DEVICE_FAMILY = "1,2";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
							73ACDFC62E3D0E6100B63535 /* Profile */ = {
 | 
				
			||||||
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
 | 
								buildSettings = {
 | 
				
			||||||
 | 
									ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
 | 
				
			||||||
 | 
									CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
 | 
				
			||||||
 | 
									CLANG_ENABLE_OBJC_WEAK = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
 | 
				
			||||||
 | 
									CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
 | 
				
			||||||
 | 
									CODE_SIGN_ENTITLEMENTS = SolianBroadcastExtension/SolianBroadcastExtension.entitlements;
 | 
				
			||||||
 | 
									CODE_SIGN_STYLE = Automatic;
 | 
				
			||||||
 | 
									CURRENT_PROJECT_VERSION = 1;
 | 
				
			||||||
 | 
									DEVELOPMENT_TEAM = W7HPZ53V6B;
 | 
				
			||||||
 | 
									ENABLE_USER_SCRIPT_SANDBOXING = YES;
 | 
				
			||||||
 | 
									GCC_C_LANGUAGE_STANDARD = gnu17;
 | 
				
			||||||
 | 
									GENERATE_INFOPLIST_FILE = YES;
 | 
				
			||||||
 | 
									INFOPLIST_FILE = SolianBroadcastExtension/Info.plist;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_CFBundleDisplayName = SolianBroadcastExtension;
 | 
				
			||||||
 | 
									INFOPLIST_KEY_NSHumanReadableCopyright = "";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
 | 
										"$(inherited)",
 | 
				
			||||||
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
 | 
										"@executable_path/../../Frameworks",
 | 
				
			||||||
 | 
									);
 | 
				
			||||||
 | 
									LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
 | 
				
			||||||
 | 
									MARKETING_VERSION = 1.0;
 | 
				
			||||||
 | 
									MTL_FAST_MATH = YES;
 | 
				
			||||||
 | 
									PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solian.SolianBroadcastExtension;
 | 
				
			||||||
 | 
									PRODUCT_NAME = "$(TARGET_NAME)";
 | 
				
			||||||
 | 
									SKIP_INSTALL = YES;
 | 
				
			||||||
 | 
									SWIFT_EMIT_LOC_STRINGS = YES;
 | 
				
			||||||
 | 
									SWIFT_VERSION = 5.0;
 | 
				
			||||||
 | 
									TARGETED_DEVICE_FAMILY = "1,2";
 | 
				
			||||||
 | 
								};
 | 
				
			||||||
 | 
								name = Profile;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305D92E0BE878009035B9 /* Debug */ = {
 | 
							73C305D92E0BE878009035B9 /* Debug */ = {
 | 
				
			||||||
			isa = XCBuildConfiguration;
 | 
								isa = XCBuildConfiguration;
 | 
				
			||||||
			baseConfigurationReference = 17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */;
 | 
								baseConfigurationReference = 17FAB080A9C53193ABD9C15B /* Pods-SolianShareExtension.debug.xcconfig */;
 | 
				
			||||||
@@ -1202,7 +1404,8 @@
 | 
				
			|||||||
				ENABLE_BITCODE = NO;
 | 
									ENABLE_BITCODE = NO;
 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
									INFOPLIST_FILE = Runner/Info.plist;
 | 
				
			||||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
									INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
									INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
					"$(inherited)",
 | 
										"$(inherited)",
 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
@@ -1229,7 +1432,8 @@
 | 
				
			|||||||
				ENABLE_BITCODE = NO;
 | 
									ENABLE_BITCODE = NO;
 | 
				
			||||||
				INFOPLIST_FILE = Runner/Info.plist;
 | 
									INFOPLIST_FILE = Runner/Info.plist;
 | 
				
			||||||
				INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
									INFOPLIST_KEY_CFBundleDisplayName = Solian;
 | 
				
			||||||
				IPHONEOS_DEPLOYMENT_TARGET = 13.0;
 | 
									INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
 | 
				
			||||||
 | 
									IPHONEOS_DEPLOYMENT_TARGET = 15.0;
 | 
				
			||||||
				LD_RUNPATH_SEARCH_PATHS = (
 | 
									LD_RUNPATH_SEARCH_PATHS = (
 | 
				
			||||||
					"$(inherited)",
 | 
										"$(inherited)",
 | 
				
			||||||
					"@executable_path/Frameworks",
 | 
										"@executable_path/Frameworks",
 | 
				
			||||||
@@ -1255,6 +1459,16 @@
 | 
				
			|||||||
			defaultConfigurationIsVisible = 0;
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
			defaultConfigurationName = Release;
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
							73ACDFCB2E3D0E6100B63535 /* Build configuration list for PBXNativeTarget "SolianBroadcastExtension" */ = {
 | 
				
			||||||
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
 | 
								buildConfigurations = (
 | 
				
			||||||
 | 
									73ACDFC42E3D0E6100B63535 /* Debug */,
 | 
				
			||||||
 | 
									73ACDFC52E3D0E6100B63535 /* Release */,
 | 
				
			||||||
 | 
									73ACDFC62E3D0E6100B63535 /* Profile */,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
								defaultConfigurationIsVisible = 0;
 | 
				
			||||||
 | 
								defaultConfigurationName = Release;
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
		73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */ = {
 | 
							73C305DD2E0BE878009035B9 /* Build configuration list for PBXNativeTarget "SolianShareExtension" */ = {
 | 
				
			||||||
			isa = XCConfigurationList;
 | 
								isa = XCConfigurationList;
 | 
				
			||||||
			buildConfigurations = (
 | 
								buildConfigurations = (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ import UIKit
 | 
				
			|||||||
        UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory])
 | 
					        UNUserNotificationCenter.current().setNotificationCategories([replyableMessageCategory])
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        GeneratedPluginRegistrant.register(with: self)
 | 
					        GeneratedPluginRegistrant.register(with: self)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 | 
					        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,10 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
 | 
					<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
 | 
				
			||||||
 | 
					    <device id="retina6_12" orientation="portrait" appearance="light"/>
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <deployment identifier="iOS"/>
 | 
					        <deployment identifier="iOS"/>
 | 
				
			||||||
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
 | 
					        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
 | 
				
			||||||
 | 
					        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
    <scenes>
 | 
					    <scenes>
 | 
				
			||||||
        <!--Flutter View Controller-->
 | 
					        <!--Flutter View Controller-->
 | 
				
			||||||
@@ -14,13 +16,14 @@
 | 
				
			|||||||
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
 | 
					                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
 | 
				
			||||||
                    </layoutGuides>
 | 
					                    </layoutGuides>
 | 
				
			||||||
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
 | 
					                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
 | 
				
			||||||
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
 | 
					                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
 | 
				
			||||||
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
					                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
 | 
				
			||||||
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
 | 
					                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
 | 
				
			||||||
                    </view>
 | 
					                    </view>
 | 
				
			||||||
                </viewController>
 | 
					                </viewController>
 | 
				
			||||||
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
 | 
					                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
 | 
				
			||||||
            </objects>
 | 
					            </objects>
 | 
				
			||||||
 | 
					            <point key="canvasLocation" x="-26" y="-76"/>
 | 
				
			||||||
        </scene>
 | 
					        </scene>
 | 
				
			||||||
    </scenes>
 | 
					    </scenes>
 | 
				
			||||||
</document>
 | 
					</document>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,16 +2,10 @@
 | 
				
			|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
<plist version="1.0">
 | 
					<plist version="1.0">
 | 
				
			||||||
<dict>
 | 
					<dict>
 | 
				
			||||||
	<key>CLIENT_ID</key>
 | 
						<key>AppGroupId</key>
 | 
				
			||||||
	<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string>
 | 
						<string>$(CUSTOM_GROUP_ID)</string>
 | 
				
			||||||
	<key>REVERSED_CLIENT_ID</key>
 | 
					 | 
				
			||||||
	<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string>
 | 
					 | 
				
			||||||
	<key>PLIST_VERSION</key>
 | 
					 | 
				
			||||||
	<string>1</string>
 | 
					 | 
				
			||||||
	<key>BUNDLE_ID</key>
 | 
						<key>BUNDLE_ID</key>
 | 
				
			||||||
	<string>dev.solsynth.solian</string>
 | 
						<string>dev.solsynth.solian</string>
 | 
				
			||||||
	<key>ITSAppUsesNonExemptEncryption</key>
 | 
					 | 
				
			||||||
	<false/>
 | 
					 | 
				
			||||||
	<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
						<key>CADisableMinimumFrameDurationOnPhone</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
	<key>CFBundleDevelopmentRegion</key>
 | 
						<key>CFBundleDevelopmentRegion</key>
 | 
				
			||||||
@@ -32,8 +26,6 @@
 | 
				
			|||||||
	<string>$(FLUTTER_BUILD_NAME)</string>
 | 
						<string>$(FLUTTER_BUILD_NAME)</string>
 | 
				
			||||||
	<key>CFBundleSignature</key>
 | 
						<key>CFBundleSignature</key>
 | 
				
			||||||
	<string>????</string>
 | 
						<string>????</string>
 | 
				
			||||||
	<key>CFBundleVersion</key>
 | 
					 | 
				
			||||||
	<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
					 | 
				
			||||||
	<key>CFBundleURLTypes</key>
 | 
						<key>CFBundleURLTypes</key>
 | 
				
			||||||
	<array>
 | 
						<array>
 | 
				
			||||||
		<dict>
 | 
							<dict>
 | 
				
			||||||
@@ -45,18 +37,35 @@
 | 
				
			|||||||
			</array>
 | 
								</array>
 | 
				
			||||||
		</dict>
 | 
							</dict>
 | 
				
			||||||
	</array>
 | 
						</array>
 | 
				
			||||||
 | 
						<key>CFBundleVersion</key>
 | 
				
			||||||
 | 
						<string>$(FLUTTER_BUILD_NUMBER)</string>
 | 
				
			||||||
 | 
						<key>CLIENT_ID</key>
 | 
				
			||||||
 | 
						<string>961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig.apps.googleusercontent.com</string>
 | 
				
			||||||
 | 
						<key>ITSAppUsesNonExemptEncryption</key>
 | 
				
			||||||
 | 
						<false/>
 | 
				
			||||||
	<key>LSRequiresIPhoneOS</key>
 | 
						<key>LSRequiresIPhoneOS</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
	<key>NSCalendarsUsageDescription</key>
 | 
						<key>NSCalendarsUsageDescription</key>
 | 
				
			||||||
	<string>Grant access to Calander help us to shows Solar Calander with your own events.</string>
 | 
						<string>Grant access to Calander help us to shows Solar Calander with your own events.</string>
 | 
				
			||||||
	<key>NSCameraUsageDescription</key>
 | 
						<key>NSCameraUsageDescription</key>
 | 
				
			||||||
	<string>Grant access to Camera will allow Solian take photo or video for your post.</string>
 | 
						<string>Grant access to Camera will allow Solian take photo or video for your post.</string>
 | 
				
			||||||
 | 
						<key>NSFaceIDUsageDescription</key>
 | 
				
			||||||
 | 
						<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string>
 | 
				
			||||||
	<key>NSMicrophoneUsageDescription</key>
 | 
						<key>NSMicrophoneUsageDescription</key>
 | 
				
			||||||
	<string>Grant access to Microphone will allow Solian record audio for your post.</string>
 | 
						<string>Grant access to Microphone will allow Solian record audio for your post.</string>
 | 
				
			||||||
	<key>NSPhotoLibraryAddUsageDescription</key>
 | 
						<key>NSPhotoLibraryAddUsageDescription</key>
 | 
				
			||||||
	<string>Grant access to Photo Library will allow Solian download photo to album for you.</string>
 | 
						<string>Grant access to Photo Library will allow Solian download photo to album for you.</string>
 | 
				
			||||||
	<key>NSPhotoLibraryUsageDescription</key>
 | 
						<key>NSPhotoLibraryUsageDescription</key>
 | 
				
			||||||
	<string>Grant access to Photo Library will allow Solian upload photo or video for your post.</string>
 | 
						<string>Grant access to Photo Library will allow Solian upload photo or video for your post.</string>
 | 
				
			||||||
 | 
						<key>NSUserActivityTypes</key>
 | 
				
			||||||
 | 
						<array>
 | 
				
			||||||
 | 
							<string>INStartCallIntent</string>
 | 
				
			||||||
 | 
							<string>INSendMessageIntent</string>
 | 
				
			||||||
 | 
						</array>
 | 
				
			||||||
 | 
						<key>PLIST_VERSION</key>
 | 
				
			||||||
 | 
						<string>1</string>
 | 
				
			||||||
 | 
						<key>REVERSED_CLIENT_ID</key>
 | 
				
			||||||
 | 
						<string>com.googleusercontent.apps.961776991058-stt7et4qvn3cpscl4r61gl1hnlatqkig</string>
 | 
				
			||||||
	<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
						<key>UIApplicationSupportsIndirectInputEvents</key>
 | 
				
			||||||
	<true/>
 | 
						<true/>
 | 
				
			||||||
	<key>UIBackgroundModes</key>
 | 
						<key>UIBackgroundModes</key>
 | 
				
			||||||
@@ -74,25 +83,16 @@
 | 
				
			|||||||
	<false/>
 | 
						<false/>
 | 
				
			||||||
	<key>UISupportedInterfaceOrientations</key>
 | 
						<key>UISupportedInterfaceOrientations</key>
 | 
				
			||||||
	<array>
 | 
						<array>
 | 
				
			||||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
					 | 
				
			||||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
							<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
				
			||||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
							<string>UIInterfaceOrientationLandscapeRight</string>
 | 
				
			||||||
 | 
							<string>UIInterfaceOrientationPortrait</string>
 | 
				
			||||||
	</array>
 | 
						</array>
 | 
				
			||||||
	<key>UISupportedInterfaceOrientations~ipad</key>
 | 
						<key>UISupportedInterfaceOrientations~ipad</key>
 | 
				
			||||||
	<array>
 | 
						<array>
 | 
				
			||||||
		<string>UIInterfaceOrientationPortrait</string>
 | 
					 | 
				
			||||||
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
					 | 
				
			||||||
		<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
							<string>UIInterfaceOrientationLandscapeLeft</string>
 | 
				
			||||||
		<string>UIInterfaceOrientationLandscapeRight</string>
 | 
							<string>UIInterfaceOrientationLandscapeRight</string>
 | 
				
			||||||
	</array>
 | 
							<string>UIInterfaceOrientationPortrait</string>
 | 
				
			||||||
	<key>NSFaceIDUsageDescription</key>
 | 
							<string>UIInterfaceOrientationPortraitUpsideDown</string>
 | 
				
			||||||
	<string>Allow the Solar Network verify your ownership of the logged in account and continue your action quickly.</string>
 | 
					 | 
				
			||||||
	<key>AppGroupId</key>
 | 
					 | 
				
			||||||
	<string>$(CUSTOM_GROUP_ID)</string>
 | 
					 | 
				
			||||||
	<key>NSUserActivityTypes</key>
 | 
					 | 
				
			||||||
	<array>
 | 
					 | 
				
			||||||
		<string>INStartCallIntent</string>
 | 
					 | 
				
			||||||
		<string>INSendMessageIntent</string>
 | 
					 | 
				
			||||||
	</array>
 | 
						</array>
 | 
				
			||||||
</dict>
 | 
					</dict>
 | 
				
			||||||
</plist>
 | 
					</plist>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										37
									
								
								ios/SolianBroadcastExtension/Atomic.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								ios/SolianBroadcastExtension/Atomic.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Atomic.swift
 | 
				
			||||||
 | 
					//  Broadcast Extension
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Maksym Shcheglov.
 | 
				
			||||||
 | 
					//  https://www.onswiftwings.com/posts/atomic-property-wrapper/
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@propertyWrapper
 | 
				
			||||||
 | 
					struct Atomic<Value> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var value: Value
 | 
				
			||||||
 | 
					    private let lock = NSLock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init(wrappedValue value: Value) {
 | 
				
			||||||
 | 
					        self.value = value
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var wrappedValue: Value {
 | 
				
			||||||
 | 
					        get { load() }
 | 
				
			||||||
 | 
					        set { store(newValue: newValue) }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func load() -> Value {
 | 
				
			||||||
 | 
					        lock.lock()
 | 
				
			||||||
 | 
					        defer { lock.unlock() }
 | 
				
			||||||
 | 
					        return value
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mutating func store(newValue: Value) {
 | 
				
			||||||
 | 
					        lock.lock()
 | 
				
			||||||
 | 
					        defer { lock.unlock() }
 | 
				
			||||||
 | 
					        value = newValue
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										29
									
								
								ios/SolianBroadcastExtension/DarwinNotification.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								ios/SolianBroadcastExtension/DarwinNotification.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  DarwinNotificationCenter.swift
 | 
				
			||||||
 | 
					//  Broadcast Extension
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Alex-Dan Bumbu on 23/03/2021.
 | 
				
			||||||
 | 
					//  Copyright © 2021 8x8, Inc. All rights reserved.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum DarwinNotification: String {
 | 
				
			||||||
 | 
					    case broadcastStarted = "iOS_BroadcastStarted"
 | 
				
			||||||
 | 
					    case broadcastStopped = "iOS_BroadcastStopped"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DarwinNotificationCenter {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    static let shared = DarwinNotificationCenter()
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private let notificationCenter: CFNotificationCenter
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					        notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func postNotification(_ name: DarwinNotification) {
 | 
				
			||||||
 | 
					        CFNotificationCenterPostNotification(notificationCenter, CFNotificationName(rawValue: name.rawValue as CFString), nil, nil, true)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								ios/SolianBroadcastExtension/Info.plist
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ios/SolianBroadcastExtension/Info.plist
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
						<key>NSExtension</key>
 | 
				
			||||||
 | 
						<dict>
 | 
				
			||||||
 | 
							<key>NSExtensionPointIdentifier</key>
 | 
				
			||||||
 | 
							<string>com.apple.broadcast-services-upload</string>
 | 
				
			||||||
 | 
							<key>NSExtensionPrincipalClass</key>
 | 
				
			||||||
 | 
							<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>
 | 
				
			||||||
 | 
							<key>RPBroadcastProcessMode</key>
 | 
				
			||||||
 | 
							<string>RPBroadcastProcessModeSampleBuffer</string>
 | 
				
			||||||
 | 
						</dict>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
							
								
								
									
										103
									
								
								ios/SolianBroadcastExtension/SampleHandler.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								ios/SolianBroadcastExtension/SampleHandler.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SampleHandler.swift
 | 
				
			||||||
 | 
					//  Broadcast Extension
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Alex-Dan Bumbu on 04.06.2021.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ReplayKit
 | 
				
			||||||
 | 
					import OSLog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let broadcastLogger = OSLog(subsystem: "dev.solsynth.solian", category: "Broadcast")
 | 
				
			||||||
 | 
					private enum Constants {
 | 
				
			||||||
 | 
					    // the App Group ID value that the app and the broadcast extension targets are setup with. It differs for each app.
 | 
				
			||||||
 | 
					    static let appGroupIdentifier = "group.solsynth.solian"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SampleHandler: RPBroadcastSampleHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var clientConnection: SocketConnection?
 | 
				
			||||||
 | 
					    private var uploader: SampleUploader?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var frameCount: Int = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    var socketFilePath: String {
 | 
				
			||||||
 | 
					      let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier)
 | 
				
			||||||
 | 
					        return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? ""
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override init() {
 | 
				
			||||||
 | 
					      super.init()
 | 
				
			||||||
 | 
					        if let connection = SocketConnection(filePath: socketFilePath) {
 | 
				
			||||||
 | 
					          clientConnection = connection
 | 
				
			||||||
 | 
					          setupConnection()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          uploader = SampleUploader(connection: connection)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        os_log(.debug, log: broadcastLogger, "%{public}s", socketFilePath)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func broadcastStarted(withSetupInfo setupInfo: [String: NSObject]?) {
 | 
				
			||||||
 | 
					        // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional.
 | 
				
			||||||
 | 
					        frameCount = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        DarwinNotificationCenter.shared.postNotification(.broadcastStarted)
 | 
				
			||||||
 | 
					        openConnection()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func broadcastPaused() {
 | 
				
			||||||
 | 
					        // User has requested to pause the broadcast. Samples will stop being delivered.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func broadcastResumed() {
 | 
				
			||||||
 | 
					        // User has requested to resume the broadcast. Samples delivery will resume.
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func broadcastFinished() {
 | 
				
			||||||
 | 
					        // User has requested to finish the broadcast.
 | 
				
			||||||
 | 
					        DarwinNotificationCenter.shared.postNotification(.broadcastStopped)
 | 
				
			||||||
 | 
					        clientConnection?.close()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
 | 
				
			||||||
 | 
					        switch sampleBufferType {
 | 
				
			||||||
 | 
					        case RPSampleBufferType.video:
 | 
				
			||||||
 | 
					            uploader?.send(sample: sampleBuffer)
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private extension SampleHandler {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func setupConnection() {
 | 
				
			||||||
 | 
					        clientConnection?.didClose = { [weak self] error in
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "client connection did close \(String(describing: error))")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if let error = error {
 | 
				
			||||||
 | 
					                self?.finishBroadcastWithError(error)
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                // the displayed failure message is more user friendly when using NSError instead of Error
 | 
				
			||||||
 | 
					                let JMScreenSharingStopped = 10001
 | 
				
			||||||
 | 
					                let customError = NSError(domain: RPRecordingErrorDomain, code: JMScreenSharingStopped, userInfo: [NSLocalizedDescriptionKey: "Screen sharing stopped"])
 | 
				
			||||||
 | 
					                self?.finishBroadcastWithError(customError)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func openConnection() {
 | 
				
			||||||
 | 
					        let queue = DispatchQueue(label: "broadcast.connectTimer")
 | 
				
			||||||
 | 
					        let timer = DispatchSource.makeTimerSource(queue: queue)
 | 
				
			||||||
 | 
					        timer.schedule(deadline: .now(), repeating: .milliseconds(100), leeway: .milliseconds(500))
 | 
				
			||||||
 | 
					        timer.setEventHandler { [weak self] in
 | 
				
			||||||
 | 
					            guard self?.clientConnection?.open() == true else {
 | 
				
			||||||
 | 
					                return
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            timer.cancel()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        timer.resume()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										147
									
								
								ios/SolianBroadcastExtension/SampleUploader.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								ios/SolianBroadcastExtension/SampleUploader.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SampleUploader.swift
 | 
				
			||||||
 | 
					//  Broadcast Extension
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Alex-Dan Bumbu on 22/03/2021.
 | 
				
			||||||
 | 
					//  Copyright © 2021 8x8, Inc. All rights reserved.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					import ReplayKit
 | 
				
			||||||
 | 
					import OSLog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private enum Constants {
 | 
				
			||||||
 | 
					    static let bufferMaxLength = 10240
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SampleUploader {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private static var imageContext = CIContext(options: nil)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Atomic private var isReady = false
 | 
				
			||||||
 | 
					    private var connection: SocketConnection
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    private var dataToSend: Data?
 | 
				
			||||||
 | 
					    private var byteIndex = 0
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    private let serialQueue: DispatchQueue
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    init(connection: SocketConnection) {
 | 
				
			||||||
 | 
					        self.connection = connection
 | 
				
			||||||
 | 
					        self.serialQueue = DispatchQueue(label: "org.jitsi.meet.broadcast.sampleUploader")
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        setupConnection()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    @discardableResult func send(sample buffer: CMSampleBuffer) -> Bool {
 | 
				
			||||||
 | 
					        guard isReady else {
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        isReady = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        dataToSend = prepare(sample: buffer)
 | 
				
			||||||
 | 
					        byteIndex = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        serialQueue.async { [weak self] in
 | 
				
			||||||
 | 
					            self?.sendDataChunk()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private extension SampleUploader {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func setupConnection() {
 | 
				
			||||||
 | 
					        connection.didOpen = { [weak self] in
 | 
				
			||||||
 | 
					            self?.isReady = true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        connection.streamHasSpaceAvailable = { [weak self] in
 | 
				
			||||||
 | 
					            self?.serialQueue.async {
 | 
				
			||||||
 | 
					                if let success = self?.sendDataChunk() {
 | 
				
			||||||
 | 
					                    self?.isReady = !success
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @discardableResult func sendDataChunk() -> Bool {
 | 
				
			||||||
 | 
					        guard let dataToSend = dataToSend else {
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        var bytesLeft = dataToSend.count - byteIndex
 | 
				
			||||||
 | 
					        var length = bytesLeft > Constants.bufferMaxLength ? Constants.bufferMaxLength : bytesLeft
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        length = dataToSend[byteIndex..<(byteIndex + length)].withUnsafeBytes {
 | 
				
			||||||
 | 
					            guard let ptr = $0.bindMemory(to: UInt8.self).baseAddress else {
 | 
				
			||||||
 | 
					                return 0
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return connection.writeToStream(buffer: ptr, maxLength: length)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if length > 0 {
 | 
				
			||||||
 | 
					            byteIndex += length
 | 
				
			||||||
 | 
					            bytesLeft -= length
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if bytesLeft == 0 {
 | 
				
			||||||
 | 
					                self.dataToSend = nil
 | 
				
			||||||
 | 
					                byteIndex = 0
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "writeBufferToStream failure")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func prepare(sample buffer: CMSampleBuffer) -> Data? {
 | 
				
			||||||
 | 
					        guard let imageBuffer = CMSampleBufferGetImageBuffer(buffer) else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "image buffer not available")
 | 
				
			||||||
 | 
					            return nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        CVPixelBufferLockBaseAddress(imageBuffer, .readOnly)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let scaleFactor = 1.0
 | 
				
			||||||
 | 
					        let width = CVPixelBufferGetWidth(imageBuffer)/Int(scaleFactor)
 | 
				
			||||||
 | 
					        let height = CVPixelBufferGetHeight(imageBuffer)/Int(scaleFactor)
 | 
				
			||||||
 | 
					        let orientation = CMGetAttachment(buffer, key: RPVideoSampleOrientationKey as CFString, attachmentModeOut: nil)?.uintValue ?? 0
 | 
				
			||||||
 | 
					                                    
 | 
				
			||||||
 | 
					        let scaleTransform = CGAffineTransform(scaleX: CGFloat(1.0/scaleFactor), y: CGFloat(1.0/scaleFactor))
 | 
				
			||||||
 | 
					        let bufferData = self.jpegData(from: imageBuffer, scale: scaleTransform)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        CVPixelBufferUnlockBaseAddress(imageBuffer, .readOnly)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        guard let messageData = bufferData else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "corrupted image buffer")
 | 
				
			||||||
 | 
					            return nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					        let httpResponse = CFHTTPMessageCreateResponse(nil, 200, nil, kCFHTTPVersion1_1).takeRetainedValue()
 | 
				
			||||||
 | 
					        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Content-Length" as CFString, String(messageData.count) as CFString)
 | 
				
			||||||
 | 
					        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Width" as CFString, String(width) as CFString)
 | 
				
			||||||
 | 
					        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Height" as CFString, String(height) as CFString)
 | 
				
			||||||
 | 
					        CFHTTPMessageSetHeaderFieldValue(httpResponse, "Buffer-Orientation" as CFString, String(orientation) as CFString)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        CFHTTPMessageSetBody(httpResponse, messageData as CFData)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let serializedMessage = CFHTTPMessageCopySerializedMessage(httpResponse)?.takeRetainedValue() as Data?
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        return serializedMessage
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func jpegData(from buffer: CVPixelBuffer, scale scaleTransform: CGAffineTransform) -> Data? {
 | 
				
			||||||
 | 
					        let image = CIImage(cvPixelBuffer: buffer).transformed(by: scaleTransform)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        guard let colorSpace = image.colorSpace else {
 | 
				
			||||||
 | 
					            return nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        let options: [CIImageRepresentationOption: Float] = [kCGImageDestinationLossyCompressionQuality as CIImageRepresentationOption: 1.0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return SampleUploader.imageContext.jpegRepresentation(of: image, colorSpace: colorSpace, options: options)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										199
									
								
								ios/SolianBroadcastExtension/SocketConnection.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								ios/SolianBroadcastExtension/SocketConnection.swift
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  SocketConnection.swift
 | 
				
			||||||
 | 
					//  Broadcast Extension
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Alex-Dan Bumbu on 22/03/2021.
 | 
				
			||||||
 | 
					//  Copyright © 2021 Atlassian Inc. All rights reserved.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					import OSLog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SocketConnection: NSObject {
 | 
				
			||||||
 | 
					    var didOpen: (() -> Void)?
 | 
				
			||||||
 | 
					    var didClose: ((Error?) -> Void)?
 | 
				
			||||||
 | 
					    var streamHasSpaceAvailable: (() -> Void)?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private let filePath: String
 | 
				
			||||||
 | 
					    private var socketHandle: Int32 = -1
 | 
				
			||||||
 | 
					    private var address: sockaddr_un?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private var inputStream: InputStream?
 | 
				
			||||||
 | 
					    private var outputStream: OutputStream?
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    private var networkQueue: DispatchQueue?
 | 
				
			||||||
 | 
					    private var shouldKeepRunning = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init?(filePath path: String) {
 | 
				
			||||||
 | 
					        filePath = path
 | 
				
			||||||
 | 
					        socketHandle = Darwin.socket(AF_UNIX, SOCK_STREAM, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        guard socketHandle != -1 else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "failure: create socket")
 | 
				
			||||||
 | 
					            return nil
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func open() -> Bool {
 | 
				
			||||||
 | 
					        os_log(.debug, log: broadcastLogger, "open socket connection")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        guard FileManager.default.fileExists(atPath: filePath) else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "failure: socket file missing")
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					        guard setupAddress() == true else {
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        guard connectSocket() == true else {
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        setupStreams()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        inputStream?.open()
 | 
				
			||||||
 | 
					        outputStream?.open()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func close() {
 | 
				
			||||||
 | 
					        unscheduleStreams()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        inputStream?.delegate = nil
 | 
				
			||||||
 | 
					        outputStream?.delegate = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        inputStream?.close()
 | 
				
			||||||
 | 
					        outputStream?.close()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        inputStream = nil
 | 
				
			||||||
 | 
					        outputStream = nil
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func writeToStream(buffer: UnsafePointer<UInt8>, maxLength length: Int) -> Int {
 | 
				
			||||||
 | 
					        outputStream?.write(buffer, maxLength: length) ?? 0
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extension SocketConnection: StreamDelegate {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
 | 
				
			||||||
 | 
					        switch eventCode {
 | 
				
			||||||
 | 
					        case .openCompleted:
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "client stream open completed")
 | 
				
			||||||
 | 
					            if aStream == outputStream {
 | 
				
			||||||
 | 
					                didOpen?()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        case .hasBytesAvailable:
 | 
				
			||||||
 | 
					            if aStream == inputStream {
 | 
				
			||||||
 | 
					                var buffer: UInt8 = 0
 | 
				
			||||||
 | 
					                let numberOfBytesRead = inputStream?.read(&buffer, maxLength: 1)
 | 
				
			||||||
 | 
					                if numberOfBytesRead == 0 && aStream.streamStatus == .atEnd {
 | 
				
			||||||
 | 
					                    os_log(.debug, log: broadcastLogger, "server socket closed")
 | 
				
			||||||
 | 
					                    close()
 | 
				
			||||||
 | 
					                    notifyDidClose(error: nil)
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        case .hasSpaceAvailable:
 | 
				
			||||||
 | 
					            if aStream == outputStream {
 | 
				
			||||||
 | 
					                streamHasSpaceAvailable?()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        case .errorOccurred:
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "client stream error occured: \(String(describing: aStream.streamError))")
 | 
				
			||||||
 | 
					            close()
 | 
				
			||||||
 | 
					            notifyDidClose(error: aStream.streamError)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private extension SocketConnection {
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    func setupAddress() -> Bool {
 | 
				
			||||||
 | 
					        var addr = sockaddr_un()
 | 
				
			||||||
 | 
					        guard filePath.count < MemoryLayout.size(ofValue: addr.sun_path) else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "failure: fd path is too long")
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        _ = withUnsafeMutablePointer(to: &addr.sun_path.0) { ptr in
 | 
				
			||||||
 | 
					            filePath.withCString {
 | 
				
			||||||
 | 
					                strncpy(ptr, $0, filePath.count)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        address = addr
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func connectSocket() -> Bool {
 | 
				
			||||||
 | 
					        guard var addr = address else {
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        let status = withUnsafePointer(to: &addr) { ptr in
 | 
				
			||||||
 | 
					            ptr.withMemoryRebound(to: sockaddr.self, capacity: 1) {
 | 
				
			||||||
 | 
					                Darwin.connect(socketHandle, $0, socklen_t(MemoryLayout<sockaddr_un>.size))
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        guard status == noErr else {
 | 
				
			||||||
 | 
					            os_log(.debug, log: broadcastLogger, "failure: \(status)")
 | 
				
			||||||
 | 
					            return false
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    func setupStreams() {
 | 
				
			||||||
 | 
					        var readStream: Unmanaged<CFReadStream>?
 | 
				
			||||||
 | 
					        var writeStream: Unmanaged<CFWriteStream>?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketHandle, &readStream, &writeStream)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        inputStream = readStream?.takeRetainedValue()
 | 
				
			||||||
 | 
					        inputStream?.delegate = self
 | 
				
			||||||
 | 
					        inputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        outputStream = writeStream?.takeRetainedValue()
 | 
				
			||||||
 | 
					        outputStream?.delegate = self
 | 
				
			||||||
 | 
					        outputStream?.setProperty(kCFBooleanTrue, forKey: Stream.PropertyKey(kCFStreamPropertyShouldCloseNativeSocket as String))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        scheduleStreams()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    func scheduleStreams() {
 | 
				
			||||||
 | 
					        shouldKeepRunning = true
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        networkQueue = DispatchQueue.global(qos: .userInitiated)
 | 
				
			||||||
 | 
					        networkQueue?.async { [weak self] in
 | 
				
			||||||
 | 
					            self?.inputStream?.schedule(in: .current, forMode: .common)
 | 
				
			||||||
 | 
					            self?.outputStream?.schedule(in: .current, forMode: .common)
 | 
				
			||||||
 | 
					            RunLoop.current.run()
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var isRunning = false
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					            repeat {
 | 
				
			||||||
 | 
					                isRunning = self?.shouldKeepRunning ?? false && RunLoop.current.run(mode: .default, before: .distantFuture)
 | 
				
			||||||
 | 
					            } while (isRunning)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func unscheduleStreams() {
 | 
				
			||||||
 | 
					        networkQueue?.sync { [weak self] in
 | 
				
			||||||
 | 
					            self?.inputStream?.remove(from: .current, forMode: .common)
 | 
				
			||||||
 | 
					            self?.outputStream?.remove(from: .current, forMode: .common)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        shouldKeepRunning = false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    func notifyDidClose(error: Error?) {
 | 
				
			||||||
 | 
					        if didClose != nil {
 | 
				
			||||||
 | 
					            didClose?(error)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 | 
				
			||||||
 | 
					<plist version="1.0">
 | 
				
			||||||
 | 
					<dict>
 | 
				
			||||||
 | 
						<key>com.apple.security.application-groups</key>
 | 
				
			||||||
 | 
						<array>
 | 
				
			||||||
 | 
							<string>group.solsynth.solian</string>
 | 
				
			||||||
 | 
						</array>
 | 
				
			||||||
 | 
					</dict>
 | 
				
			||||||
 | 
					</plist>
 | 
				
			||||||
@@ -49,8 +49,7 @@ class AppDatabase extends _$AppDatabase {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<int> updateMessage(ChatMessagesCompanion message) {
 | 
					  Future<int> updateMessage(ChatMessagesCompanion message) {
 | 
				
			||||||
    return (update(chatMessages)
 | 
					    return into(chatMessages).insert(message, mode: InsertMode.insertOrReplace);
 | 
				
			||||||
      ..where((m) => m.id.equals(message.id.value))).write(message);
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<int> updateMessageStatus(String id, MessageStatus status) {
 | 
					  Future<int> updateMessageStatus(String id, MessageStatus status) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ class MessageRepository {
 | 
				
			|||||||
    if (lastMessage == null) return false;
 | 
					    if (lastMessage == null) return false;
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final resp = await _apiClient.post(
 | 
					      final resp = await _apiClient.post(
 | 
				
			||||||
        '/chat/${room.id}/sync',
 | 
					        '/sphere/chat/${room.id}/sync',
 | 
				
			||||||
        data: {
 | 
					        data: {
 | 
				
			||||||
          'last_sync_timestamp':
 | 
					          'last_sync_timestamp':
 | 
				
			||||||
              lastMessage.toRemoteMessage().updatedAt.millisecondsSinceEpoch,
 | 
					              lastMessage.toRemoteMessage().updatedAt.millisecondsSinceEpoch,
 | 
				
			||||||
@@ -154,7 +154,7 @@ class MessageRepository {
 | 
				
			|||||||
    // Use cached total count if available, otherwise fetch it
 | 
					    // Use cached total count if available, otherwise fetch it
 | 
				
			||||||
    if (_totalCount == null) {
 | 
					    if (_totalCount == null) {
 | 
				
			||||||
      final response = await _apiClient.get(
 | 
					      final response = await _apiClient.get(
 | 
				
			||||||
        '/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');
 | 
				
			||||||
@@ -165,7 +165,7 @@ class MessageRepository {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final response = await _apiClient.get(
 | 
					    final response = await _apiClient.get(
 | 
				
			||||||
      '/chat/$roomId/messages',
 | 
					      '/sphere/chat/$roomId/messages',
 | 
				
			||||||
      queryParameters: {'offset': offset, 'take': take},
 | 
					      queryParameters: {'offset': offset, 'take': take},
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -269,8 +269,8 @@ class MessageRepository {
 | 
				
			|||||||
      // Send to server
 | 
					      // Send to server
 | 
				
			||||||
      final response = await _apiClient.request(
 | 
					      final response = await _apiClient.request(
 | 
				
			||||||
        editingTo == null
 | 
					        editingTo == null
 | 
				
			||||||
            ? '/chat/$roomId/messages'
 | 
					            ? '/sphere/chat/$roomId/messages'
 | 
				
			||||||
            : '/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(),
 | 
				
			||||||
@@ -325,7 +325,7 @@ class MessageRepository {
 | 
				
			|||||||
      // Send to server
 | 
					      // Send to server
 | 
				
			||||||
      var remoteMessage = message.toRemoteMessage();
 | 
					      var remoteMessage = message.toRemoteMessage();
 | 
				
			||||||
      final response = await _apiClient.post(
 | 
					      final response = await _apiClient.post(
 | 
				
			||||||
        '/chat/${message.roomId}/messages',
 | 
					        '/sphere/chat/${message.roomId}/messages',
 | 
				
			||||||
        data: {
 | 
					        data: {
 | 
				
			||||||
          'content': remoteMessage.content,
 | 
					          'content': remoteMessage.content,
 | 
				
			||||||
          'attachments_id': remoteMessage.attachments,
 | 
					          'attachments_id': remoteMessage.attachments,
 | 
				
			||||||
@@ -423,7 +423,7 @@ class MessageRepository {
 | 
				
			|||||||
    try {
 | 
					    try {
 | 
				
			||||||
      // Update on server
 | 
					      // Update on server
 | 
				
			||||||
      final response = await _apiClient.put(
 | 
					      final response = await _apiClient.put(
 | 
				
			||||||
        '/chat/${room.id}/messages/$messageId',
 | 
					        '/sphere/chat/${room.id}/messages/$messageId',
 | 
				
			||||||
        data: {'content': content, 'attachments': attachments, 'meta': meta},
 | 
					        data: {'content': content, 'attachments': attachments, 'meta': meta},
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -444,7 +444,7 @@ class MessageRepository {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  Future<void> deleteMessage(String messageId) async {
 | 
					  Future<void> deleteMessage(String messageId) async {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      await _apiClient.delete('/chat/${room.id}/messages/$messageId');
 | 
					      await _apiClient.delete('/sphere/chat/${room.id}/messages/$messageId');
 | 
				
			||||||
      pendingMessages.remove(messageId);
 | 
					      pendingMessages.remove(messageId);
 | 
				
			||||||
      await _database.deleteMessage(messageId);
 | 
					      await _database.deleteMessage(messageId);
 | 
				
			||||||
    } catch (e) {
 | 
					    } catch (e) {
 | 
				
			||||||
@@ -464,7 +464,7 @@ class MessageRepository {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      // If not found locally, fetch from the server
 | 
					      // If not found locally, fetch from the server
 | 
				
			||||||
      final response = await _apiClient.get(
 | 
					      final response = await _apiClient.get(
 | 
				
			||||||
        '/chat/${room.id}/messages/$messageId',
 | 
					        '/sphere/chat/${room.id}/messages/$messageId',
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
					      final remoteMessage = SnChatMessage.fromJson(response.data);
 | 
				
			||||||
      final message = LocalChatMessage.fromRemoteMessage(
 | 
					      final message = LocalChatMessage.fromRemoteMessage(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,6 @@ import 'package:bitsdojo_window/bitsdojo_window.dart';
 | 
				
			|||||||
import 'package:island/pods/userinfo.dart';
 | 
					import 'package:island/pods/userinfo.dart';
 | 
				
			||||||
import 'package:island/pods/websocket.dart';
 | 
					import 'package:island/pods/websocket.dart';
 | 
				
			||||||
import 'package:island/route.dart';
 | 
					import 'package:island/route.dart';
 | 
				
			||||||
 | 
					 | 
				
			||||||
import 'package:island/services/notify.dart';
 | 
					import 'package:island/services/notify.dart';
 | 
				
			||||||
import 'package:island/services/timezone.dart';
 | 
					import 'package:island/services/timezone.dart';
 | 
				
			||||||
import 'package:island/widgets/alert.dart';
 | 
					import 'package:island/widgets/alert.dart';
 | 
				
			||||||
@@ -30,6 +29,7 @@ import 'package:shared_preferences/shared_preferences.dart';
 | 
				
			|||||||
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
 | 
					import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
 | 
				
			||||||
import 'package:flutter_native_splash/flutter_native_splash.dart';
 | 
					import 'package:flutter_native_splash/flutter_native_splash.dart';
 | 
				
			||||||
import 'package:url_launcher/url_launcher_string.dart';
 | 
					import 'package:url_launcher/url_launcher_string.dart';
 | 
				
			||||||
 | 
					import 'package:flutter_langdetect/flutter_langdetect.dart' as langdetect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@pragma('vm:entry-point')
 | 
					@pragma('vm:entry-point')
 | 
				
			||||||
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
 | 
					Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
 | 
				
			||||||
@@ -51,6 +51,7 @@ void main() async {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
 | 
					    await langdetect.initLangDetect();
 | 
				
			||||||
    await EasyLocalization.ensureInitialized();
 | 
					    await EasyLocalization.ensureInitialized();
 | 
				
			||||||
    await Firebase.initializeApp(
 | 
					    await Firebase.initializeApp(
 | 
				
			||||||
      options: DefaultFirebaseOptions.currentPlatform,
 | 
					      options: DefaultFirebaseOptions.currentPlatform,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										23
									
								
								lib/models/abuse_report.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								lib/models/abuse_report.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					import 'package:freezed_annotation/freezed_annotation.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part 'abuse_report.freezed.dart';
 | 
				
			||||||
 | 
					part 'abuse_report.g.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class SnAbuseReport with _$SnAbuseReport {
 | 
				
			||||||
 | 
					  const factory SnAbuseReport({
 | 
				
			||||||
 | 
					    required String id,
 | 
				
			||||||
 | 
					    required String resourceIdentifier,
 | 
				
			||||||
 | 
					    required int type,
 | 
				
			||||||
 | 
					    required String reason,
 | 
				
			||||||
 | 
					    required DateTime? resolvedAt,
 | 
				
			||||||
 | 
					    required String? resolution,
 | 
				
			||||||
 | 
					    required String accountId,
 | 
				
			||||||
 | 
					    required DateTime createdAt,
 | 
				
			||||||
 | 
					    required DateTime updatedAt,
 | 
				
			||||||
 | 
					    required DateTime? deletedAt,
 | 
				
			||||||
 | 
					  }) = _SnAbuseReport;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory SnAbuseReport.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					      _$SnAbuseReportFromJson(json);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										298
									
								
								lib/models/abuse_report.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										298
									
								
								lib/models/abuse_report.freezed.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,298 @@
 | 
				
			|||||||
 | 
					// 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 'abuse_report.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// FreezedGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dart format off
 | 
				
			||||||
 | 
					T _$identity<T>(T value) => value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					mixin _$SnAbuseReport {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 String get id; String get resourceIdentifier; int get type; String get reason; DateTime? get resolvedAt; String? get resolution; String get accountId; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
				
			||||||
 | 
					/// Create a copy of SnAbuseReport
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline')
 | 
				
			||||||
 | 
					$SnAbuseReportCopyWith<SnAbuseReport> get copyWith => _$SnAbuseReportCopyWithImpl<SnAbuseReport>(this as SnAbuseReport, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Serializes this SnAbuseReport to a JSON map.
 | 
				
			||||||
 | 
					  Map<String, dynamic> toJson();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnAbuseReport&&(identical(other.id, id) || other.id == id)&&(identical(other.resourceIdentifier, resourceIdentifier) || other.resourceIdentifier == resourceIdentifier)&&(identical(other.type, type) || other.type == type)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.resolvedAt, resolvedAt) || other.resolvedAt == resolvedAt)&&(identical(other.resolution, resolution) || other.resolution == resolution)&&(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)
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					int get hashCode => Object.hash(runtimeType,id,resourceIdentifier,type,reason,resolvedAt,resolution,accountId,createdAt,updatedAt,deletedAt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					String toString() {
 | 
				
			||||||
 | 
					  return 'SnAbuseReport(id: $id, resourceIdentifier: $resourceIdentifier, type: $type, reason: $reason, resolvedAt: $resolvedAt, resolution: $resolution, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					abstract mixin class $SnAbuseReportCopyWith<$Res>  {
 | 
				
			||||||
 | 
					  factory $SnAbuseReportCopyWith(SnAbuseReport value, $Res Function(SnAbuseReport) _then) = _$SnAbuseReportCopyWithImpl;
 | 
				
			||||||
 | 
					@useResult
 | 
				
			||||||
 | 
					$Res call({
 | 
				
			||||||
 | 
					 String id, String resourceIdentifier, int type, String reason, DateTime? resolvedAt, String? resolution, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					class _$SnAbuseReportCopyWithImpl<$Res>
 | 
				
			||||||
 | 
					    implements $SnAbuseReportCopyWith<$Res> {
 | 
				
			||||||
 | 
					  _$SnAbuseReportCopyWithImpl(this._self, this._then);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final SnAbuseReport _self;
 | 
				
			||||||
 | 
					  final $Res Function(SnAbuseReport) _then;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of SnAbuseReport
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? resourceIdentifier = null,Object? type = null,Object? reason = null,Object? resolvedAt = freezed,Object? resolution = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
				
			||||||
 | 
					  return _then(_self.copyWith(
 | 
				
			||||||
 | 
					id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,resourceIdentifier: null == resourceIdentifier ? _self.resourceIdentifier : resourceIdentifier // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as int,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,resolvedAt: freezed == resolvedAt ? _self.resolvedAt : resolvedAt // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as DateTime?,resolution: freezed == resolution ? _self.resolution : resolution // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String?,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 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?,
 | 
				
			||||||
 | 
					  ));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAbuseReport].
 | 
				
			||||||
 | 
					extension SnAbuseReportPatterns on SnAbuseReport {
 | 
				
			||||||
 | 
					/// 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( _SnAbuseReport value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport() 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( _SnAbuseReport value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport():
 | 
				
			||||||
 | 
					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( _SnAbuseReport value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String resourceIdentifier,  int type,  String reason,  DateTime? resolvedAt,  String? resolution,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAbuseReport() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.resourceIdentifier,_that.type,_that.reason,_that.resolvedAt,_that.resolution,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _SnAbuseReport implements SnAbuseReport {
 | 
				
			||||||
 | 
					  const _SnAbuseReport({required this.id, required this.resourceIdentifier, required this.type, required this.reason, required this.resolvedAt, required this.resolution, required this.accountId, required this.createdAt, required this.updatedAt, required this.deletedAt});
 | 
				
			||||||
 | 
					  factory _SnAbuseReport.fromJson(Map<String, dynamic> json) => _$SnAbuseReportFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override final  String id;
 | 
				
			||||||
 | 
					@override final  String resourceIdentifier;
 | 
				
			||||||
 | 
					@override final  int type;
 | 
				
			||||||
 | 
					@override final  String reason;
 | 
				
			||||||
 | 
					@override final  DateTime? resolvedAt;
 | 
				
			||||||
 | 
					@override final  String? resolution;
 | 
				
			||||||
 | 
					@override final  String accountId;
 | 
				
			||||||
 | 
					@override final  DateTime createdAt;
 | 
				
			||||||
 | 
					@override final  DateTime updatedAt;
 | 
				
			||||||
 | 
					@override final  DateTime? deletedAt;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of SnAbuseReport
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline')
 | 
				
			||||||
 | 
					_$SnAbuseReportCopyWith<_SnAbuseReport> get copyWith => __$SnAbuseReportCopyWithImpl<_SnAbuseReport>(this, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					Map<String, dynamic> toJson() {
 | 
				
			||||||
 | 
					  return _$SnAbuseReportToJson(this, );
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnAbuseReport&&(identical(other.id, id) || other.id == id)&&(identical(other.resourceIdentifier, resourceIdentifier) || other.resourceIdentifier == resourceIdentifier)&&(identical(other.type, type) || other.type == type)&&(identical(other.reason, reason) || other.reason == reason)&&(identical(other.resolvedAt, resolvedAt) || other.resolvedAt == resolvedAt)&&(identical(other.resolution, resolution) || other.resolution == resolution)&&(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)
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					int get hashCode => Object.hash(runtimeType,id,resourceIdentifier,type,reason,resolvedAt,resolution,accountId,createdAt,updatedAt,deletedAt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					String toString() {
 | 
				
			||||||
 | 
					  return 'SnAbuseReport(id: $id, resourceIdentifier: $resourceIdentifier, type: $type, reason: $reason, resolvedAt: $resolvedAt, resolution: $resolution, accountId: $accountId, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					abstract mixin class _$SnAbuseReportCopyWith<$Res> implements $SnAbuseReportCopyWith<$Res> {
 | 
				
			||||||
 | 
					  factory _$SnAbuseReportCopyWith(_SnAbuseReport value, $Res Function(_SnAbuseReport) _then) = __$SnAbuseReportCopyWithImpl;
 | 
				
			||||||
 | 
					@override @useResult
 | 
				
			||||||
 | 
					$Res call({
 | 
				
			||||||
 | 
					 String id, String resourceIdentifier, int type, String reason, DateTime? resolvedAt, String? resolution, String accountId, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					class __$SnAbuseReportCopyWithImpl<$Res>
 | 
				
			||||||
 | 
					    implements _$SnAbuseReportCopyWith<$Res> {
 | 
				
			||||||
 | 
					  __$SnAbuseReportCopyWithImpl(this._self, this._then);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final _SnAbuseReport _self;
 | 
				
			||||||
 | 
					  final $Res Function(_SnAbuseReport) _then;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of SnAbuseReport
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? resourceIdentifier = null,Object? type = null,Object? reason = null,Object? resolvedAt = freezed,Object? resolution = freezed,Object? accountId = null,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
				
			||||||
 | 
					  return _then(_SnAbuseReport(
 | 
				
			||||||
 | 
					id: null == id ? _self.id : id // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,resourceIdentifier: null == resourceIdentifier ? _self.resourceIdentifier : resourceIdentifier // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as int,reason: null == reason ? _self.reason : reason // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,resolvedAt: freezed == resolvedAt ? _self.resolvedAt : resolvedAt // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as DateTime?,resolution: freezed == resolution ? _self.resolution : resolution // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String?,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 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?,
 | 
				
			||||||
 | 
					  ));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dart format on
 | 
				
			||||||
							
								
								
									
										41
									
								
								lib/models/abuse_report.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								lib/models/abuse_report.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'abuse_report.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// JsonSerializableGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_SnAbuseReport _$SnAbuseReportFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					    _SnAbuseReport(
 | 
				
			||||||
 | 
					      id: json['id'] as String,
 | 
				
			||||||
 | 
					      resourceIdentifier: json['resource_identifier'] as String,
 | 
				
			||||||
 | 
					      type: (json['type'] as num).toInt(),
 | 
				
			||||||
 | 
					      reason: json['reason'] as String,
 | 
				
			||||||
 | 
					      resolvedAt:
 | 
				
			||||||
 | 
					          json['resolved_at'] == null
 | 
				
			||||||
 | 
					              ? null
 | 
				
			||||||
 | 
					              : DateTime.parse(json['resolved_at'] as String),
 | 
				
			||||||
 | 
					      resolution: json['resolution'] as String?,
 | 
				
			||||||
 | 
					      accountId: json['account_id'] as String,
 | 
				
			||||||
 | 
					      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> _$SnAbuseReportToJson(_SnAbuseReport instance) =>
 | 
				
			||||||
 | 
					    <String, dynamic>{
 | 
				
			||||||
 | 
					      'id': instance.id,
 | 
				
			||||||
 | 
					      'resource_identifier': instance.resourceIdentifier,
 | 
				
			||||||
 | 
					      'type': instance.type,
 | 
				
			||||||
 | 
					      'reason': instance.reason,
 | 
				
			||||||
 | 
					      'resolved_at': instance.resolvedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					      'resolution': instance.resolution,
 | 
				
			||||||
 | 
					      'account_id': instance.accountId,
 | 
				
			||||||
 | 
					      'created_at': instance.createdAt.toIso8601String(),
 | 
				
			||||||
 | 
					      'updated_at': instance.updatedAt.toIso8601String(),
 | 
				
			||||||
 | 
					      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
							
								
								
									
										38
									
								
								lib/models/abuse_report_type.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lib/models/abuse_report_type.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					enum AbuseReportType {
 | 
				
			||||||
 | 
					  copyright(0),
 | 
				
			||||||
 | 
					  harassment(1),
 | 
				
			||||||
 | 
					  impersonation(2),
 | 
				
			||||||
 | 
					  offensiveContent(3),
 | 
				
			||||||
 | 
					  spam(4),
 | 
				
			||||||
 | 
					  privacyViolation(5),
 | 
				
			||||||
 | 
					  illegalContent(6),
 | 
				
			||||||
 | 
					  other(7);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const AbuseReportType(this.value);
 | 
				
			||||||
 | 
					  final int value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static AbuseReportType fromValue(int value) {
 | 
				
			||||||
 | 
					    return values.firstWhere((e) => e.value == value);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String get displayName {
 | 
				
			||||||
 | 
					    switch (this) {
 | 
				
			||||||
 | 
					      case AbuseReportType.copyright:
 | 
				
			||||||
 | 
					        return 'Copyright';
 | 
				
			||||||
 | 
					      case AbuseReportType.harassment:
 | 
				
			||||||
 | 
					        return 'Harassment';
 | 
				
			||||||
 | 
					      case AbuseReportType.impersonation:
 | 
				
			||||||
 | 
					        return 'Impersonation';
 | 
				
			||||||
 | 
					      case AbuseReportType.offensiveContent:
 | 
				
			||||||
 | 
					        return 'Offensive Content';
 | 
				
			||||||
 | 
					      case AbuseReportType.spam:
 | 
				
			||||||
 | 
					        return 'Spam';
 | 
				
			||||||
 | 
					      case AbuseReportType.privacyViolation:
 | 
				
			||||||
 | 
					        return 'Privacy Violation';
 | 
				
			||||||
 | 
					      case AbuseReportType.illegalContent:
 | 
				
			||||||
 | 
					        return 'Illegal Content';
 | 
				
			||||||
 | 
					      case AbuseReportType.other:
 | 
				
			||||||
 | 
					        return 'Other';
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,6 +81,130 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnActivity].
 | 
				
			||||||
 | 
					extension SnActivityPatterns on SnActivity {
 | 
				
			||||||
 | 
					/// 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( _SnActivity value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity() 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( _SnActivity value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity():
 | 
				
			||||||
 | 
					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( _SnActivity value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String type,  String resourceIdentifier,  dynamic data,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnActivity() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.resourceIdentifier,_that.data,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -246,6 +369,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnCheckInResult].
 | 
				
			||||||
 | 
					extension SnCheckInResultPatterns on SnCheckInResult {
 | 
				
			||||||
 | 
					/// 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( _SnCheckInResult value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult() 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( _SnCheckInResult value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult():
 | 
				
			||||||
 | 
					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( _SnCheckInResult value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult() 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,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);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,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  int level,  List<SnFortuneTip> tips,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCheckInResult() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.level,_that.tips,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -413,6 +660,130 @@ as String,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnFortuneTip].
 | 
				
			||||||
 | 
					extension SnFortuneTipPatterns on SnFortuneTip {
 | 
				
			||||||
 | 
					/// 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( _SnFortuneTip value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip() 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( _SnFortuneTip value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip():
 | 
				
			||||||
 | 
					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( _SnFortuneTip value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isPositive,  String title,  String content)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isPositive,_that.title,_that.content);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isPositive,  String title,  String content)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip():
 | 
				
			||||||
 | 
					return $default(_that.isPositive,_that.title,_that.content);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isPositive,  String title,  String content)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnFortuneTip() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isPositive,_that.title,_that.content);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -564,6 +935,130 @@ $SnCheckInResultCopyWith<$Res>? get checkInResult {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnEventCalendarEntry].
 | 
				
			||||||
 | 
					extension SnEventCalendarEntryPatterns on SnEventCalendarEntry {
 | 
				
			||||||
 | 
					/// 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( _SnEventCalendarEntry value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry() 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( _SnEventCalendarEntry value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry():
 | 
				
			||||||
 | 
					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( _SnEventCalendarEntry value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry() 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( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.date,_that.checkInResult,_that.statuses);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( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry():
 | 
				
			||||||
 | 
					return $default(_that.date,_that.checkInResult,_that.statuses);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( DateTime date,  SnCheckInResult? checkInResult,  List<dynamic> statuses)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEventCalendarEntry() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.date,_that.checkInResult,_that.statuses);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,6 +75,130 @@ as String,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [AppToken].
 | 
				
			||||||
 | 
					extension AppTokenPatterns on AppToken {
 | 
				
			||||||
 | 
					/// 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( _AppToken value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken() 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( _AppToken value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken():
 | 
				
			||||||
 | 
					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( _AppToken value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken() 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 token)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.token);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 token)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken():
 | 
				
			||||||
 | 
					return $default(_that.token);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 token)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppToken() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.token);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -227,6 +350,130 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAuthChallenge].
 | 
				
			||||||
 | 
					extension SnAuthChallengePatterns on SnAuthChallenge {
 | 
				
			||||||
 | 
					/// 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( _SnAuthChallenge value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge() 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( _SnAuthChallenge value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge():
 | 
				
			||||||
 | 
					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( _SnAuthChallenge value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge() 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,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);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,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  DateTime expiredAt,  int stepRemain,  int stepTotal,  int failedAttempts,  int platform,  int type,  List<String> blacklistFactors,  List<dynamic> audiences,  List<dynamic> scopes,  String ipAddress,  String userAgent,  String deviceId,  String? nonce,  String? location,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthChallenge() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.expiredAt,_that.stepRemain,_that.stepTotal,_that.failedAttempts,_that.platform,_that.type,_that.blacklistFactors,_that.audiences,_that.scopes,_that.ipAddress,_that.userAgent,_that.deviceId,_that.nonce,_that.location,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -432,6 +679,130 @@ $SnAuthChallengeCopyWith<$Res> get challenge {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAuthSession].
 | 
				
			||||||
 | 
					extension SnAuthSessionPatterns on SnAuthSession {
 | 
				
			||||||
 | 
					/// 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( _SnAuthSession value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession() 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( _SnAuthSession value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession():
 | 
				
			||||||
 | 
					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( _SnAuthSession value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String? label,  DateTime lastGrantedAt,  DateTime expiredAt,  String accountId,  String challengeId,  SnAuthChallenge challenge,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthSession() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.label,_that.lastGrantedAt,_that.expiredAt,_that.accountId,_that.challengeId,_that.challenge,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -600,6 +971,130 @@ as Map<String, dynamic>?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAuthFactor].
 | 
				
			||||||
 | 
					extension SnAuthFactorPatterns on SnAuthFactor {
 | 
				
			||||||
 | 
					/// 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( _SnAuthFactor value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor() 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( _SnAuthFactor value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor():
 | 
				
			||||||
 | 
					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( _SnAuthFactor value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor() 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,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);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,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  int type,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt,  DateTime? expiredAt,  DateTime? enabledAt,  int trustworthy,  Map<String, dynamic>? createdResponse)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthFactor() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.expiredAt,_that.enabledAt,_that.trustworthy,_that.createdResponse);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -763,6 +1258,130 @@ as bool,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAuthDevice].
 | 
				
			||||||
 | 
					extension SnAuthDevicePatterns on SnAuthDevice {
 | 
				
			||||||
 | 
					/// 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( _SnAuthDevice value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice() 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( _SnAuthDevice value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice():
 | 
				
			||||||
 | 
					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( _SnAuthDevice value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice() 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( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);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( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice():
 | 
				
			||||||
 | 
					return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( dynamic label,  String userAgent,  String deviceId,  int platform,  List<SnAuthSession> sessions,  bool isCurrent)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAuthDevice() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.label,_that.userAgent,_that.deviceId,_that.platform,_that.sessions,_that.isCurrent);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -921,6 +1540,130 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnAccountConnection].
 | 
				
			||||||
 | 
					extension SnAccountConnectionPatterns on SnAccountConnection {
 | 
				
			||||||
 | 
					/// 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( _SnAccountConnection value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection() 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( _SnAccountConnection value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection():
 | 
				
			||||||
 | 
					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( _SnAccountConnection value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String accountId,  String provider,  String providedIdentifier,  Map<String, dynamic> meta,  DateTime lastUsedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnAccountConnection() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.accountId,_that.provider,_that.providedIdentifier,_that.meta,_that.lastUsedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -100,6 +99,136 @@ as List<AutoCompletionItem>,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [AutoCompletionResponse].
 | 
				
			||||||
 | 
					extension AutoCompletionResponsePatterns on AutoCompletionResponse {
 | 
				
			||||||
 | 
					/// 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( AutoCompletionAccountResponse value)?  account,TResult Function( AutoCompletionStickerResponse value)?  sticker,required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse() when account != null:
 | 
				
			||||||
 | 
					return account(_that);case AutoCompletionStickerResponse() when sticker != null:
 | 
				
			||||||
 | 
					return sticker(_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?>({required TResult Function( AutoCompletionAccountResponse value)  account,required TResult Function( AutoCompletionStickerResponse value)  sticker,}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse():
 | 
				
			||||||
 | 
					return account(_that);case AutoCompletionStickerResponse():
 | 
				
			||||||
 | 
					return sticker(_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( AutoCompletionAccountResponse value)?  account,TResult? Function( AutoCompletionStickerResponse value)?  sticker,}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse() when account != null:
 | 
				
			||||||
 | 
					return account(_that);case AutoCompletionStickerResponse() when sticker != null:
 | 
				
			||||||
 | 
					return sticker(_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 type,  List<AutoCompletionItem> items)?  account,TResult Function( String type,  List<AutoCompletionItem> items)?  sticker,required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse() when account != null:
 | 
				
			||||||
 | 
					return account(_that.type,_that.items);case AutoCompletionStickerResponse() when sticker != null:
 | 
				
			||||||
 | 
					return sticker(_that.type,_that.items);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?>({required TResult Function( String type,  List<AutoCompletionItem> items)  account,required TResult Function( String type,  List<AutoCompletionItem> items)  sticker,}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse():
 | 
				
			||||||
 | 
					return account(_that.type,_that.items);case AutoCompletionStickerResponse():
 | 
				
			||||||
 | 
					return sticker(_that.type,_that.items);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 type,  List<AutoCompletionItem> items)?  account,TResult? Function( String type,  List<AutoCompletionItem> items)?  sticker,}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case AutoCompletionAccountResponse() when account != null:
 | 
				
			||||||
 | 
					return account(_that.type,_that.items);case AutoCompletionStickerResponse() when sticker != null:
 | 
				
			||||||
 | 
					return sticker(_that.type,_that.items);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -330,6 +459,130 @@ as dynamic,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [AutoCompletionItem].
 | 
				
			||||||
 | 
					extension AutoCompletionItemPatterns on AutoCompletionItem {
 | 
				
			||||||
 | 
					/// 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( _AutoCompletionItem value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem() 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( _AutoCompletionItem value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem():
 | 
				
			||||||
 | 
					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( _AutoCompletionItem value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String displayName,  String? secondaryText,  String type,  dynamic data)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AutoCompletionItem() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.displayName,_that.secondaryText,_that.type,_that.data);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -162,8 +162,6 @@ sealed class CallParticipant with _$CallParticipant {
 | 
				
			|||||||
    required String identity,
 | 
					    required String identity,
 | 
				
			||||||
    required String name,
 | 
					    required String name,
 | 
				
			||||||
    required DateTime joinedAt,
 | 
					    required DateTime joinedAt,
 | 
				
			||||||
    required String? accountId,
 | 
					 | 
				
			||||||
    required SnChatMember? profile,
 | 
					 | 
				
			||||||
  }) = _CallParticipant;
 | 
					  }) = _CallParticipant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  factory CallParticipant.fromJson(Map<String, dynamic> json) =>
 | 
					  factory CallParticipant.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -285,11 +285,6 @@ _CallParticipant _$CallParticipantFromJson(Map<String, dynamic> json) =>
 | 
				
			|||||||
      identity: json['identity'] as String,
 | 
					      identity: json['identity'] as String,
 | 
				
			||||||
      name: json['name'] as String,
 | 
					      name: json['name'] as String,
 | 
				
			||||||
      joinedAt: DateTime.parse(json['joined_at'] as String),
 | 
					      joinedAt: DateTime.parse(json['joined_at'] as String),
 | 
				
			||||||
      accountId: json['account_id'] as String?,
 | 
					 | 
				
			||||||
      profile:
 | 
					 | 
				
			||||||
          json['profile'] == null
 | 
					 | 
				
			||||||
              ? null
 | 
					 | 
				
			||||||
              : SnChatMember.fromJson(json['profile'] as Map<String, dynamic>),
 | 
					 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Map<String, dynamic> _$CallParticipantToJson(_CallParticipant instance) =>
 | 
					Map<String, dynamic> _$CallParticipantToJson(_CallParticipant instance) =>
 | 
				
			||||||
@@ -297,8 +292,6 @@ Map<String, dynamic> _$CallParticipantToJson(_CallParticipant instance) =>
 | 
				
			|||||||
      'identity': instance.identity,
 | 
					      'identity': instance.identity,
 | 
				
			||||||
      'name': instance.name,
 | 
					      'name': instance.name,
 | 
				
			||||||
      'joined_at': instance.joinedAt.toIso8601String(),
 | 
					      'joined_at': instance.joinedAt.toIso8601String(),
 | 
				
			||||||
      'account_id': instance.accountId,
 | 
					 | 
				
			||||||
      'profile': instance.profile?.toJson(),
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_SnRealtimeCall _$SnRealtimeCallFromJson(Map<String, dynamic> json) =>
 | 
					_SnRealtimeCall _$SnRealtimeCallFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -147,6 +146,130 @@ $CustomAppLinksCopyWith<$Res>? get links {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CustomApp].
 | 
				
			||||||
 | 
					extension CustomAppPatterns on CustomApp {
 | 
				
			||||||
 | 
					/// 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( _CustomApp value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp() 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( _CustomApp value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp():
 | 
				
			||||||
 | 
					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( _CustomApp value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String name,  String? description,  int status,  SnCloudFile? picture,  SnCloudFile? background,  SnVerificationMark? verification,  CustomAppOauthConfig? oauthConfig,  CustomAppLinks? links,  List<CustomAppSecret> secrets,  String publisherId)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomApp() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.status,_that.picture,_that.background,_that.verification,_that.oauthConfig,_that.links,_that.secrets,_that.publisherId);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -370,6 +493,130 @@ as String?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CustomAppLinks].
 | 
				
			||||||
 | 
					extension CustomAppLinksPatterns on CustomAppLinks {
 | 
				
			||||||
 | 
					/// 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( _CustomAppLinks value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks() 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( _CustomAppLinks value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks():
 | 
				
			||||||
 | 
					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( _CustomAppLinks value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks() 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? homePage,  String? privacyPolicy,  String? termsOfService)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);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? homePage,  String? privacyPolicy,  String? termsOfService)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks():
 | 
				
			||||||
 | 
					return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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? homePage,  String? privacyPolicy,  String? termsOfService)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppLinks() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.homePage,_that.privacyPolicy,_that.termsOfService);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -513,6 +760,130 @@ as bool,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CustomAppOauthConfig].
 | 
				
			||||||
 | 
					extension CustomAppOauthConfigPatterns on CustomAppOauthConfig {
 | 
				
			||||||
 | 
					/// 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( _CustomAppOauthConfig value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig() 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( _CustomAppOauthConfig value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig():
 | 
				
			||||||
 | 
					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( _CustomAppOauthConfig value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig() 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? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);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? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig():
 | 
				
			||||||
 | 
					return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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? clientUri,  List<String> redirectUris,  List<String>? postLogoutRedirectUris,  List<String> allowedScopes,  List<String> allowedGrantTypes,  bool requirePkce,  bool allowOfflineAccess)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppOauthConfig() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.clientUri,_that.redirectUris,_that.postLogoutRedirectUris,_that.allowedScopes,_that.allowedGrantTypes,_that.requirePkce,_that.allowOfflineAccess);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -689,6 +1060,130 @@ as String,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CustomAppSecret].
 | 
				
			||||||
 | 
					extension CustomAppSecretPatterns on CustomAppSecret {
 | 
				
			||||||
 | 
					/// 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( _CustomAppSecret value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret() 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( _CustomAppSecret value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret():
 | 
				
			||||||
 | 
					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( _CustomAppSecret value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String secret,  String? description,  DateTime? expiredAt,  bool isOidc,  String appId)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CustomAppSecret() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.secret,_that.description,_that.expiredAt,_that.isOidc,_that.appId);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,6 +75,130 @@ as int,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [DeveloperStats].
 | 
				
			||||||
 | 
					extension DeveloperStatsPatterns on DeveloperStats {
 | 
				
			||||||
 | 
					/// 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( _DeveloperStats value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats() 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( _DeveloperStats value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats():
 | 
				
			||||||
 | 
					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( _DeveloperStats value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats() 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( int totalCustomApps)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.totalCustomApps);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( int totalCustomApps)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats():
 | 
				
			||||||
 | 
					return $default(_that.totalCustomApps);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( int totalCustomApps)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _DeveloperStats() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.totalCustomApps);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,8 @@ sealed class SnEmbedLink with _$SnEmbedLink {
 | 
				
			|||||||
    @JsonKey(name: 'Title') required String title,
 | 
					    @JsonKey(name: 'Title') required String title,
 | 
				
			||||||
    @JsonKey(name: 'Description') required String? description,
 | 
					    @JsonKey(name: 'Description') required String? description,
 | 
				
			||||||
    @JsonKey(name: 'ImageUrl') required String? imageUrl,
 | 
					    @JsonKey(name: 'ImageUrl') required String? imageUrl,
 | 
				
			||||||
    @JsonKey(name: 'FaviconUrl') required String faviconUrl,
 | 
					    @JsonKey(name: 'FaviconUrl') @Default("") String faviconUrl,
 | 
				
			||||||
    @JsonKey(name: 'SiteName') required String siteName,
 | 
					    @JsonKey(name: 'SiteName') @Default("") String siteName,
 | 
				
			||||||
    @JsonKey(name: 'ContentType') required String? contentType,
 | 
					    @JsonKey(name: 'ContentType') required String? contentType,
 | 
				
			||||||
    @JsonKey(name: 'Author') required String? author,
 | 
					    @JsonKey(name: 'Author') required String? author,
 | 
				
			||||||
    @JsonKey(name: 'PublishedDate') required DateTime? publishedDate,
 | 
					    @JsonKey(name: 'PublishedDate') required DateTime? publishedDate,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -85,11 +84,135 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnEmbedLink].
 | 
				
			||||||
 | 
					extension SnEmbedLinkPatterns on SnEmbedLink {
 | 
				
			||||||
 | 
					/// 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( _SnEmbedLink value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink() 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( _SnEmbedLink value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink():
 | 
				
			||||||
 | 
					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( _SnEmbedLink value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink() 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(@JsonKey(name: 'Type')  String type, @JsonKey(name: 'Url')  String url, @JsonKey(name: 'Title')  String title, @JsonKey(name: 'Description')  String? description, @JsonKey(name: 'ImageUrl')  String? imageUrl, @JsonKey(name: 'FaviconUrl')  String faviconUrl, @JsonKey(name: 'SiteName')  String siteName, @JsonKey(name: 'ContentType')  String? contentType, @JsonKey(name: 'Author')  String? author, @JsonKey(name: 'PublishedDate')  DateTime? publishedDate)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);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(@JsonKey(name: 'Type')  String type, @JsonKey(name: 'Url')  String url, @JsonKey(name: 'Title')  String title, @JsonKey(name: 'Description')  String? description, @JsonKey(name: 'ImageUrl')  String? imageUrl, @JsonKey(name: 'FaviconUrl')  String faviconUrl, @JsonKey(name: 'SiteName')  String siteName, @JsonKey(name: 'ContentType')  String? contentType, @JsonKey(name: 'Author')  String? author, @JsonKey(name: 'PublishedDate')  DateTime? publishedDate)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink():
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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(@JsonKey(name: 'Type')  String type, @JsonKey(name: 'Url')  String url, @JsonKey(name: 'Title')  String title, @JsonKey(name: 'Description')  String? description, @JsonKey(name: 'ImageUrl')  String? imageUrl, @JsonKey(name: 'FaviconUrl')  String faviconUrl, @JsonKey(name: 'SiteName')  String siteName, @JsonKey(name: 'ContentType')  String? contentType, @JsonKey(name: 'Author')  String? author, @JsonKey(name: 'PublishedDate')  DateTime? publishedDate)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnEmbedLink() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _SnEmbedLink implements SnEmbedLink {
 | 
					class _SnEmbedLink implements SnEmbedLink {
 | 
				
			||||||
  const _SnEmbedLink({@JsonKey(name: 'Type') required this.type, @JsonKey(name: 'Url') required this.url, @JsonKey(name: 'Title') required this.title, @JsonKey(name: 'Description') required this.description, @JsonKey(name: 'ImageUrl') required this.imageUrl, @JsonKey(name: 'FaviconUrl') required this.faviconUrl, @JsonKey(name: 'SiteName') required this.siteName, @JsonKey(name: 'ContentType') required this.contentType, @JsonKey(name: 'Author') required this.author, @JsonKey(name: 'PublishedDate') required this.publishedDate});
 | 
					  const _SnEmbedLink({@JsonKey(name: 'Type') required this.type, @JsonKey(name: 'Url') required this.url, @JsonKey(name: 'Title') required this.title, @JsonKey(name: 'Description') required this.description, @JsonKey(name: 'ImageUrl') required this.imageUrl, @JsonKey(name: 'FaviconUrl') this.faviconUrl = "", @JsonKey(name: 'SiteName') this.siteName = "", @JsonKey(name: 'ContentType') required this.contentType, @JsonKey(name: 'Author') required this.author, @JsonKey(name: 'PublishedDate') required this.publishedDate});
 | 
				
			||||||
  factory _SnEmbedLink.fromJson(Map<String, dynamic> json) => _$SnEmbedLinkFromJson(json);
 | 
					  factory _SnEmbedLink.fromJson(Map<String, dynamic> json) => _$SnEmbedLinkFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override@JsonKey(name: 'Type') final  String type;
 | 
					@override@JsonKey(name: 'Type') final  String type;
 | 
				
			||||||
@@ -245,6 +368,130 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnScrappedLink].
 | 
				
			||||||
 | 
					extension SnScrappedLinkPatterns on SnScrappedLink {
 | 
				
			||||||
 | 
					/// 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( _SnScrappedLink value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink() 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( _SnScrappedLink value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink():
 | 
				
			||||||
 | 
					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( _SnScrappedLink value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink() 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 type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);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 type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink():
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 type,  String url,  String title,  String? description,  String? imageUrl,  String faviconUrl,  String siteName,  String? contentType,  String? author,  DateTime? publishedDate)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnScrappedLink() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.url,_that.title,_that.description,_that.imageUrl,_that.faviconUrl,_that.siteName,_that.contentType,_that.author,_that.publishedDate);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ _SnEmbedLink _$SnEmbedLinkFromJson(Map<String, dynamic> json) => _SnEmbedLink(
 | 
				
			|||||||
  title: json['Title'] as String,
 | 
					  title: json['Title'] as String,
 | 
				
			||||||
  description: json['Description'] as String?,
 | 
					  description: json['Description'] as String?,
 | 
				
			||||||
  imageUrl: json['ImageUrl'] as String?,
 | 
					  imageUrl: json['ImageUrl'] as String?,
 | 
				
			||||||
  faviconUrl: json['FaviconUrl'] as String,
 | 
					  faviconUrl: json['FaviconUrl'] as String? ?? "",
 | 
				
			||||||
  siteName: json['SiteName'] as String,
 | 
					  siteName: json['SiteName'] as String? ?? "",
 | 
				
			||||||
  contentType: json['ContentType'] as String?,
 | 
					  contentType: json['ContentType'] as String?,
 | 
				
			||||||
  author: json['Author'] as String?,
 | 
					  author: json['Author'] as String?,
 | 
				
			||||||
  publishedDate:
 | 
					  publishedDate:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ sealed class UniversalFile with _$UniversalFile {
 | 
				
			|||||||
  const factory UniversalFile({
 | 
					  const factory UniversalFile({
 | 
				
			||||||
    required dynamic data,
 | 
					    required dynamic data,
 | 
				
			||||||
    required UniversalFileType type,
 | 
					    required UniversalFileType type,
 | 
				
			||||||
 | 
					    @Default(false) bool isLink,
 | 
				
			||||||
  }) = _UniversalFile;
 | 
					  }) = _UniversalFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  factory UniversalFile.fromJson(Map<String, dynamic> json) =>
 | 
					  factory UniversalFile.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
@@ -41,6 +42,7 @@ sealed class SnCloudFile with _$SnCloudFile {
 | 
				
			|||||||
    required String? description,
 | 
					    required String? description,
 | 
				
			||||||
    required Map<String, dynamic>? fileMeta,
 | 
					    required Map<String, dynamic>? fileMeta,
 | 
				
			||||||
    required Map<String, dynamic>? userMeta,
 | 
					    required Map<String, dynamic>? userMeta,
 | 
				
			||||||
 | 
					    @Default([]) List<int> sensitiveMarks,
 | 
				
			||||||
    required String? mimeType,
 | 
					    required String? mimeType,
 | 
				
			||||||
    required String? hash,
 | 
					    required String? hash,
 | 
				
			||||||
    required int size,
 | 
					    required int size,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,7 +15,7 @@ T _$identity<T>(T value) => value;
 | 
				
			|||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$UniversalFile {
 | 
					mixin _$UniversalFile {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 dynamic get data; UniversalFileType get type;
 | 
					 dynamic get data; UniversalFileType get type; bool get isLink;
 | 
				
			||||||
/// Create a copy of UniversalFile
 | 
					/// Create a copy of UniversalFile
 | 
				
			||||||
/// 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)
 | 
				
			||||||
@@ -29,16 +28,16 @@ $UniversalFileCopyWith<UniversalFile> get copyWith => _$UniversalFileCopyWithImp
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type)&&(identical(other.isLink, isLink) || other.isLink == isLink));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
 | 
					int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type,isLink);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'UniversalFile(data: $data, type: $type)';
 | 
					  return 'UniversalFile(data: $data, type: $type, isLink: $isLink)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +48,7 @@ abstract mixin class $UniversalFileCopyWith<$Res>  {
 | 
				
			|||||||
  factory $UniversalFileCopyWith(UniversalFile value, $Res Function(UniversalFile) _then) = _$UniversalFileCopyWithImpl;
 | 
					  factory $UniversalFileCopyWith(UniversalFile value, $Res Function(UniversalFile) _then) = _$UniversalFileCopyWithImpl;
 | 
				
			||||||
@useResult
 | 
					@useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 dynamic data, UniversalFileType type
 | 
					 dynamic data, UniversalFileType type, bool isLink
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,26 +65,152 @@ class _$UniversalFileCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of UniversalFile
 | 
					/// Create a copy of UniversalFile
 | 
				
			||||||
/// 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? data = freezed,Object? type = null,}) {
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? data = freezed,Object? type = null,Object? isLink = null,}) {
 | 
				
			||||||
  return _then(_self.copyWith(
 | 
					  return _then(_self.copyWith(
 | 
				
			||||||
data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
					data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
					as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as UniversalFileType,
 | 
					as UniversalFileType,isLink: null == isLink ? _self.isLink : isLink // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as bool,
 | 
				
			||||||
  ));
 | 
					  ));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [UniversalFile].
 | 
				
			||||||
 | 
					extension UniversalFilePatterns on UniversalFile {
 | 
				
			||||||
 | 
					/// 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( _UniversalFile value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile() 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( _UniversalFile value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile():
 | 
				
			||||||
 | 
					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( _UniversalFile value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile() 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( dynamic data,  UniversalFileType type,  bool isLink)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.data,_that.type,_that.isLink);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( dynamic data,  UniversalFileType type,  bool isLink)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile():
 | 
				
			||||||
 | 
					return $default(_that.data,_that.type,_that.isLink);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( dynamic data,  UniversalFileType type,  bool isLink)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _UniversalFile() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.data,_that.type,_that.isLink);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _UniversalFile extends UniversalFile {
 | 
					class _UniversalFile extends UniversalFile {
 | 
				
			||||||
  const _UniversalFile({required this.data, required this.type}): super._();
 | 
					  const _UniversalFile({required this.data, required this.type, this.isLink = false}): super._();
 | 
				
			||||||
  factory _UniversalFile.fromJson(Map<String, dynamic> json) => _$UniversalFileFromJson(json);
 | 
					  factory _UniversalFile.fromJson(Map<String, dynamic> json) => _$UniversalFileFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  dynamic data;
 | 
					@override final  dynamic data;
 | 
				
			||||||
@override final  UniversalFileType type;
 | 
					@override final  UniversalFileType type;
 | 
				
			||||||
 | 
					@override@JsonKey() final  bool isLink;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Create a copy of UniversalFile
 | 
					/// Create a copy of UniversalFile
 | 
				
			||||||
/// with the given fields replaced by the non-null parameter values.
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
@@ -100,16 +225,16 @@ Map<String, dynamic> toJson() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _UniversalFile&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.type, type) || other.type == type)&&(identical(other.isLink, isLink) || other.isLink == isLink));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type);
 | 
					int get hashCode => Object.hash(runtimeType,const DeepCollectionEquality().hash(data),type,isLink);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'UniversalFile(data: $data, type: $type)';
 | 
					  return 'UniversalFile(data: $data, type: $type, isLink: $isLink)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,7 +245,7 @@ abstract mixin class _$UniversalFileCopyWith<$Res> implements $UniversalFileCopy
 | 
				
			|||||||
  factory _$UniversalFileCopyWith(_UniversalFile value, $Res Function(_UniversalFile) _then) = __$UniversalFileCopyWithImpl;
 | 
					  factory _$UniversalFileCopyWith(_UniversalFile value, $Res Function(_UniversalFile) _then) = __$UniversalFileCopyWithImpl;
 | 
				
			||||||
@override @useResult
 | 
					@override @useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 dynamic data, UniversalFileType type
 | 
					 dynamic data, UniversalFileType type, bool isLink
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -137,11 +262,12 @@ class __$UniversalFileCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of UniversalFile
 | 
					/// Create a copy of UniversalFile
 | 
				
			||||||
/// 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? data = freezed,Object? type = null,}) {
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? data = freezed,Object? type = null,Object? isLink = null,}) {
 | 
				
			||||||
  return _then(_UniversalFile(
 | 
					  return _then(_UniversalFile(
 | 
				
			||||||
data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
					data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
					as dynamic,type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as UniversalFileType,
 | 
					as UniversalFileType,isLink: null == isLink ? _self.isLink : isLink // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as bool,
 | 
				
			||||||
  ));
 | 
					  ));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -152,7 +278,7 @@ as UniversalFileType,
 | 
				
			|||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$SnCloudFile {
 | 
					mixin _$SnCloudFile {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 String get id; String get name; String? get description; Map<String, dynamic>? get fileMeta; Map<String, dynamic>? get userMeta; String? get mimeType; String? get hash; int get size; DateTime? get uploadedAt; String? get uploadedTo; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
					 String get id; String get name; String? get description; Map<String, dynamic>? get fileMeta; Map<String, dynamic>? get userMeta; List<int> get sensitiveMarks; String? get mimeType; String? get hash; int get size; DateTime? get uploadedAt; String? get uploadedTo; DateTime get createdAt; DateTime get updatedAt; DateTime? get deletedAt;
 | 
				
			||||||
/// Create a copy of SnCloudFile
 | 
					/// Create a copy of SnCloudFile
 | 
				
			||||||
/// 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)
 | 
				
			||||||
@@ -165,16 +291,16 @@ $SnCloudFileCopyWith<SnCloudFile> get copyWith => _$SnCloudFileCopyWithImpl<SnCl
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other.fileMeta, fileMeta)&&const DeepCollectionEquality().equals(other.userMeta, userMeta)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(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 SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other.fileMeta, fileMeta)&&const DeepCollectionEquality().equals(other.userMeta, userMeta)&&const DeepCollectionEquality().equals(other.sensitiveMarks, sensitiveMarks)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(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,name,description,const DeepCollectionEquality().hash(fileMeta),const DeepCollectionEquality().hash(userMeta),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
					int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(fileMeta),const DeepCollectionEquality().hash(userMeta),const DeepCollectionEquality().hash(sensitiveMarks),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
					  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, sensitiveMarks: $sensitiveMarks, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -185,7 +311,7 @@ abstract mixin class $SnCloudFileCopyWith<$Res>  {
 | 
				
			|||||||
  factory $SnCloudFileCopyWith(SnCloudFile value, $Res Function(SnCloudFile) _then) = _$SnCloudFileCopyWithImpl;
 | 
					  factory $SnCloudFileCopyWith(SnCloudFile value, $Res Function(SnCloudFile) _then) = _$SnCloudFileCopyWithImpl;
 | 
				
			||||||
@useResult
 | 
					@useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
					 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, List<int> sensitiveMarks, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -202,14 +328,15 @@ class _$SnCloudFileCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of SnCloudFile
 | 
					/// Create a copy of SnCloudFile
 | 
				
			||||||
/// 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 = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? sensitiveMarks = null,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,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,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: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
					as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,fileMeta: freezed == fileMeta ? _self.fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
					as String?,fileMeta: freezed == fileMeta ? _self.fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self.userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self.userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,sensitiveMarks: null == sensitiveMarks ? _self.sensitiveMarks : sensitiveMarks // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as List<int>,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
					as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
					as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
					as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
@@ -224,11 +351,135 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnCloudFile].
 | 
				
			||||||
 | 
					extension SnCloudFilePatterns on SnCloudFile {
 | 
				
			||||||
 | 
					/// 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( _SnCloudFile value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile() 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( _SnCloudFile value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile():
 | 
				
			||||||
 | 
					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( _SnCloudFile value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String name,  String? description,  Map<String, dynamic>? fileMeta,  Map<String, dynamic>? userMeta,  List<int> sensitiveMarks,  String? mimeType,  String? hash,  int size,  DateTime? uploadedAt,  String? uploadedTo,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnCloudFile() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.name,_that.description,_that.fileMeta,_that.userMeta,_that.sensitiveMarks,_that.mimeType,_that.hash,_that.size,_that.uploadedAt,_that.uploadedTo,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _SnCloudFile implements SnCloudFile {
 | 
					class _SnCloudFile implements SnCloudFile {
 | 
				
			||||||
  const _SnCloudFile({required this.id, required this.name, required this.description, required final  Map<String, dynamic>? fileMeta, required final  Map<String, dynamic>? userMeta, required this.mimeType, required this.hash, required this.size, required this.uploadedAt, required this.uploadedTo, required this.createdAt, required this.updatedAt, required this.deletedAt}): _fileMeta = fileMeta,_userMeta = userMeta;
 | 
					  const _SnCloudFile({required this.id, required this.name, required this.description, required final  Map<String, dynamic>? fileMeta, required final  Map<String, dynamic>? userMeta, final  List<int> sensitiveMarks = const [], required this.mimeType, required this.hash, required this.size, required this.uploadedAt, required this.uploadedTo, required this.createdAt, required this.updatedAt, required this.deletedAt}): _fileMeta = fileMeta,_userMeta = userMeta,_sensitiveMarks = sensitiveMarks;
 | 
				
			||||||
  factory _SnCloudFile.fromJson(Map<String, dynamic> json) => _$SnCloudFileFromJson(json);
 | 
					  factory _SnCloudFile.fromJson(Map<String, dynamic> json) => _$SnCloudFileFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  String id;
 | 
					@override final  String id;
 | 
				
			||||||
@@ -252,6 +503,13 @@ class _SnCloudFile implements SnCloudFile {
 | 
				
			|||||||
  return EqualUnmodifiableMapView(value);
 | 
					  return EqualUnmodifiableMapView(value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 final  List<int> _sensitiveMarks;
 | 
				
			||||||
 | 
					@override@JsonKey() List<int> get sensitiveMarks {
 | 
				
			||||||
 | 
					  if (_sensitiveMarks is EqualUnmodifiableListView) return _sensitiveMarks;
 | 
				
			||||||
 | 
					  // ignore: implicit_dynamic_type
 | 
				
			||||||
 | 
					  return EqualUnmodifiableListView(_sensitiveMarks);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  String? mimeType;
 | 
					@override final  String? mimeType;
 | 
				
			||||||
@override final  String? hash;
 | 
					@override final  String? hash;
 | 
				
			||||||
@override final  int size;
 | 
					@override final  int size;
 | 
				
			||||||
@@ -274,16 +532,16 @@ Map<String, dynamic> toJson() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other._fileMeta, _fileMeta)&&const DeepCollectionEquality().equals(other._userMeta, _userMeta)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(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 _SnCloudFile&&(identical(other.id, id) || other.id == id)&&(identical(other.name, name) || other.name == name)&&(identical(other.description, description) || other.description == description)&&const DeepCollectionEquality().equals(other._fileMeta, _fileMeta)&&const DeepCollectionEquality().equals(other._userMeta, _userMeta)&&const DeepCollectionEquality().equals(other._sensitiveMarks, _sensitiveMarks)&&(identical(other.mimeType, mimeType) || other.mimeType == mimeType)&&(identical(other.hash, hash) || other.hash == hash)&&(identical(other.size, size) || other.size == size)&&(identical(other.uploadedAt, uploadedAt) || other.uploadedAt == uploadedAt)&&(identical(other.uploadedTo, uploadedTo) || other.uploadedTo == uploadedTo)&&(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,name,description,const DeepCollectionEquality().hash(_fileMeta),const DeepCollectionEquality().hash(_userMeta),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
					int get hashCode => Object.hash(runtimeType,id,name,description,const DeepCollectionEquality().hash(_fileMeta),const DeepCollectionEquality().hash(_userMeta),const DeepCollectionEquality().hash(_sensitiveMarks),mimeType,hash,size,uploadedAt,uploadedTo,createdAt,updatedAt,deletedAt);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
					  return 'SnCloudFile(id: $id, name: $name, description: $description, fileMeta: $fileMeta, userMeta: $userMeta, sensitiveMarks: $sensitiveMarks, mimeType: $mimeType, hash: $hash, size: $size, uploadedAt: $uploadedAt, uploadedTo: $uploadedTo, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -294,7 +552,7 @@ abstract mixin class _$SnCloudFileCopyWith<$Res> implements $SnCloudFileCopyWith
 | 
				
			|||||||
  factory _$SnCloudFileCopyWith(_SnCloudFile value, $Res Function(_SnCloudFile) _then) = __$SnCloudFileCopyWithImpl;
 | 
					  factory _$SnCloudFileCopyWith(_SnCloudFile value, $Res Function(_SnCloudFile) _then) = __$SnCloudFileCopyWithImpl;
 | 
				
			||||||
@override @useResult
 | 
					@override @useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
					 String id, String name, String? description, Map<String, dynamic>? fileMeta, Map<String, dynamic>? userMeta, List<int> sensitiveMarks, String? mimeType, String? hash, int size, DateTime? uploadedAt, String? uploadedTo, DateTime createdAt, DateTime updatedAt, DateTime? deletedAt
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -311,14 +569,15 @@ class __$SnCloudFileCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of SnCloudFile
 | 
					/// Create a copy of SnCloudFile
 | 
				
			||||||
/// 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 = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? name = null,Object? description = freezed,Object? fileMeta = freezed,Object? userMeta = freezed,Object? sensitiveMarks = null,Object? mimeType = freezed,Object? hash = freezed,Object? size = null,Object? uploadedAt = freezed,Object? uploadedTo = freezed,Object? createdAt = null,Object? updatedAt = null,Object? deletedAt = freezed,}) {
 | 
				
			||||||
  return _then(_SnCloudFile(
 | 
					  return _then(_SnCloudFile(
 | 
				
			||||||
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: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
					as String,description: freezed == description ? _self.description : description // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,fileMeta: freezed == fileMeta ? _self._fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
					as String?,fileMeta: freezed == fileMeta ? _self._fileMeta : fileMeta // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self._userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,userMeta: freezed == userMeta ? _self._userMeta : userMeta // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,sensitiveMarks: null == sensitiveMarks ? _self._sensitiveMarks : sensitiveMarks // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as List<int>,mimeType: freezed == mimeType ? _self.mimeType : mimeType // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
					as String?,hash: freezed == hash ? _self.hash : hash // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
					as String?,size: null == size ? _self.size : size // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
					as int,uploadedAt: freezed == uploadedAt ? _self.uploadedAt : uploadedAt // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,12 +10,14 @@ _UniversalFile _$UniversalFileFromJson(Map<String, dynamic> json) =>
 | 
				
			|||||||
    _UniversalFile(
 | 
					    _UniversalFile(
 | 
				
			||||||
      data: json['data'],
 | 
					      data: json['data'],
 | 
				
			||||||
      type: $enumDecode(_$UniversalFileTypeEnumMap, json['type']),
 | 
					      type: $enumDecode(_$UniversalFileTypeEnumMap, json['type']),
 | 
				
			||||||
 | 
					      isLink: json['is_link'] as bool? ?? false,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Map<String, dynamic> _$UniversalFileToJson(_UniversalFile instance) =>
 | 
					Map<String, dynamic> _$UniversalFileToJson(_UniversalFile instance) =>
 | 
				
			||||||
    <String, dynamic>{
 | 
					    <String, dynamic>{
 | 
				
			||||||
      'data': instance.data,
 | 
					      'data': instance.data,
 | 
				
			||||||
      'type': _$UniversalFileTypeEnumMap[instance.type]!,
 | 
					      'type': _$UniversalFileTypeEnumMap[instance.type]!,
 | 
				
			||||||
 | 
					      'is_link': instance.isLink,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const _$UniversalFileTypeEnumMap = {
 | 
					const _$UniversalFileTypeEnumMap = {
 | 
				
			||||||
@@ -31,6 +33,11 @@ _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>?,
 | 
				
			||||||
 | 
					  sensitiveMarks:
 | 
				
			||||||
 | 
					      (json['sensitive_marks'] as List<dynamic>?)
 | 
				
			||||||
 | 
					          ?.map((e) => (e as num).toInt())
 | 
				
			||||||
 | 
					          .toList() ??
 | 
				
			||||||
 | 
					      const [],
 | 
				
			||||||
  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(),
 | 
				
			||||||
@@ -54,6 +61,7 @@ Map<String, dynamic> _$SnCloudFileToJson(_SnCloudFile instance) =>
 | 
				
			|||||||
      'description': instance.description,
 | 
					      'description': instance.description,
 | 
				
			||||||
      'file_meta': instance.fileMeta,
 | 
					      'file_meta': instance.fileMeta,
 | 
				
			||||||
      'user_meta': instance.userMeta,
 | 
					      'user_meta': instance.userMeta,
 | 
				
			||||||
 | 
					      'sensitive_marks': instance.sensitiveMarks,
 | 
				
			||||||
      'mime_type': instance.mimeType,
 | 
					      'mime_type': instance.mimeType,
 | 
				
			||||||
      'hash': instance.hash,
 | 
					      'hash': instance.hash,
 | 
				
			||||||
      'size': instance.size,
 | 
					      'size': instance.size,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										92
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								lib/models/poll.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
				
			|||||||
 | 
					import 'package:freezed_annotation/freezed_annotation.dart';
 | 
				
			||||||
 | 
					import 'package:island/models/publisher.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part 'poll.freezed.dart';
 | 
				
			||||||
 | 
					part 'poll.g.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class SnPollWithStats with _$SnPollWithStats {
 | 
				
			||||||
 | 
					  const factory SnPollWithStats({
 | 
				
			||||||
 | 
					    required Map<String, dynamic>? userAnswer,
 | 
				
			||||||
 | 
					    required Map<String, dynamic> stats,
 | 
				
			||||||
 | 
					    required String id,
 | 
				
			||||||
 | 
					    required List<SnPollQuestion> questions,
 | 
				
			||||||
 | 
					    String? title,
 | 
				
			||||||
 | 
					    String? description,
 | 
				
			||||||
 | 
					    DateTime? endedAt,
 | 
				
			||||||
 | 
					    required String publisherId,
 | 
				
			||||||
 | 
					    required DateTime createdAt,
 | 
				
			||||||
 | 
					    required DateTime updatedAt,
 | 
				
			||||||
 | 
					    DateTime? deletedAt,
 | 
				
			||||||
 | 
					  }) = _SnPollWithStats;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory SnPollWithStats.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					      _$SnPollWithStatsFromJson(json);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class SnPoll with _$SnPoll {
 | 
				
			||||||
 | 
					  const factory SnPoll({
 | 
				
			||||||
 | 
					    required String id,
 | 
				
			||||||
 | 
					    required List<SnPollQuestion> questions,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String? title,
 | 
				
			||||||
 | 
					    String? description,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    DateTime? endedAt,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    required String publisherId,
 | 
				
			||||||
 | 
					    SnPublisher? publisher,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // ModelBase fields
 | 
				
			||||||
 | 
					    required DateTime createdAt,
 | 
				
			||||||
 | 
					    required DateTime updatedAt,
 | 
				
			||||||
 | 
					    DateTime? deletedAt,
 | 
				
			||||||
 | 
					  }) = _SnPoll;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory SnPoll.fromJson(Map<String, dynamic> json) => _$SnPollFromJson(json);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class SnPollQuestion with _$SnPollQuestion {
 | 
				
			||||||
 | 
					  const factory SnPollQuestion({
 | 
				
			||||||
 | 
					    required String id,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    required SnPollQuestionType type,
 | 
				
			||||||
 | 
					    List<SnPollOption>? options,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    required String title,
 | 
				
			||||||
 | 
					    String? description,
 | 
				
			||||||
 | 
					    required int order,
 | 
				
			||||||
 | 
					    required bool isRequired,
 | 
				
			||||||
 | 
					  }) = _SnPollQuestion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory SnPollQuestion.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					      _$SnPollQuestionFromJson(json);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class SnPollOption with _$SnPollOption {
 | 
				
			||||||
 | 
					  const factory SnPollOption({
 | 
				
			||||||
 | 
					    required String id,
 | 
				
			||||||
 | 
					    required String label,
 | 
				
			||||||
 | 
					    String? description,
 | 
				
			||||||
 | 
					    required int order,
 | 
				
			||||||
 | 
					  }) = _SnPollOption;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  factory SnPollOption.fromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					      _$SnPollOptionFromJson(json);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum SnPollQuestionType {
 | 
				
			||||||
 | 
					  @JsonValue(0)
 | 
				
			||||||
 | 
					  singleChoice,
 | 
				
			||||||
 | 
					  @JsonValue(1)
 | 
				
			||||||
 | 
					  multipleChoice,
 | 
				
			||||||
 | 
					  @JsonValue(2)
 | 
				
			||||||
 | 
					  yesNo,
 | 
				
			||||||
 | 
					  @JsonValue(3)
 | 
				
			||||||
 | 
					  rating,
 | 
				
			||||||
 | 
					  @JsonValue(4)
 | 
				
			||||||
 | 
					  freeText,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1186
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1186
									
								
								lib/models/poll.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										133
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								lib/models/poll.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,133 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'poll.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// JsonSerializableGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_SnPollWithStats _$SnPollWithStatsFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					    _SnPollWithStats(
 | 
				
			||||||
 | 
					      userAnswer: json['user_answer'] as Map<String, dynamic>?,
 | 
				
			||||||
 | 
					      stats: json['stats'] as Map<String, dynamic>,
 | 
				
			||||||
 | 
					      id: json['id'] as String,
 | 
				
			||||||
 | 
					      questions:
 | 
				
			||||||
 | 
					          (json['questions'] as List<dynamic>)
 | 
				
			||||||
 | 
					              .map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
 | 
				
			||||||
 | 
					              .toList(),
 | 
				
			||||||
 | 
					      title: json['title'] as String?,
 | 
				
			||||||
 | 
					      description: json['description'] as String?,
 | 
				
			||||||
 | 
					      endedAt:
 | 
				
			||||||
 | 
					          json['ended_at'] == null
 | 
				
			||||||
 | 
					              ? null
 | 
				
			||||||
 | 
					              : DateTime.parse(json['ended_at'] as String),
 | 
				
			||||||
 | 
					      publisherId: json['publisher_id'] as String,
 | 
				
			||||||
 | 
					      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> _$SnPollWithStatsToJson(_SnPollWithStats instance) =>
 | 
				
			||||||
 | 
					    <String, dynamic>{
 | 
				
			||||||
 | 
					      'user_answer': instance.userAnswer,
 | 
				
			||||||
 | 
					      'stats': instance.stats,
 | 
				
			||||||
 | 
					      'id': instance.id,
 | 
				
			||||||
 | 
					      'questions': instance.questions.map((e) => e.toJson()).toList(),
 | 
				
			||||||
 | 
					      'title': instance.title,
 | 
				
			||||||
 | 
					      'description': instance.description,
 | 
				
			||||||
 | 
					      'ended_at': instance.endedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					      'publisher_id': instance.publisherId,
 | 
				
			||||||
 | 
					      'created_at': instance.createdAt.toIso8601String(),
 | 
				
			||||||
 | 
					      'updated_at': instance.updatedAt.toIso8601String(),
 | 
				
			||||||
 | 
					      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_SnPoll _$SnPollFromJson(Map<String, dynamic> json) => _SnPoll(
 | 
				
			||||||
 | 
					  id: json['id'] as String,
 | 
				
			||||||
 | 
					  questions:
 | 
				
			||||||
 | 
					      (json['questions'] as List<dynamic>)
 | 
				
			||||||
 | 
					          .map((e) => SnPollQuestion.fromJson(e as Map<String, dynamic>))
 | 
				
			||||||
 | 
					          .toList(),
 | 
				
			||||||
 | 
					  title: json['title'] as String?,
 | 
				
			||||||
 | 
					  description: json['description'] as String?,
 | 
				
			||||||
 | 
					  endedAt:
 | 
				
			||||||
 | 
					      json['ended_at'] == null
 | 
				
			||||||
 | 
					          ? null
 | 
				
			||||||
 | 
					          : DateTime.parse(json['ended_at'] as String),
 | 
				
			||||||
 | 
					  publisherId: json['publisher_id'] as String,
 | 
				
			||||||
 | 
					  publisher:
 | 
				
			||||||
 | 
					      json['publisher'] == null
 | 
				
			||||||
 | 
					          ? null
 | 
				
			||||||
 | 
					          : SnPublisher.fromJson(json['publisher'] 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> _$SnPollToJson(_SnPoll instance) => <String, dynamic>{
 | 
				
			||||||
 | 
					  'id': instance.id,
 | 
				
			||||||
 | 
					  'questions': instance.questions.map((e) => e.toJson()).toList(),
 | 
				
			||||||
 | 
					  'title': instance.title,
 | 
				
			||||||
 | 
					  'description': instance.description,
 | 
				
			||||||
 | 
					  'ended_at': instance.endedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					  'publisher_id': instance.publisherId,
 | 
				
			||||||
 | 
					  'publisher': instance.publisher?.toJson(),
 | 
				
			||||||
 | 
					  'created_at': instance.createdAt.toIso8601String(),
 | 
				
			||||||
 | 
					  'updated_at': instance.updatedAt.toIso8601String(),
 | 
				
			||||||
 | 
					  'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_SnPollQuestion _$SnPollQuestionFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					    _SnPollQuestion(
 | 
				
			||||||
 | 
					      id: json['id'] as String,
 | 
				
			||||||
 | 
					      type: $enumDecode(_$SnPollQuestionTypeEnumMap, json['type']),
 | 
				
			||||||
 | 
					      options:
 | 
				
			||||||
 | 
					          (json['options'] as List<dynamic>?)
 | 
				
			||||||
 | 
					              ?.map((e) => SnPollOption.fromJson(e as Map<String, dynamic>))
 | 
				
			||||||
 | 
					              .toList(),
 | 
				
			||||||
 | 
					      title: json['title'] as String,
 | 
				
			||||||
 | 
					      description: json['description'] as String?,
 | 
				
			||||||
 | 
					      order: (json['order'] as num).toInt(),
 | 
				
			||||||
 | 
					      isRequired: json['is_required'] as bool,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Map<String, dynamic> _$SnPollQuestionToJson(_SnPollQuestion instance) =>
 | 
				
			||||||
 | 
					    <String, dynamic>{
 | 
				
			||||||
 | 
					      'id': instance.id,
 | 
				
			||||||
 | 
					      'type': _$SnPollQuestionTypeEnumMap[instance.type]!,
 | 
				
			||||||
 | 
					      'options': instance.options?.map((e) => e.toJson()).toList(),
 | 
				
			||||||
 | 
					      'title': instance.title,
 | 
				
			||||||
 | 
					      'description': instance.description,
 | 
				
			||||||
 | 
					      'order': instance.order,
 | 
				
			||||||
 | 
					      'is_required': instance.isRequired,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const _$SnPollQuestionTypeEnumMap = {
 | 
				
			||||||
 | 
					  SnPollQuestionType.singleChoice: 0,
 | 
				
			||||||
 | 
					  SnPollQuestionType.multipleChoice: 1,
 | 
				
			||||||
 | 
					  SnPollQuestionType.yesNo: 2,
 | 
				
			||||||
 | 
					  SnPollQuestionType.rating: 3,
 | 
				
			||||||
 | 
					  SnPollQuestionType.freeText: 4,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_SnPollOption _$SnPollOptionFromJson(Map<String, dynamic> json) =>
 | 
				
			||||||
 | 
					    _SnPollOption(
 | 
				
			||||||
 | 
					      id: json['id'] as String,
 | 
				
			||||||
 | 
					      label: json['label'] as String,
 | 
				
			||||||
 | 
					      description: json['description'] as String?,
 | 
				
			||||||
 | 
					      order: (json['order'] as num).toInt(),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Map<String, dynamic> _$SnPollOptionToJson(_SnPollOption instance) =>
 | 
				
			||||||
 | 
					    <String, dynamic>{
 | 
				
			||||||
 | 
					      'id': instance.id,
 | 
				
			||||||
 | 
					      'label': instance.label,
 | 
				
			||||||
 | 
					      'description': instance.description,
 | 
				
			||||||
 | 
					      'order': instance.order,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
@@ -34,6 +34,7 @@ sealed class SnPost with _$SnPost {
 | 
				
			|||||||
    @Default([]) List<SnCloudFile> attachments,
 | 
					    @Default([]) List<SnCloudFile> attachments,
 | 
				
			||||||
    required SnPublisher publisher,
 | 
					    required SnPublisher publisher,
 | 
				
			||||||
    @Default({}) Map<String, int> reactionsCount,
 | 
					    @Default({}) Map<String, int> reactionsCount,
 | 
				
			||||||
 | 
					    @Default({}) Map<String, bool> reactionsMade,
 | 
				
			||||||
    @Default([]) List<dynamic> reactions,
 | 
					    @Default([]) List<dynamic> reactions,
 | 
				
			||||||
    @Default([]) List<PostTag> tags,
 | 
					    @Default([]) List<PostTag> tags,
 | 
				
			||||||
    @Default([]) List<PostCategory> categories,
 | 
					    @Default([]) List<PostCategory> categories,
 | 
				
			||||||
@@ -77,6 +78,13 @@ sealed class SnSubscriptionStatus with _$SnSubscriptionStatus {
 | 
				
			|||||||
sealed class ReactInfo with _$ReactInfo {
 | 
					sealed class ReactInfo with _$ReactInfo {
 | 
				
			||||||
  const factory ReactInfo({required String icon, required int attitude}) =
 | 
					  const factory ReactInfo({required String icon, required int attitude}) =
 | 
				
			||||||
      _ReactInfo;
 | 
					      _ReactInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static String getTranslationKey(String templateKey) {
 | 
				
			||||||
 | 
					    final parts = templateKey.split('_');
 | 
				
			||||||
 | 
					    final camelCase =
 | 
				
			||||||
 | 
					        parts.map((p) => p[0].toUpperCase() + p.substring(1)).join();
 | 
				
			||||||
 | 
					    return 'reaction$camelCase';
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Map<String, ReactInfo> kReactionTemplates = {
 | 
					const Map<String, ReactInfo> kReactionTemplates = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -16,7 +15,7 @@ T _$identity<T>(T value) => value;
 | 
				
			|||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$SnPost {
 | 
					mixin _$SnPost {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 String get id; String? get title; String? get description; String? get language; DateTime? get editedAt; DateTime? get publishedAt; int get visibility; String? get content; int get type; Map<String, dynamic>? get meta; int get viewsUnique; int get viewsTotal; int get upvotes; int get downvotes; int get repliesCount; String? get threadedPostId; SnPost? get threadedPost; String? get repliedPostId; SnPost? get repliedPost; String? get forwardedPostId; SnPost? get forwardedPost; List<SnCloudFile> get attachments; SnPublisher get publisher; Map<String, int> get reactionsCount; List<dynamic> get reactions; List<PostTag> get tags; List<PostCategory> get categories; List<dynamic> get collections; DateTime? get createdAt; DateTime? get updatedAt; DateTime? get deletedAt; bool get isTruncated;
 | 
					 String get id; String? get title; String? get description; String? get language; DateTime? get editedAt; DateTime? get publishedAt; int get visibility; String? get content; int get type; Map<String, dynamic>? get meta; int get viewsUnique; int get viewsTotal; int get upvotes; int get downvotes; int get repliesCount; String? get threadedPostId; SnPost? get threadedPost; String? get repliedPostId; SnPost? get repliedPost; String? get forwardedPostId; SnPost? get forwardedPost; List<SnCloudFile> get attachments; SnPublisher get publisher; Map<String, int> get reactionsCount; Map<String, bool> get reactionsMade; List<dynamic> get reactions; List<PostTag> get tags; List<PostCategory> get categories; List<dynamic> get collections; DateTime? get createdAt; DateTime? get updatedAt; DateTime? get deletedAt; bool get isTruncated;
 | 
				
			||||||
/// Create a copy of SnPost
 | 
					/// Create a copy of SnPost
 | 
				
			||||||
/// 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)
 | 
				
			||||||
@@ -29,16 +28,16 @@ $SnPostCopyWith<SnPost> get copyWith => _$SnPostCopyWithImpl<SnPost>(this as SnP
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.meta, meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other.attachments, attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other.reactionsCount, reactionsCount)&&const DeepCollectionEquality().equals(other.reactions, reactions)&&const DeepCollectionEquality().equals(other.tags, tags)&&const DeepCollectionEquality().equals(other.categories, categories)&&const DeepCollectionEquality().equals(other.collections, collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.meta, meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other.attachments, attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other.reactionsCount, reactionsCount)&&const DeepCollectionEquality().equals(other.reactionsMade, reactionsMade)&&const DeepCollectionEquality().equals(other.reactions, reactions)&&const DeepCollectionEquality().equals(other.tags, tags)&&const DeepCollectionEquality().equals(other.categories, categories)&&const DeepCollectionEquality().equals(other.collections, collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(attachments),publisher,const DeepCollectionEquality().hash(reactionsCount),const DeepCollectionEquality().hash(reactions),const DeepCollectionEquality().hash(tags),const DeepCollectionEquality().hash(categories),const DeepCollectionEquality().hash(collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
					int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(attachments),publisher,const DeepCollectionEquality().hash(reactionsCount),const DeepCollectionEquality().hash(reactionsMade),const DeepCollectionEquality().hash(reactions),const DeepCollectionEquality().hash(tags),const DeepCollectionEquality().hash(categories),const DeepCollectionEquality().hash(collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
					  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactionsMade: $reactionsMade, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,7 +48,7 @@ abstract mixin class $SnPostCopyWith<$Res>  {
 | 
				
			|||||||
  factory $SnPostCopyWith(SnPost value, $Res Function(SnPost) _then) = _$SnPostCopyWithImpl;
 | 
					  factory $SnPostCopyWith(SnPost value, $Res Function(SnPost) _then) = _$SnPostCopyWithImpl;
 | 
				
			||||||
@useResult
 | 
					@useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
					 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -66,7 +65,7 @@ class _$SnPostCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of SnPost
 | 
					/// Create a copy of SnPost
 | 
				
			||||||
/// 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? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactionsMade = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = 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,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
					as String,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
@@ -92,7 +91,8 @@ as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwa
 | 
				
			|||||||
as SnPost?,attachments: null == attachments ? _self.attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
					as SnPost?,attachments: null == attachments ? _self.attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
					as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as SnPublisher,reactionsCount: null == reactionsCount ? _self.reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
					as SnPublisher,reactionsCount: null == reactionsCount ? _self.reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, int>,reactions: null == reactions ? _self.reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, int>,reactionsMade: null == reactionsMade ? _self.reactionsMade : reactionsMade // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as Map<String, bool>,reactions: null == reactions ? _self.reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<dynamic>,tags: null == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable
 | 
					as List<dynamic>,tags: null == tags ? _self.tags : tags // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<PostTag>,categories: null == categories ? _self.categories : categories // ignore: cast_nullable_to_non_nullable
 | 
					as List<PostTag>,categories: null == categories ? _self.categories : categories // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<PostCategory>,collections: null == collections ? _self.collections : collections // ignore: cast_nullable_to_non_nullable
 | 
					as List<PostCategory>,collections: null == collections ? _self.collections : collections // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
@@ -152,11 +152,135 @@ $SnPublisherCopyWith<$Res> get publisher {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnPost].
 | 
				
			||||||
 | 
					extension SnPostPatterns on SnPost {
 | 
				
			||||||
 | 
					/// 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( _SnPost value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost() 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( _SnPost value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost():
 | 
				
			||||||
 | 
					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( _SnPost value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String? title,  String? description,  String? language,  DateTime? editedAt,  DateTime? publishedAt,  int visibility,  String? content,  int type,  Map<String, dynamic>? meta,  int viewsUnique,  int viewsTotal,  int upvotes,  int downvotes,  int repliesCount,  String? threadedPostId,  SnPost? threadedPost,  String? repliedPostId,  SnPost? repliedPost,  String? forwardedPostId,  SnPost? forwardedPost,  List<SnCloudFile> attachments,  SnPublisher publisher,  Map<String, int> reactionsCount,  Map<String, bool> reactionsMade,  List<dynamic> reactions,  List<PostTag> tags,  List<PostCategory> categories,  List<dynamic> collections,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  bool isTruncated)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPost() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.description,_that.language,_that.editedAt,_that.publishedAt,_that.visibility,_that.content,_that.type,_that.meta,_that.viewsUnique,_that.viewsTotal,_that.upvotes,_that.downvotes,_that.repliesCount,_that.threadedPostId,_that.threadedPost,_that.repliedPostId,_that.repliedPost,_that.forwardedPostId,_that.forwardedPost,_that.attachments,_that.publisher,_that.reactionsCount,_that.reactionsMade,_that.reactions,_that.tags,_that.categories,_that.collections,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.isTruncated);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _SnPost implements SnPost {
 | 
					class _SnPost implements SnPost {
 | 
				
			||||||
  const _SnPost({required this.id, this.title, this.description, this.language, this.editedAt, this.publishedAt = null, this.visibility = 0, this.content, this.type = 0, final  Map<String, dynamic>? meta, this.viewsUnique = 0, this.viewsTotal = 0, this.upvotes = 0, this.downvotes = 0, this.repliesCount = 0, this.threadedPostId, this.threadedPost, this.repliedPostId, this.repliedPost, this.forwardedPostId, this.forwardedPost, final  List<SnCloudFile> attachments = const [], required this.publisher, final  Map<String, int> reactionsCount = const {}, final  List<dynamic> reactions = const [], final  List<PostTag> tags = const [], final  List<PostCategory> categories = const [], final  List<dynamic> collections = const [], this.createdAt = null, this.updatedAt = null, this.deletedAt, this.isTruncated = false}): _meta = meta,_attachments = attachments,_reactionsCount = reactionsCount,_reactions = reactions,_tags = tags,_categories = categories,_collections = collections;
 | 
					  const _SnPost({required this.id, this.title, this.description, this.language, this.editedAt, this.publishedAt = null, this.visibility = 0, this.content, this.type = 0, final  Map<String, dynamic>? meta, this.viewsUnique = 0, this.viewsTotal = 0, this.upvotes = 0, this.downvotes = 0, this.repliesCount = 0, this.threadedPostId, this.threadedPost, this.repliedPostId, this.repliedPost, this.forwardedPostId, this.forwardedPost, final  List<SnCloudFile> attachments = const [], required this.publisher, final  Map<String, int> reactionsCount = const {}, final  Map<String, bool> reactionsMade = const {}, final  List<dynamic> reactions = const [], final  List<PostTag> tags = const [], final  List<PostCategory> categories = const [], final  List<dynamic> collections = const [], this.createdAt = null, this.updatedAt = null, this.deletedAt, this.isTruncated = false}): _meta = meta,_attachments = attachments,_reactionsCount = reactionsCount,_reactionsMade = reactionsMade,_reactions = reactions,_tags = tags,_categories = categories,_collections = collections;
 | 
				
			||||||
  factory _SnPost.fromJson(Map<String, dynamic> json) => _$SnPostFromJson(json);
 | 
					  factory _SnPost.fromJson(Map<String, dynamic> json) => _$SnPostFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  String id;
 | 
					@override final  String id;
 | 
				
			||||||
@@ -203,6 +327,13 @@ class _SnPost implements SnPost {
 | 
				
			|||||||
  return EqualUnmodifiableMapView(_reactionsCount);
 | 
					  return EqualUnmodifiableMapView(_reactionsCount);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 final  Map<String, bool> _reactionsMade;
 | 
				
			||||||
 | 
					@override@JsonKey() Map<String, bool> get reactionsMade {
 | 
				
			||||||
 | 
					  if (_reactionsMade is EqualUnmodifiableMapView) return _reactionsMade;
 | 
				
			||||||
 | 
					  // ignore: implicit_dynamic_type
 | 
				
			||||||
 | 
					  return EqualUnmodifiableMapView(_reactionsMade);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 final  List<dynamic> _reactions;
 | 
					 final  List<dynamic> _reactions;
 | 
				
			||||||
@override@JsonKey() List<dynamic> get reactions {
 | 
					@override@JsonKey() List<dynamic> get reactions {
 | 
				
			||||||
  if (_reactions is EqualUnmodifiableListView) return _reactions;
 | 
					  if (_reactions is EqualUnmodifiableListView) return _reactions;
 | 
				
			||||||
@@ -249,16 +380,16 @@ Map<String, dynamic> toJson() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._meta, _meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other._attachments, _attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other._reactionsCount, _reactionsCount)&&const DeepCollectionEquality().equals(other._reactions, _reactions)&&const DeepCollectionEquality().equals(other._tags, _tags)&&const DeepCollectionEquality().equals(other._categories, _categories)&&const DeepCollectionEquality().equals(other._collections, _collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _SnPost&&(identical(other.id, id) || other.id == id)&&(identical(other.title, title) || other.title == title)&&(identical(other.description, description) || other.description == description)&&(identical(other.language, language) || other.language == language)&&(identical(other.editedAt, editedAt) || other.editedAt == editedAt)&&(identical(other.publishedAt, publishedAt) || other.publishedAt == publishedAt)&&(identical(other.visibility, visibility) || other.visibility == visibility)&&(identical(other.content, content) || other.content == content)&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._meta, _meta)&&(identical(other.viewsUnique, viewsUnique) || other.viewsUnique == viewsUnique)&&(identical(other.viewsTotal, viewsTotal) || other.viewsTotal == viewsTotal)&&(identical(other.upvotes, upvotes) || other.upvotes == upvotes)&&(identical(other.downvotes, downvotes) || other.downvotes == downvotes)&&(identical(other.repliesCount, repliesCount) || other.repliesCount == repliesCount)&&(identical(other.threadedPostId, threadedPostId) || other.threadedPostId == threadedPostId)&&(identical(other.threadedPost, threadedPost) || other.threadedPost == threadedPost)&&(identical(other.repliedPostId, repliedPostId) || other.repliedPostId == repliedPostId)&&(identical(other.repliedPost, repliedPost) || other.repliedPost == repliedPost)&&(identical(other.forwardedPostId, forwardedPostId) || other.forwardedPostId == forwardedPostId)&&(identical(other.forwardedPost, forwardedPost) || other.forwardedPost == forwardedPost)&&const DeepCollectionEquality().equals(other._attachments, _attachments)&&(identical(other.publisher, publisher) || other.publisher == publisher)&&const DeepCollectionEquality().equals(other._reactionsCount, _reactionsCount)&&const DeepCollectionEquality().equals(other._reactionsMade, _reactionsMade)&&const DeepCollectionEquality().equals(other._reactions, _reactions)&&const DeepCollectionEquality().equals(other._tags, _tags)&&const DeepCollectionEquality().equals(other._categories, _categories)&&const DeepCollectionEquality().equals(other._collections, _collections)&&(identical(other.createdAt, createdAt) || other.createdAt == createdAt)&&(identical(other.updatedAt, updatedAt) || other.updatedAt == updatedAt)&&(identical(other.deletedAt, deletedAt) || other.deletedAt == deletedAt)&&(identical(other.isTruncated, isTruncated) || other.isTruncated == isTruncated));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(_meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(_attachments),publisher,const DeepCollectionEquality().hash(_reactionsCount),const DeepCollectionEquality().hash(_reactions),const DeepCollectionEquality().hash(_tags),const DeepCollectionEquality().hash(_categories),const DeepCollectionEquality().hash(_collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
					int get hashCode => Object.hashAll([runtimeType,id,title,description,language,editedAt,publishedAt,visibility,content,type,const DeepCollectionEquality().hash(_meta),viewsUnique,viewsTotal,upvotes,downvotes,repliesCount,threadedPostId,threadedPost,repliedPostId,repliedPost,forwardedPostId,forwardedPost,const DeepCollectionEquality().hash(_attachments),publisher,const DeepCollectionEquality().hash(_reactionsCount),const DeepCollectionEquality().hash(_reactionsMade),const DeepCollectionEquality().hash(_reactions),const DeepCollectionEquality().hash(_tags),const DeepCollectionEquality().hash(_categories),const DeepCollectionEquality().hash(_collections),createdAt,updatedAt,deletedAt,isTruncated]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString() {
 | 
				
			||||||
  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
					  return 'SnPost(id: $id, title: $title, description: $description, language: $language, editedAt: $editedAt, publishedAt: $publishedAt, visibility: $visibility, content: $content, type: $type, meta: $meta, viewsUnique: $viewsUnique, viewsTotal: $viewsTotal, upvotes: $upvotes, downvotes: $downvotes, repliesCount: $repliesCount, threadedPostId: $threadedPostId, threadedPost: $threadedPost, repliedPostId: $repliedPostId, repliedPost: $repliedPost, forwardedPostId: $forwardedPostId, forwardedPost: $forwardedPost, attachments: $attachments, publisher: $publisher, reactionsCount: $reactionsCount, reactionsMade: $reactionsMade, reactions: $reactions, tags: $tags, categories: $categories, collections: $collections, createdAt: $createdAt, updatedAt: $updatedAt, deletedAt: $deletedAt, isTruncated: $isTruncated)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -269,7 +400,7 @@ abstract mixin class _$SnPostCopyWith<$Res> implements $SnPostCopyWith<$Res> {
 | 
				
			|||||||
  factory _$SnPostCopyWith(_SnPost value, $Res Function(_SnPost) _then) = __$SnPostCopyWithImpl;
 | 
					  factory _$SnPostCopyWith(_SnPost value, $Res Function(_SnPost) _then) = __$SnPostCopyWithImpl;
 | 
				
			||||||
@override @useResult
 | 
					@override @useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
					 String id, String? title, String? description, String? language, DateTime? editedAt, DateTime? publishedAt, int visibility, String? content, int type, Map<String, dynamic>? meta, int viewsUnique, int viewsTotal, int upvotes, int downvotes, int repliesCount, String? threadedPostId, SnPost? threadedPost, String? repliedPostId, SnPost? repliedPost, String? forwardedPostId, SnPost? forwardedPost, List<SnCloudFile> attachments, SnPublisher publisher, Map<String, int> reactionsCount, Map<String, bool> reactionsMade, List<dynamic> reactions, List<PostTag> tags, List<PostCategory> categories, List<dynamic> collections, DateTime? createdAt, DateTime? updatedAt, DateTime? deletedAt, bool isTruncated
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -286,7 +417,7 @@ class __$SnPostCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of SnPost
 | 
					/// Create a copy of SnPost
 | 
				
			||||||
/// 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? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? id = null,Object? title = freezed,Object? description = freezed,Object? language = freezed,Object? editedAt = freezed,Object? publishedAt = freezed,Object? visibility = null,Object? content = freezed,Object? type = null,Object? meta = freezed,Object? viewsUnique = null,Object? viewsTotal = null,Object? upvotes = null,Object? downvotes = null,Object? repliesCount = null,Object? threadedPostId = freezed,Object? threadedPost = freezed,Object? repliedPostId = freezed,Object? repliedPost = freezed,Object? forwardedPostId = freezed,Object? forwardedPost = freezed,Object? attachments = null,Object? publisher = null,Object? reactionsCount = null,Object? reactionsMade = null,Object? reactions = null,Object? tags = null,Object? categories = null,Object? collections = null,Object? createdAt = freezed,Object? updatedAt = freezed,Object? deletedAt = freezed,Object? isTruncated = null,}) {
 | 
				
			||||||
  return _then(_SnPost(
 | 
					  return _then(_SnPost(
 | 
				
			||||||
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,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
					as String,title: freezed == title ? _self.title : title // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
@@ -312,7 +443,8 @@ as String?,forwardedPost: freezed == forwardedPost ? _self.forwardedPost : forwa
 | 
				
			|||||||
as SnPost?,attachments: null == attachments ? _self._attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
					as SnPost?,attachments: null == attachments ? _self._attachments : attachments // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
					as List<SnCloudFile>,publisher: null == publisher ? _self.publisher : publisher // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as SnPublisher,reactionsCount: null == reactionsCount ? _self._reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
					as SnPublisher,reactionsCount: null == reactionsCount ? _self._reactionsCount : reactionsCount // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, int>,reactions: null == reactions ? _self._reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, int>,reactionsMade: null == reactionsMade ? _self._reactionsMade : reactionsMade // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as Map<String, bool>,reactions: null == reactions ? _self._reactions : reactions // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<dynamic>,tags: null == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable
 | 
					as List<dynamic>,tags: null == tags ? _self._tags : tags // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<PostTag>,categories: null == categories ? _self._categories : categories // ignore: cast_nullable_to_non_nullable
 | 
					as List<PostTag>,categories: null == categories ? _self._categories : categories // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as List<PostCategory>,collections: null == collections ? _self._collections : collections // ignore: cast_nullable_to_non_nullable
 | 
					as List<PostCategory>,collections: null == collections ? _self._collections : collections // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
@@ -440,6 +572,130 @@ as int,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnPublisherStats].
 | 
				
			||||||
 | 
					extension SnPublisherStatsPatterns on SnPublisherStats {
 | 
				
			||||||
 | 
					/// 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( _SnPublisherStats value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats() 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( _SnPublisherStats value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats():
 | 
				
			||||||
 | 
					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( _SnPublisherStats value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats() 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( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);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( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats():
 | 
				
			||||||
 | 
					return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( int postsCreated,  int stickerPacksCreated,  int stickersCreated,  int upvoteReceived,  int downvoteReceived)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherStats() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.postsCreated,_that.stickerPacksCreated,_that.stickersCreated,_that.upvoteReceived,_that.downvoteReceived);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -583,6 +839,130 @@ as String,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnSubscriptionStatus].
 | 
				
			||||||
 | 
					extension SnSubscriptionStatusPatterns on SnSubscriptionStatus {
 | 
				
			||||||
 | 
					/// 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( _SnSubscriptionStatus value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus() 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( _SnSubscriptionStatus value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus():
 | 
				
			||||||
 | 
					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( _SnSubscriptionStatus value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isSubscribed,  String publisherId,  String publisherName)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isSubscribed,  String publisherId,  String publisherName)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus():
 | 
				
			||||||
 | 
					return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isSubscribed,  String publisherId,  String publisherName)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSubscriptionStatus() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isSubscribed,_that.publisherId,_that.publisherName);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -718,6 +1098,130 @@ as int,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [ReactInfo].
 | 
				
			||||||
 | 
					extension ReactInfoPatterns on ReactInfo {
 | 
				
			||||||
 | 
					/// 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( _ReactInfo value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo() 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( _ReactInfo value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo():
 | 
				
			||||||
 | 
					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( _ReactInfo value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo() 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 icon,  int attitude)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.icon,_that.attitude);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 icon,  int attitude)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo():
 | 
				
			||||||
 | 
					return $default(_that.icon,_that.attitude);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 icon,  int attitude)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _ReactInfo() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.icon,_that.attitude);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,11 @@ _SnPost _$SnPostFromJson(Map<String, dynamic> json) => _SnPost(
 | 
				
			|||||||
        (k, e) => MapEntry(k, (e as num).toInt()),
 | 
					        (k, e) => MapEntry(k, (e as num).toInt()),
 | 
				
			||||||
      ) ??
 | 
					      ) ??
 | 
				
			||||||
      const {},
 | 
					      const {},
 | 
				
			||||||
 | 
					  reactionsMade:
 | 
				
			||||||
 | 
					      (json['reactions_made'] as Map<String, dynamic>?)?.map(
 | 
				
			||||||
 | 
					        (k, e) => MapEntry(k, e as bool),
 | 
				
			||||||
 | 
					      ) ??
 | 
				
			||||||
 | 
					      const {},
 | 
				
			||||||
  reactions: json['reactions'] as List<dynamic>? ?? const [],
 | 
					  reactions: json['reactions'] as List<dynamic>? ?? const [],
 | 
				
			||||||
  tags:
 | 
					  tags:
 | 
				
			||||||
      (json['tags'] as List<dynamic>?)
 | 
					      (json['tags'] as List<dynamic>?)
 | 
				
			||||||
@@ -106,6 +111,7 @@ Map<String, dynamic> _$SnPostToJson(_SnPost instance) => <String, dynamic>{
 | 
				
			|||||||
  'attachments': instance.attachments.map((e) => e.toJson()).toList(),
 | 
					  'attachments': instance.attachments.map((e) => e.toJson()).toList(),
 | 
				
			||||||
  'publisher': instance.publisher.toJson(),
 | 
					  'publisher': instance.publisher.toJson(),
 | 
				
			||||||
  'reactions_count': instance.reactionsCount,
 | 
					  'reactions_count': instance.reactionsCount,
 | 
				
			||||||
 | 
					  'reactions_made': instance.reactionsMade,
 | 
				
			||||||
  'reactions': instance.reactions,
 | 
					  'reactions': instance.reactions,
 | 
				
			||||||
  'tags': instance.tags.map((e) => e.toJson()).toList(),
 | 
					  'tags': instance.tags.map((e) => e.toJson()).toList(),
 | 
				
			||||||
  'categories': instance.categories.map((e) => e.toJson()).toList(),
 | 
					  'categories': instance.categories.map((e) => e.toJson()).toList(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,6 +78,130 @@ as List<SnPost>,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [PostCategory].
 | 
				
			||||||
 | 
					extension PostCategoryPatterns on PostCategory {
 | 
				
			||||||
 | 
					/// 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( _PostCategory value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory() 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( _PostCategory value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory():
 | 
				
			||||||
 | 
					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( _PostCategory value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostCategory() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,6 +78,130 @@ as List<SnPost>,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [PostTag].
 | 
				
			||||||
 | 
					extension PostTagPatterns on PostTag {
 | 
				
			||||||
 | 
					/// 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( _PostTag value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag() 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( _PostTag value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag():
 | 
				
			||||||
 | 
					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( _PostTag value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String? name,  List<SnPost> posts)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String? name,  List<SnPost> posts)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _PostTag() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.posts);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -137,6 +136,130 @@ $SnVerificationMarkCopyWith<$Res>? get verification {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnPublisher].
 | 
				
			||||||
 | 
					extension SnPublisherPatterns on SnPublisher {
 | 
				
			||||||
 | 
					/// 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( _SnPublisher value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher() 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( _SnPublisher value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher():
 | 
				
			||||||
 | 
					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( _SnPublisher value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher() 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,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);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,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  int type,  String name,  String nick,  String bio,  SnCloudFile? picture,  SnCloudFile? background,  SnAccount? account,  String? accountId,  DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String? realmId,  SnVerificationMark? verification)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisher() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.type,_that.name,_that.nick,_that.bio,_that.picture,_that.background,_that.account,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt,_that.realmId,_that.verification);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -376,6 +499,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnPublisherMember].
 | 
				
			||||||
 | 
					extension SnPublisherMemberPatterns on SnPublisherMember {
 | 
				
			||||||
 | 
					/// 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( _SnPublisherMember value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember() 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( _SnPublisherMember value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember():
 | 
				
			||||||
 | 
					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( _SnPublisherMember value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember() 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 publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);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 publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember():
 | 
				
			||||||
 | 
					return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 publisherId,  SnPublisher? publisher,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnPublisherMember() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.publisherId,_that.publisher,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -113,6 +112,130 @@ $SnCloudFileCopyWith<$Res>? get background {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnRealm].
 | 
				
			||||||
 | 
					extension SnRealmPatterns on SnRealm {
 | 
				
			||||||
 | 
					/// 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( _SnRealm value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm() 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( _SnRealm value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm():
 | 
				
			||||||
 | 
					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( _SnRealm value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String name,  String description,  String? verifiedAs,  DateTime? verifiedAt,  bool isCommunity,  bool isPublic,  SnCloudFile? picture,  SnCloudFile? background,  String accountId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealm() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.name,_that.description,_that.verifiedAs,_that.verifiedAt,_that.isCommunity,_that.isPublic,_that.picture,_that.background,_that.accountId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -328,6 +451,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnRealmMember].
 | 
				
			||||||
 | 
					extension SnRealmMemberPatterns on SnRealmMember {
 | 
				
			||||||
 | 
					/// 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( _SnRealmMember value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember() 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( _SnRealmMember value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember():
 | 
				
			||||||
 | 
					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( _SnRealmMember value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember() 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 realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);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 realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember():
 | 
				
			||||||
 | 
					return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 realmId,  SnRealm? realm,  String accountId,  SnAccount? account,  int role,  DateTime? joinedAt,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRealmMember() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.realmId,_that.realm,_that.accountId,_that.account,_that.role,_that.joinedAt,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,6 +101,130 @@ $SnAccountCopyWith<$Res> get related {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnRelationship].
 | 
				
			||||||
 | 
					extension SnRelationshipPatterns on SnRelationship {
 | 
				
			||||||
 | 
					/// 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( _SnRelationship value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship() 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( _SnRelationship value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship():
 | 
				
			||||||
 | 
					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( _SnRelationship value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship() 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( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);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( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship():
 | 
				
			||||||
 | 
					return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( DateTime? createdAt,  DateTime? updatedAt,  DateTime? deletedAt,  String accountId,  SnAccount account,  String relatedId,  SnAccount related,  DateTime? expiredAt,  int status)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnRelationship() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.createdAt,_that.updatedAt,_that.deletedAt,_that.accountId,_that.account,_that.relatedId,_that.related,_that.expiredAt,_that.status);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -105,6 +104,130 @@ $SnStickerPackCopyWith<$Res>? get pack {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnSticker].
 | 
				
			||||||
 | 
					extension SnStickerPatterns on SnSticker {
 | 
				
			||||||
 | 
					/// 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( _SnSticker value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker() 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( _SnSticker value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker():
 | 
				
			||||||
 | 
					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( _SnSticker value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String slug,  String imageId,  SnCloudFile image,  String packId,  SnStickerPack? pack,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnSticker() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.slug,_that.imageId,_that.image,_that.packId,_that.pack,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -295,6 +418,130 @@ $SnPublisherCopyWith<$Res>? get publisher {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnStickerPack].
 | 
				
			||||||
 | 
					extension SnStickerPackPatterns on SnStickerPack {
 | 
				
			||||||
 | 
					/// 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( _SnStickerPack value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnStickerPack() 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( _SnStickerPack value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnStickerPack():
 | 
				
			||||||
 | 
					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( _SnStickerPack value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnStickerPack() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					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);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnStickerPack():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.name,_that.description,_that.prefix,_that.publisherId,_that.publisher,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String name,  String description,  String prefix,  String publisherId,  SnPublisher? publisher,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					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);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ sealed class SnAccount with _$SnAccount {
 | 
				
			|||||||
    required String language,
 | 
					    required String language,
 | 
				
			||||||
    required bool isSuperuser,
 | 
					    required bool isSuperuser,
 | 
				
			||||||
    required SnAccountProfile profile,
 | 
					    required SnAccountProfile profile,
 | 
				
			||||||
 | 
					    required SnWalletSubscriptionRef? perkSubscription,
 | 
				
			||||||
    @Default([]) List<SnAccountBadge> badges,
 | 
					    @Default([]) List<SnAccountBadge> badges,
 | 
				
			||||||
    required DateTime createdAt,
 | 
					    required DateTime createdAt,
 | 
				
			||||||
    required DateTime updatedAt,
 | 
					    required DateTime updatedAt,
 | 
				
			||||||
@@ -45,7 +46,6 @@ sealed class SnAccountProfile with _$SnAccountProfile {
 | 
				
			|||||||
    required SnCloudFile? picture,
 | 
					    required SnCloudFile? picture,
 | 
				
			||||||
    required SnCloudFile? background,
 | 
					    required SnCloudFile? background,
 | 
				
			||||||
    required SnVerificationMark? verification,
 | 
					    required SnVerificationMark? verification,
 | 
				
			||||||
    required SnWalletSubscriptionRef? stellarMembership,
 | 
					 | 
				
			||||||
    required DateTime createdAt,
 | 
					    required DateTime createdAt,
 | 
				
			||||||
    required DateTime updatedAt,
 | 
					    required DateTime updatedAt,
 | 
				
			||||||
    required DateTime? deletedAt,
 | 
					    required DateTime? deletedAt,
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -13,6 +13,12 @@ _SnAccount _$SnAccountFromJson(Map<String, dynamic> json) => _SnAccount(
 | 
				
			|||||||
  language: json['language'] as String,
 | 
					  language: json['language'] as String,
 | 
				
			||||||
  isSuperuser: json['is_superuser'] as bool,
 | 
					  isSuperuser: json['is_superuser'] as bool,
 | 
				
			||||||
  profile: SnAccountProfile.fromJson(json['profile'] as Map<String, dynamic>),
 | 
					  profile: SnAccountProfile.fromJson(json['profile'] as Map<String, dynamic>),
 | 
				
			||||||
 | 
					  perkSubscription:
 | 
				
			||||||
 | 
					      json['perk_subscription'] == null
 | 
				
			||||||
 | 
					          ? null
 | 
				
			||||||
 | 
					          : SnWalletSubscriptionRef.fromJson(
 | 
				
			||||||
 | 
					            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>))
 | 
				
			||||||
@@ -34,6 +40,7 @@ Map<String, dynamic> _$SnAccountToJson(_SnAccount instance) =>
 | 
				
			|||||||
      'language': instance.language,
 | 
					      'language': instance.language,
 | 
				
			||||||
      'is_superuser': instance.isSuperuser,
 | 
					      'is_superuser': instance.isSuperuser,
 | 
				
			||||||
      'profile': instance.profile.toJson(),
 | 
					      'profile': instance.profile.toJson(),
 | 
				
			||||||
 | 
					      'perk_subscription': instance.perkSubscription?.toJson(),
 | 
				
			||||||
      'badges': instance.badges.map((e) => e.toJson()).toList(),
 | 
					      'badges': instance.badges.map((e) => e.toJson()).toList(),
 | 
				
			||||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
					      'created_at': instance.createdAt.toIso8601String(),
 | 
				
			||||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
					      'updated_at': instance.updatedAt.toIso8601String(),
 | 
				
			||||||
@@ -84,12 +91,6 @@ _SnAccountProfile _$SnAccountProfileFromJson(Map<String, dynamic> json) =>
 | 
				
			|||||||
              : SnVerificationMark.fromJson(
 | 
					              : SnVerificationMark.fromJson(
 | 
				
			||||||
                json['verification'] as Map<String, dynamic>,
 | 
					                json['verification'] as Map<String, dynamic>,
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
      stellarMembership:
 | 
					 | 
				
			||||||
          json['stellar_membership'] == null
 | 
					 | 
				
			||||||
              ? null
 | 
					 | 
				
			||||||
              : SnWalletSubscriptionRef.fromJson(
 | 
					 | 
				
			||||||
                json['stellar_membership'] 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:
 | 
				
			||||||
@@ -118,7 +119,6 @@ Map<String, dynamic> _$SnAccountProfileToJson(_SnAccountProfile instance) =>
 | 
				
			|||||||
      'picture': instance.picture?.toJson(),
 | 
					      'picture': instance.picture?.toJson(),
 | 
				
			||||||
      'background': instance.background?.toJson(),
 | 
					      'background': instance.background?.toJson(),
 | 
				
			||||||
      'verification': instance.verification?.toJson(),
 | 
					      'verification': instance.verification?.toJson(),
 | 
				
			||||||
      'stellar_membership': instance.stellarMembership?.toJson(),
 | 
					 | 
				
			||||||
      'created_at': instance.createdAt.toIso8601String(),
 | 
					      'created_at': instance.createdAt.toIso8601String(),
 | 
				
			||||||
      'updated_at': instance.updatedAt.toIso8601String(),
 | 
					      'updated_at': instance.updatedAt.toIso8601String(),
 | 
				
			||||||
      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
					      'deleted_at': instance.deletedAt?.toIso8601String(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -94,6 +93,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWallet].
 | 
				
			||||||
 | 
					extension SnWalletPatterns on SnWallet {
 | 
				
			||||||
 | 
					/// 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( _SnWallet value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet() 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( _SnWallet value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet():
 | 
				
			||||||
 | 
					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( _SnWallet value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet() 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,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);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,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  List<SnWalletPocket> pockets,  String accountId,  SnAccount? account,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWallet() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.pockets,_that.accountId,_that.account,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -263,6 +386,130 @@ as DateTime?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWalletPocket].
 | 
				
			||||||
 | 
					extension SnWalletPocketPatterns on SnWalletPocket {
 | 
				
			||||||
 | 
					/// 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( _SnWalletPocket value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket() 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( _SnWalletPocket value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket():
 | 
				
			||||||
 | 
					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( _SnWalletPocket value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String currency,  double amount,  String walletId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletPocket() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.walletId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -443,6 +690,130 @@ $SnWalletCopyWith<$Res>? get payeeWallet {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnTransaction].
 | 
				
			||||||
 | 
					extension SnTransactionPatterns on SnTransaction {
 | 
				
			||||||
 | 
					/// 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( _SnTransaction value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction() 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( _SnTransaction value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction():
 | 
				
			||||||
 | 
					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( _SnTransaction value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String currency,  double amount,  String? remarks,  int type,  String? payerWalletId,  SnWallet? payerWallet,  String? payeeWalletId,  SnWallet? payeeWallet,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnTransaction() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.currency,_that.amount,_that.remarks,_that.type,_that.payerWalletId,_that.payerWallet,_that.payeeWalletId,_that.payeeWallet,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -653,6 +1024,130 @@ $SnAccountCopyWith<$Res>? get account {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWalletSubscription].
 | 
				
			||||||
 | 
					extension SnWalletSubscriptionPatterns on SnWalletSubscription {
 | 
				
			||||||
 | 
					/// 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( _SnWalletSubscription value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription() 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( _SnWalletSubscription value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription():
 | 
				
			||||||
 | 
					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( _SnWalletSubscription value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription() 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,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);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,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  DateTime begunAt,  DateTime? endedAt,  String identifier,  bool isActive,  bool isFreeTrial,  int status,  String? paymentMethod,  Map<String, dynamic>? paymentDetails,  double? basePrice,  String? couponId,  dynamic coupon,  DateTime? renewalAt,  String accountId,  SnAccount? account,  bool isAvailable,  double? finalPrice,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscription() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.begunAt,_that.endedAt,_that.identifier,_that.isActive,_that.isFreeTrial,_that.status,_that.paymentMethod,_that.paymentDetails,_that.basePrice,_that.couponId,_that.coupon,_that.renewalAt,_that.accountId,_that.account,_that.isAvailable,_that.finalPrice,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -850,6 +1345,130 @@ as String,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWalletSubscriptionRef].
 | 
				
			||||||
 | 
					extension SnWalletSubscriptionRefPatterns on SnWalletSubscriptionRef {
 | 
				
			||||||
 | 
					/// 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( _SnWalletSubscriptionRef value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef() 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( _SnWalletSubscriptionRef value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef():
 | 
				
			||||||
 | 
					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( _SnWalletSubscriptionRef value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef() 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,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);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,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  bool isActive,  String accountId,  DateTime createdAt,  DateTime? deletedAt,  DateTime updatedAt,  String identifier)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletSubscriptionRef() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.isActive,_that.accountId,_that.createdAt,_that.deletedAt,_that.updatedAt,_that.identifier);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1035,6 +1654,130 @@ $SnTransactionCopyWith<$Res>? get transaction {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWalletOrder].
 | 
				
			||||||
 | 
					extension SnWalletOrderPatterns on SnWalletOrder {
 | 
				
			||||||
 | 
					/// 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( _SnWalletOrder value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder() 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( _SnWalletOrder value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder():
 | 
				
			||||||
 | 
					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( _SnWalletOrder value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder() 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,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);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,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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,  int status,  String currency,  dynamic remarks,  String appIdentifier,  Map<String, dynamic> meta,  int amount,  DateTime expiredAt,  String? payeeWalletId,  SnWallet? payeeWallet,  String? transactionId,  SnTransaction? transaction,  String? issuerAppId,  dynamic issuerApp,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWalletOrder() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.status,_that.currency,_that.remarks,_that.appIdentifier,_that.meta,_that.amount,_that.expiredAt,_that.payeeWalletId,_that.payeeWallet,_that.transactionId,_that.transaction,_that.issuerAppId,_that.issuerApp,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -76,6 +75,130 @@ as bool,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWebFeedConfig].
 | 
				
			||||||
 | 
					extension SnWebFeedConfigPatterns on SnWebFeedConfig {
 | 
				
			||||||
 | 
					/// 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( _SnWebFeedConfig value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig() 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( _SnWebFeedConfig value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig():
 | 
				
			||||||
 | 
					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( _SnWebFeedConfig value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool scrapPage)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.scrapPage);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool scrapPage)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig():
 | 
				
			||||||
 | 
					return $default(_that.scrapPage);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool scrapPage)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeedConfig() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.scrapPage);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -240,6 +363,130 @@ $SnWebFeedConfigCopyWith<$Res> get config {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWebFeed].
 | 
				
			||||||
 | 
					extension SnWebFeedPatterns on SnWebFeed {
 | 
				
			||||||
 | 
					/// 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( _SnWebFeed value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed() 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( _SnWebFeed value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed():
 | 
				
			||||||
 | 
					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( _SnWebFeed value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String url,  String title,  String? description,  SnScrappedLink? preview,  SnWebFeedConfig config,  String publisherId,  List<SnWebArticle> articles,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebFeed() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.url,_that.title,_that.description,_that.preview,_that.config,_that.publisherId,_that.articles,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -456,6 +703,130 @@ $SnWebFeedCopyWith<$Res>? get feed {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [SnWebArticle].
 | 
				
			||||||
 | 
					extension SnWebArticlePatterns on SnWebArticle {
 | 
				
			||||||
 | 
					/// 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( _SnWebArticle value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle() 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( _SnWebArticle value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle():
 | 
				
			||||||
 | 
					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( _SnWebArticle value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle():
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( String id,  String title,  String url,  String? author,  Map<String, dynamic>? meta,  SnScrappedLink? preview,  SnWebFeed? feed,  String? content,  DateTime? publishedAt,  String feedId,  DateTime createdAt,  DateTime updatedAt,  DateTime? deletedAt)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _SnWebArticle() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.id,_that.title,_that.url,_that.author,_that.meta,_that.preview,_that.feed,_that.content,_that.publishedAt,_that.feedId,_that.createdAt,_that.updatedAt,_that.deletedAt);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,13 +4,13 @@ import 'package:island/models/webfeed.dart';
 | 
				
			|||||||
import 'package:island/pods/network.dart';
 | 
					import 'package:island/pods/network.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Provider that fetches a single article by its ID
 | 
					/// Provider that fetches a single article by its ID
 | 
				
			||||||
final articleDetailProvider = FutureProvider.autoDispose.family<SnWebArticle, String>(
 | 
					final articleDetailProvider = FutureProvider.autoDispose
 | 
				
			||||||
  (ref, articleId) async {
 | 
					    .family<SnWebArticle, String>((ref, articleId) async {
 | 
				
			||||||
      final dio = ref.watch(apiClientProvider);
 | 
					      final dio = ref.watch(apiClientProvider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final response = await dio.get<Map<String, dynamic>>(
 | 
					        final response = await dio.get<Map<String, dynamic>>(
 | 
				
			||||||
        '/feeds/articles/$articleId',
 | 
					          '/sphere/feeds/articles/$articleId',
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (response.statusCode == 200 && response.data != null) {
 | 
					        if (response.statusCode == 200 && response.data != null) {
 | 
				
			||||||
@@ -27,5 +27,4 @@ final articleDetailProvider = FutureProvider.autoDispose.family<SnWebArticle, St
 | 
				
			|||||||
      } catch (e) {
 | 
					      } catch (e) {
 | 
				
			||||||
        throw Exception('Failed to load article: $e');
 | 
					        throw Exception('Failed to load article: $e');
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
  },
 | 
					    });
 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,14 @@
 | 
				
			|||||||
import 'package:island/pods/userinfo.dart';
 | 
					import 'dart:async';
 | 
				
			||||||
import 'package:island/screens/chat/chat.dart';
 | 
					import 'dart:developer';
 | 
				
			||||||
 | 
					import 'dart:io';
 | 
				
			||||||
 | 
					import 'package:flutter/foundation.dart';
 | 
				
			||||||
 | 
					import 'package:flutter_webrtc/flutter_webrtc.dart';
 | 
				
			||||||
import 'package:island/widgets/chat/call_button.dart';
 | 
					import 'package:island/widgets/chat/call_button.dart';
 | 
				
			||||||
import 'package:livekit_client/livekit_client.dart';
 | 
					import 'package:livekit_client/livekit_client.dart';
 | 
				
			||||||
import 'package:freezed_annotation/freezed_annotation.dart';
 | 
					import 'package:freezed_annotation/freezed_annotation.dart';
 | 
				
			||||||
import 'dart:async';
 | 
					 | 
				
			||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
					import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
				
			||||||
import 'package:island/pods/network.dart';
 | 
					import 'package:island/pods/network.dart';
 | 
				
			||||||
import 'package:island/models/chat.dart';
 | 
					import 'package:island/models/chat.dart';
 | 
				
			||||||
import 'package:island/pods/websocket.dart';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
part 'call.g.dart';
 | 
					part 'call.g.dart';
 | 
				
			||||||
part 'call.freezed.dart';
 | 
					part 'call.freezed.dart';
 | 
				
			||||||
@@ -27,6 +28,7 @@ sealed class CallState with _$CallState {
 | 
				
			|||||||
    required bool isMicrophoneEnabled,
 | 
					    required bool isMicrophoneEnabled,
 | 
				
			||||||
    required bool isCameraEnabled,
 | 
					    required bool isCameraEnabled,
 | 
				
			||||||
    required bool isScreenSharing,
 | 
					    required bool isScreenSharing,
 | 
				
			||||||
 | 
					    required bool isSpeakerphone,
 | 
				
			||||||
    @Default(Duration(seconds: 0)) Duration duration,
 | 
					    @Default(Duration(seconds: 0)) Duration duration,
 | 
				
			||||||
    String? error,
 | 
					    String? error,
 | 
				
			||||||
  }) = _CallState;
 | 
					  }) = _CallState;
 | 
				
			||||||
@@ -42,7 +44,8 @@ sealed class CallParticipantLive with _$CallParticipantLive {
 | 
				
			|||||||
  }) = _CallParticipantLive;
 | 
					  }) = _CallParticipantLive;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  bool get isSpeaking => remoteParticipant.isSpeaking;
 | 
					  bool get isSpeaking => remoteParticipant.isSpeaking;
 | 
				
			||||||
  bool get isMuted => remoteParticipant.isMuted;
 | 
					  bool get isMuted =>
 | 
				
			||||||
 | 
					      remoteParticipant.isMuted || !remoteParticipant.isMicrophoneEnabled();
 | 
				
			||||||
  bool get isScreenSharing => remoteParticipant.isScreenShareEnabled();
 | 
					  bool get isScreenSharing => remoteParticipant.isScreenShareEnabled();
 | 
				
			||||||
  bool get isScreenSharingWithAudio =>
 | 
					  bool get isScreenSharingWithAudio =>
 | 
				
			||||||
      remoteParticipant.isScreenShareAudioEnabled();
 | 
					      remoteParticipant.isScreenShareAudioEnabled();
 | 
				
			||||||
@@ -57,13 +60,14 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
  LocalParticipant? _localParticipant;
 | 
					  LocalParticipant? _localParticipant;
 | 
				
			||||||
  List<CallParticipantLive> _participants = [];
 | 
					  List<CallParticipantLive> _participants = [];
 | 
				
			||||||
  final Map<String, CallParticipant> _participantInfoByIdentity = {};
 | 
					  final Map<String, CallParticipant> _participantInfoByIdentity = {};
 | 
				
			||||||
  StreamSubscription? _wsSubscription;
 | 
					 | 
				
			||||||
  EventsListener? _roomListener;
 | 
					  EventsListener? _roomListener;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  List<CallParticipantLive> get participants =>
 | 
					  List<CallParticipantLive> get participants =>
 | 
				
			||||||
      List.unmodifiable(_participants);
 | 
					      List.unmodifiable(_participants);
 | 
				
			||||||
  LocalParticipant? get localParticipant => _localParticipant;
 | 
					  LocalParticipant? get localParticipant => _localParticipant;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Map<String, double> participantsVolumes = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Timer? _durationTimer;
 | 
					  Timer? _durationTimer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Room? get room => _room;
 | 
					  Room? get room => _room;
 | 
				
			||||||
@@ -71,36 +75,15 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
  @override
 | 
					  @override
 | 
				
			||||||
  CallState build() {
 | 
					  CallState build() {
 | 
				
			||||||
    // Subscribe to websocket updates
 | 
					    // Subscribe to websocket updates
 | 
				
			||||||
    _subscribeToParticipantsUpdate();
 | 
					 | 
				
			||||||
    return const CallState(
 | 
					    return const CallState(
 | 
				
			||||||
      isConnected: false,
 | 
					      isConnected: false,
 | 
				
			||||||
      isMicrophoneEnabled: true,
 | 
					      isMicrophoneEnabled: true,
 | 
				
			||||||
      isCameraEnabled: false,
 | 
					      isCameraEnabled: false,
 | 
				
			||||||
      isScreenSharing: false,
 | 
					      isScreenSharing: false,
 | 
				
			||||||
 | 
					      isSpeakerphone: true,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _subscribeToParticipantsUpdate() {
 | 
					 | 
				
			||||||
    // Only subscribe once
 | 
					 | 
				
			||||||
    if (_wsSubscription != null) return;
 | 
					 | 
				
			||||||
    final ws = ref.read(websocketProvider);
 | 
					 | 
				
			||||||
    _wsSubscription = ws.dataStream.listen((packet) {
 | 
					 | 
				
			||||||
      if (packet.type == 'call.participants.update' && packet.data != null) {
 | 
					 | 
				
			||||||
        final participantsData = packet.data!["participants"];
 | 
					 | 
				
			||||||
        if (participantsData is List) {
 | 
					 | 
				
			||||||
          final parsed =
 | 
					 | 
				
			||||||
              participantsData
 | 
					 | 
				
			||||||
                  .map(
 | 
					 | 
				
			||||||
                    (e) =>
 | 
					 | 
				
			||||||
                        CallParticipant.fromJson(Map<String, dynamic>.from(e)),
 | 
					 | 
				
			||||||
                  )
 | 
					 | 
				
			||||||
                  .toList();
 | 
					 | 
				
			||||||
          _updateLiveParticipants(parsed);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  void _initRoomListeners() {
 | 
					  void _initRoomListeners() {
 | 
				
			||||||
    if (_room == null) return;
 | 
					    if (_room == null) return;
 | 
				
			||||||
    _roomListener?.dispose();
 | 
					    _roomListener?.dispose();
 | 
				
			||||||
@@ -143,8 +126,6 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
              identity: remote.identity,
 | 
					              identity: remote.identity,
 | 
				
			||||||
              name: remote.identity,
 | 
					              name: remote.identity,
 | 
				
			||||||
              joinedAt: DateTime.now(),
 | 
					              joinedAt: DateTime.now(),
 | 
				
			||||||
              accountId: null,
 | 
					 | 
				
			||||||
              profile: null,
 | 
					 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
        return CallParticipantLive(
 | 
					        return CallParticipantLive(
 | 
				
			||||||
          participant: match,
 | 
					          participant: match,
 | 
				
			||||||
@@ -169,16 +150,12 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
      if (idx != -1) return participants[idx];
 | 
					      if (idx != -1) return participants[idx];
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final userInfo = ref.read(userInfoProvider);
 | 
					 | 
				
			||||||
    final roomIdentity = ref.read(chatroomIdentityProvider(_roomId));
 | 
					 | 
				
			||||||
    // Otherwise, use info from the identity map or fallback to minimal
 | 
					    // Otherwise, use info from the identity map or fallback to minimal
 | 
				
			||||||
    return _participantInfoByIdentity[_localParticipant!.identity] ??
 | 
					    return _participantInfoByIdentity[_localParticipant!.identity] ??
 | 
				
			||||||
        CallParticipant(
 | 
					        CallParticipant(
 | 
				
			||||||
          identity: _localParticipant!.identity,
 | 
					          identity: _localParticipant!.identity,
 | 
				
			||||||
          name: _localParticipant!.identity,
 | 
					          name: _localParticipant!.identity,
 | 
				
			||||||
          joinedAt: DateTime.now(),
 | 
					          joinedAt: DateTime.now(),
 | 
				
			||||||
          accountId: userInfo.value?.id,
 | 
					 | 
				
			||||||
          profile: roomIdentity.value,
 | 
					 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -205,6 +182,7 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
          remoteParticipant: _localParticipant!,
 | 
					          remoteParticipant: _localParticipant!,
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
 | 
					      state = state.copyWith();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // Add remote participants
 | 
					    // Add remote participants
 | 
				
			||||||
    _participants.addAll(
 | 
					    _participants.addAll(
 | 
				
			||||||
@@ -233,7 +211,13 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  Future<void> joinRoom(String roomId) async {
 | 
					  Future<void> joinRoom(String roomId) async {
 | 
				
			||||||
    if (_roomId == roomId && _room != null) {
 | 
					    if (_roomId == roomId && _room != null) {
 | 
				
			||||||
 | 
					      log('[Call] Call skipped. Already has data');
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
 | 
					    } else if (_room != null) {
 | 
				
			||||||
 | 
					      if (!_room!.isDisposed &&
 | 
				
			||||||
 | 
					          _room!.connectionState != ConnectionState.disconnected) {
 | 
				
			||||||
 | 
					        throw Exception('Call already connected');
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    _roomId = roomId;
 | 
					    _roomId = roomId;
 | 
				
			||||||
    if (_room != null) {
 | 
					    if (_room != null) {
 | 
				
			||||||
@@ -246,7 +230,9 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final apiClient = ref.read(apiClientProvider);
 | 
					      final apiClient = ref.read(apiClientProvider);
 | 
				
			||||||
      final ongoingCall = await ref.read(ongoingCallProvider(roomId).future);
 | 
					      final ongoingCall = await ref.read(ongoingCallProvider(roomId).future);
 | 
				
			||||||
      final response = await apiClient.get('/chat/realtime/$roomId/join');
 | 
					      final response = await apiClient.get(
 | 
				
			||||||
 | 
					        '/sphere/chat/realtime/$roomId/join',
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
      if (response.statusCode == 200 && response.data != null) {
 | 
					      if (response.statusCode == 200 && response.data != null) {
 | 
				
			||||||
        final data = response.data;
 | 
					        final data = response.data;
 | 
				
			||||||
        // Parse join response
 | 
					        // Parse join response
 | 
				
			||||||
@@ -262,7 +248,8 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
            duration: Duration(
 | 
					            duration: Duration(
 | 
				
			||||||
              milliseconds:
 | 
					              milliseconds:
 | 
				
			||||||
                  (DateTime.now().millisecondsSinceEpoch -
 | 
					                  (DateTime.now().millisecondsSinceEpoch -
 | 
				
			||||||
                      (ongoingCall?.createdAt.millisecondsSinceEpoch ?? 0)),
 | 
					                      (ongoingCall?.createdAt.millisecondsSinceEpoch ??
 | 
				
			||||||
 | 
					                          DateTime.now().millisecondsSinceEpoch)),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
@@ -284,6 +271,10 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
        _initRoomListeners();
 | 
					        _initRoomListeners();
 | 
				
			||||||
        _updateLiveParticipants(participants);
 | 
					        _updateLiveParticipants(participants);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!kIsWeb && (Platform.isIOS || Platform.isAndroid)) {
 | 
				
			||||||
 | 
					          Hardware.instance.setSpeakerphoneOn(true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Listen for connection updates
 | 
					        // Listen for connection updates
 | 
				
			||||||
        _room!.addListener(() {
 | 
					        _room!.addListener(() {
 | 
				
			||||||
          state = state.copyWith(
 | 
					          state = state.copyWith(
 | 
				
			||||||
@@ -316,6 +307,7 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
          stopOnMute: autostop,
 | 
					          stopOnMute: autostop,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					      state = state.copyWith();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -324,6 +316,7 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
      final target = !_localParticipant!.isCameraEnabled();
 | 
					      final target = !_localParticipant!.isCameraEnabled();
 | 
				
			||||||
      state = state.copyWith(isCameraEnabled: target);
 | 
					      state = state.copyWith(isCameraEnabled: target);
 | 
				
			||||||
      await _localParticipant!.setCameraEnabled(target);
 | 
					      await _localParticipant!.setCameraEnabled(target);
 | 
				
			||||||
 | 
					      state = state.copyWith();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -332,9 +325,16 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
      final target = !_localParticipant!.isScreenShareEnabled();
 | 
					      final target = !_localParticipant!.isScreenShareEnabled();
 | 
				
			||||||
      state = state.copyWith(isScreenSharing: target);
 | 
					      state = state.copyWith(isScreenSharing: target);
 | 
				
			||||||
      await _localParticipant!.setScreenShareEnabled(target);
 | 
					      await _localParticipant!.setScreenShareEnabled(target);
 | 
				
			||||||
 | 
					      state = state.copyWith();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<void> toggleSpeakerphone() async {
 | 
				
			||||||
 | 
					    state = state.copyWith(isSpeakerphone: !state.isSpeakerphone);
 | 
				
			||||||
 | 
					    await Hardware.instance.setSpeakerphoneOn(state.isSpeakerphone);
 | 
				
			||||||
 | 
					    state = state.copyWith();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<void> disconnect() async {
 | 
					  Future<void> disconnect() async {
 | 
				
			||||||
    if (_room != null) {
 | 
					    if (_room != null) {
 | 
				
			||||||
      await _room!.disconnect();
 | 
					      await _room!.disconnect();
 | 
				
			||||||
@@ -347,11 +347,39 @@ class CallNotifier extends _$CallNotifier {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void setParticipantVolume(CallParticipantLive live, double volume) {
 | 
				
			||||||
 | 
					    if (participantsVolumes[live.remoteParticipant.sid] == null) {
 | 
				
			||||||
 | 
					      participantsVolumes[live.remoteParticipant.sid] = 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    Helper.setVolume(
 | 
				
			||||||
 | 
					      volume,
 | 
				
			||||||
 | 
					      live
 | 
				
			||||||
 | 
					          .remoteParticipant
 | 
				
			||||||
 | 
					          .audioTrackPublications
 | 
				
			||||||
 | 
					          .first
 | 
				
			||||||
 | 
					          .track!
 | 
				
			||||||
 | 
					          .mediaStreamTrack,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    participantsVolumes[live.remoteParticipant.sid] = volume;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  double getParticipantVolume(CallParticipantLive live) {
 | 
				
			||||||
 | 
					    return participantsVolumes[live.remoteParticipant.sid] ?? 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void dispose() {
 | 
					  void dispose() {
 | 
				
			||||||
    _wsSubscription?.cancel();
 | 
					    state = state.copyWith(
 | 
				
			||||||
 | 
					      error: null,
 | 
				
			||||||
 | 
					      isConnected: false,
 | 
				
			||||||
 | 
					      isMicrophoneEnabled: false,
 | 
				
			||||||
 | 
					      isCameraEnabled: false,
 | 
				
			||||||
 | 
					      isScreenSharing: false,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
    _roomListener?.dispose();
 | 
					    _roomListener?.dispose();
 | 
				
			||||||
    _room?.removeListener(_onRoomChange);
 | 
					    _room?.removeListener(_onRoomChange);
 | 
				
			||||||
    _room?.dispose();
 | 
					    _room?.dispose();
 | 
				
			||||||
    _durationTimer?.cancel();
 | 
					    _durationTimer?.cancel();
 | 
				
			||||||
 | 
					    _roomId = null;
 | 
				
			||||||
 | 
					    participantsVolumes = {};
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,9 +12,9 @@ part of 'call.dart';
 | 
				
			|||||||
// dart format off
 | 
					// dart format off
 | 
				
			||||||
T _$identity<T>(T value) => value;
 | 
					T _$identity<T>(T value) => value;
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$CallState {
 | 
					mixin _$CallState implements DiagnosticableTreeMixin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 bool get isConnected; bool get isMicrophoneEnabled; bool get isCameraEnabled; bool get isScreenSharing; Duration get duration; String? get error;
 | 
					 bool get isConnected; bool get isMicrophoneEnabled; bool get isCameraEnabled; bool get isScreenSharing; bool get isSpeakerphone; Duration get duration; String? get error;
 | 
				
			||||||
/// Create a copy of CallState
 | 
					/// Create a copy of CallState
 | 
				
			||||||
/// 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)
 | 
				
			||||||
@@ -23,19 +22,25 @@ mixin _$CallState {
 | 
				
			|||||||
$CallStateCopyWith<CallState> get copyWith => _$CallStateCopyWithImpl<CallState>(this as CallState, _$identity);
 | 
					$CallStateCopyWith<CallState> get copyWith => _$CallStateCopyWithImpl<CallState>(this as CallState, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
 | 
					  properties
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('type', 'CallState'))
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('isConnected', isConnected))..add(DiagnosticsProperty('isMicrophoneEnabled', isMicrophoneEnabled))..add(DiagnosticsProperty('isCameraEnabled', isCameraEnabled))..add(DiagnosticsProperty('isScreenSharing', isScreenSharing))..add(DiagnosticsProperty('isSpeakerphone', isSpeakerphone))..add(DiagnosticsProperty('duration', duration))..add(DiagnosticsProperty('error', error));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.isSpeakerphone, isSpeakerphone) || other.isSpeakerphone == isSpeakerphone)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,duration,error);
 | 
					int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,isSpeakerphone,duration,error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, duration: $duration, error: $error)';
 | 
					  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, isSpeakerphone: $isSpeakerphone, duration: $duration, error: $error)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,7 +51,7 @@ abstract mixin class $CallStateCopyWith<$Res>  {
 | 
				
			|||||||
  factory $CallStateCopyWith(CallState value, $Res Function(CallState) _then) = _$CallStateCopyWithImpl;
 | 
					  factory $CallStateCopyWith(CallState value, $Res Function(CallState) _then) = _$CallStateCopyWithImpl;
 | 
				
			||||||
@useResult
 | 
					@useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, Duration duration, String? error
 | 
					 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, bool isSpeakerphone, Duration duration, String? error
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,12 +68,13 @@ class _$CallStateCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of CallState
 | 
					/// Create a copy of CallState
 | 
				
			||||||
/// 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? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? duration = null,Object? error = freezed,}) {
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? isSpeakerphone = null,Object? duration = null,Object? error = freezed,}) {
 | 
				
			||||||
  return _then(_self.copyWith(
 | 
					  return _then(_self.copyWith(
 | 
				
			||||||
isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
					isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as bool,isSpeakerphone: null == isSpeakerphone ? _self.isSpeakerphone : isSpeakerphone // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
					as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
					as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,
 | 
					as String?,
 | 
				
			||||||
@@ -78,17 +84,142 @@ as String?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CallState].
 | 
				
			||||||
 | 
					extension CallStatePatterns on CallState {
 | 
				
			||||||
 | 
					/// 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( _CallState value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState() 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( _CallState value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState():
 | 
				
			||||||
 | 
					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( _CallState value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState():
 | 
				
			||||||
 | 
					return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool isConnected,  bool isMicrophoneEnabled,  bool isCameraEnabled,  bool isScreenSharing,  bool isSpeakerphone,  Duration duration,  String? error)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallState() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.isConnected,_that.isMicrophoneEnabled,_that.isCameraEnabled,_that.isScreenSharing,_that.isSpeakerphone,_that.duration,_that.error);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _CallState implements CallState {
 | 
					class _CallState with DiagnosticableTreeMixin implements CallState {
 | 
				
			||||||
  const _CallState({required this.isConnected, required this.isMicrophoneEnabled, required this.isCameraEnabled, required this.isScreenSharing, this.duration = const Duration(seconds: 0), this.error});
 | 
					  const _CallState({required this.isConnected, required this.isMicrophoneEnabled, required this.isCameraEnabled, required this.isScreenSharing, required this.isSpeakerphone, this.duration = const Duration(seconds: 0), this.error});
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  bool isConnected;
 | 
					@override final  bool isConnected;
 | 
				
			||||||
@override final  bool isMicrophoneEnabled;
 | 
					@override final  bool isMicrophoneEnabled;
 | 
				
			||||||
@override final  bool isCameraEnabled;
 | 
					@override final  bool isCameraEnabled;
 | 
				
			||||||
@override final  bool isScreenSharing;
 | 
					@override final  bool isScreenSharing;
 | 
				
			||||||
 | 
					@override final  bool isSpeakerphone;
 | 
				
			||||||
@override@JsonKey() final  Duration duration;
 | 
					@override@JsonKey() final  Duration duration;
 | 
				
			||||||
@override final  String? error;
 | 
					@override final  String? error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -99,19 +230,25 @@ class _CallState implements CallState {
 | 
				
			|||||||
_$CallStateCopyWith<_CallState> get copyWith => __$CallStateCopyWithImpl<_CallState>(this, _$identity);
 | 
					_$CallStateCopyWith<_CallState> get copyWith => __$CallStateCopyWithImpl<_CallState>(this, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
 | 
					  properties
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('type', 'CallState'))
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('isConnected', isConnected))..add(DiagnosticsProperty('isMicrophoneEnabled', isMicrophoneEnabled))..add(DiagnosticsProperty('isCameraEnabled', isCameraEnabled))..add(DiagnosticsProperty('isScreenSharing', isScreenSharing))..add(DiagnosticsProperty('isSpeakerphone', isSpeakerphone))..add(DiagnosticsProperty('duration', duration))..add(DiagnosticsProperty('error', error));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _CallState&&(identical(other.isConnected, isConnected) || other.isConnected == isConnected)&&(identical(other.isMicrophoneEnabled, isMicrophoneEnabled) || other.isMicrophoneEnabled == isMicrophoneEnabled)&&(identical(other.isCameraEnabled, isCameraEnabled) || other.isCameraEnabled == isCameraEnabled)&&(identical(other.isScreenSharing, isScreenSharing) || other.isScreenSharing == isScreenSharing)&&(identical(other.isSpeakerphone, isSpeakerphone) || other.isSpeakerphone == isSpeakerphone)&&(identical(other.duration, duration) || other.duration == duration)&&(identical(other.error, error) || other.error == error));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,duration,error);
 | 
					int get hashCode => Object.hash(runtimeType,isConnected,isMicrophoneEnabled,isCameraEnabled,isScreenSharing,isSpeakerphone,duration,error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, duration: $duration, error: $error)';
 | 
					  return 'CallState(isConnected: $isConnected, isMicrophoneEnabled: $isMicrophoneEnabled, isCameraEnabled: $isCameraEnabled, isScreenSharing: $isScreenSharing, isSpeakerphone: $isSpeakerphone, duration: $duration, error: $error)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -122,7 +259,7 @@ abstract mixin class _$CallStateCopyWith<$Res> implements $CallStateCopyWith<$Re
 | 
				
			|||||||
  factory _$CallStateCopyWith(_CallState value, $Res Function(_CallState) _then) = __$CallStateCopyWithImpl;
 | 
					  factory _$CallStateCopyWith(_CallState value, $Res Function(_CallState) _then) = __$CallStateCopyWithImpl;
 | 
				
			||||||
@override @useResult
 | 
					@override @useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, Duration duration, String? error
 | 
					 bool isConnected, bool isMicrophoneEnabled, bool isCameraEnabled, bool isScreenSharing, bool isSpeakerphone, Duration duration, String? error
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -139,12 +276,13 @@ class __$CallStateCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of CallState
 | 
					/// Create a copy of CallState
 | 
				
			||||||
/// 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? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? duration = null,Object? error = freezed,}) {
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? isConnected = null,Object? isMicrophoneEnabled = null,Object? isCameraEnabled = null,Object? isScreenSharing = null,Object? isSpeakerphone = null,Object? duration = null,Object? error = freezed,}) {
 | 
				
			||||||
  return _then(_CallState(
 | 
					  return _then(_CallState(
 | 
				
			||||||
isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
					isConnected: null == isConnected ? _self.isConnected : isConnected // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isMicrophoneEnabled: null == isMicrophoneEnabled ? _self.isMicrophoneEnabled : isMicrophoneEnabled // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isCameraEnabled: null == isCameraEnabled ? _self.isCameraEnabled : isCameraEnabled // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
					as bool,isScreenSharing: null == isScreenSharing ? _self.isScreenSharing : isScreenSharing // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as bool,isSpeakerphone: null == isSpeakerphone ? _self.isSpeakerphone : isSpeakerphone // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
					as bool,duration: null == duration ? _self.duration : duration // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
					as Duration,error: freezed == error ? _self.error : error // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,
 | 
					as String?,
 | 
				
			||||||
@@ -155,7 +293,7 @@ as String?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$CallParticipantLive {
 | 
					mixin _$CallParticipantLive implements DiagnosticableTreeMixin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 CallParticipant get participant; Participant get remoteParticipant;
 | 
					 CallParticipant get participant; Participant get remoteParticipant;
 | 
				
			||||||
/// Create a copy of CallParticipantLive
 | 
					/// Create a copy of CallParticipantLive
 | 
				
			||||||
@@ -165,6 +303,12 @@ mixin _$CallParticipantLive {
 | 
				
			|||||||
$CallParticipantLiveCopyWith<CallParticipantLive> get copyWith => _$CallParticipantLiveCopyWithImpl<CallParticipantLive>(this as CallParticipantLive, _$identity);
 | 
					$CallParticipantLiveCopyWith<CallParticipantLive> get copyWith => _$CallParticipantLiveCopyWithImpl<CallParticipantLive>(this as CallParticipantLive, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
 | 
					  properties
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('type', 'CallParticipantLive'))
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('participant', participant))..add(DiagnosticsProperty('remoteParticipant', remoteParticipant));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
@@ -176,7 +320,7 @@ bool operator ==(Object other) {
 | 
				
			|||||||
int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
					int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
					  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -225,10 +369,134 @@ $CallParticipantCopyWith<$Res> get participant {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [CallParticipantLive].
 | 
				
			||||||
 | 
					extension CallParticipantLivePatterns on CallParticipantLive {
 | 
				
			||||||
 | 
					/// 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( _CallParticipantLive value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive() 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( _CallParticipantLive value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive():
 | 
				
			||||||
 | 
					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( _CallParticipantLive value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive() 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( CallParticipant participant,  Participant remoteParticipant)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.participant,_that.remoteParticipant);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( CallParticipant participant,  Participant remoteParticipant)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive():
 | 
				
			||||||
 | 
					return $default(_that.participant,_that.remoteParticipant);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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( CallParticipant participant,  Participant remoteParticipant)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _CallParticipantLive() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.participant,_that.remoteParticipant);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _CallParticipantLive extends CallParticipantLive {
 | 
					class _CallParticipantLive extends CallParticipantLive with DiagnosticableTreeMixin {
 | 
				
			||||||
  const _CallParticipantLive({required this.participant, required this.remoteParticipant}): super._();
 | 
					  const _CallParticipantLive({required this.participant, required this.remoteParticipant}): super._();
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -242,6 +510,12 @@ class _CallParticipantLive extends CallParticipantLive {
 | 
				
			|||||||
_$CallParticipantLiveCopyWith<_CallParticipantLive> get copyWith => __$CallParticipantLiveCopyWithImpl<_CallParticipantLive>(this, _$identity);
 | 
					_$CallParticipantLiveCopyWith<_CallParticipantLive> get copyWith => __$CallParticipantLiveCopyWithImpl<_CallParticipantLive>(this, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
 | 
					  properties
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('type', 'CallParticipantLive'))
 | 
				
			||||||
 | 
					    ..add(DiagnosticsProperty('participant', participant))..add(DiagnosticsProperty('remoteParticipant', remoteParticipant));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
@@ -253,7 +527,7 @@ bool operator ==(Object other) {
 | 
				
			|||||||
int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
					int get hashCode => Object.hash(runtimeType,participant,remoteParticipant);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString() {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
					  return 'CallParticipantLive(participant: $participant, remoteParticipant: $remoteParticipant)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'call.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$callNotifierHash() => r'47eaba43aa2af1a107725998f4a34af2c94fbc55';
 | 
					String _$callNotifierHash() => r'18fb807f067eecd3ea42631c1426c3e5f1fb4280';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [CallNotifier].
 | 
					/// See also [CallNotifier].
 | 
				
			||||||
@ProviderFor(CallNotifier)
 | 
					@ProviderFor(CallNotifier)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ class ChatSummary extends _$ChatSummary {
 | 
				
			|||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Future<Map<String, SnChatSummary>> build() async {
 | 
					  Future<Map<String, SnChatSummary>> build() async {
 | 
				
			||||||
    final client = ref.watch(apiClientProvider);
 | 
					    final client = ref.watch(apiClientProvider);
 | 
				
			||||||
    final resp = await client.get('/chat/summary');
 | 
					    final resp = await client.get('/sphere/chat/summary');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final Map<String, dynamic> data = resp.data;
 | 
					    final Map<String, dynamic> data = resp.data;
 | 
				
			||||||
    return data.map(
 | 
					    return data.map(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'chat_summary.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$chatSummaryHash() => r'19aad48b5fabb33a76b742400d3b738ceb81c40c';
 | 
					String _$chatSummaryHash() => r'87a10e4cefa37dc5fa8eadb175ef1b2bed6070bf';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [ChatSummary].
 | 
					/// See also [ChatSummary].
 | 
				
			||||||
@ProviderFor(ChatSummary)
 | 
					@ProviderFor(ChatSummary)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ part 'config.g.dart';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const kTokenPairStoreKey = 'dyn_user_tk';
 | 
					const kTokenPairStoreKey = 'dyn_user_tk';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const kNetworkServerDefault = 'https://nt.solian.app';
 | 
					const kNetworkServerDefault = 'https://api.solian.app';
 | 
				
			||||||
const kNetworkServerStoreKey = 'app_server_url';
 | 
					const kNetworkServerStoreKey = 'app_server_url';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const kAppbarTransparentStoreKey = 'app_bar_transparent';
 | 
					const kAppbarTransparentStoreKey = 'app_bar_transparent';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -81,6 +80,130 @@ as Size?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [AppSettings].
 | 
				
			||||||
 | 
					extension AppSettingsPatterns on AppSettings {
 | 
				
			||||||
 | 
					/// 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( _AppSettings value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings() 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( _AppSettings value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings():
 | 
				
			||||||
 | 
					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( _AppSettings value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to an `orElse` callback.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return orElse();
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult maybeWhen<TResult extends Object?>(TResult Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);case _:
 | 
				
			||||||
 | 
					  return orElse();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A `switch`-like method, using callbacks.
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// As opposed to `map`, this offers destructuring.
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case Subclass2(:final field2):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult when<TResult extends Object?>(TResult Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings():
 | 
				
			||||||
 | 
					return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// A variant of `when` that fallback to returning `null`
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// It is equivalent to doing:
 | 
				
			||||||
 | 
					/// ```dart
 | 
				
			||||||
 | 
					/// switch (sealedClass) {
 | 
				
			||||||
 | 
					///   case Subclass(:final field):
 | 
				
			||||||
 | 
					///     return ...;
 | 
				
			||||||
 | 
					///   case _:
 | 
				
			||||||
 | 
					///     return null;
 | 
				
			||||||
 | 
					/// }
 | 
				
			||||||
 | 
					/// ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@optionalTypeArgs TResult? whenOrNull<TResult extends Object?>(TResult? Function( bool autoTranslate,  bool soundEffects,  bool aprilFoolFeatures,  bool enterToSend,  bool appBarTransparent,  String? customFonts,  int? appColorScheme,  Size? windowSize)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _AppSettings() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.autoTranslate,_that.soundEffects,_that.aprilFoolFeatures,_that.enterToSend,_that.appBarTransparent,_that.customFonts,_that.appColorScheme,_that.windowSize);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,11 +43,9 @@ Future<List<SnEventCalendarEntry>> eventCalendar(
 | 
				
			|||||||
  EventCalendarQuery query,
 | 
					  EventCalendarQuery query,
 | 
				
			||||||
) async {
 | 
					) async {
 | 
				
			||||||
  final client = ref.watch(apiClientProvider);
 | 
					  final client = ref.watch(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/accounts/${query.uname ?? 'me'}/calendar', 
 | 
					  final resp = await client.get(
 | 
				
			||||||
    queryParameters: {
 | 
					    '/id/accounts/${query.uname ?? 'me'}/calendar',
 | 
				
			||||||
      'year': query.year,
 | 
					    queryParameters: {'year': query.year, 'month': query.month},
 | 
				
			||||||
      'month': query.month,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map((e) => SnEventCalendarEntry.fromJson(e))
 | 
					      .map((e) => SnEventCalendarEntry.fromJson(e))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'event_calendar.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$eventCalendarHash() => r'6f2454404fa8660b96334d654490e1a40ee53e10';
 | 
					String _$eventCalendarHash() => r'72232fc044ac3c99b855dca37ff2f06a64be0afb';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Copied from Dart SDK
 | 
					/// Copied from Dart SDK
 | 
				
			||||||
class _SystemHash {
 | 
					class _SystemHash {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								lib/pods/translate.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								lib/pods/translate.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					import 'dart:convert';
 | 
				
			||||||
 | 
					import 'dart:developer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import 'package:freezed_annotation/freezed_annotation.dart';
 | 
				
			||||||
 | 
					import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
				
			||||||
 | 
					import 'package:island/pods/network.dart';
 | 
				
			||||||
 | 
					import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
				
			||||||
 | 
					import 'package:flutter_langdetect/flutter_langdetect.dart' as langdetect;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part 'translate.freezed.dart';
 | 
				
			||||||
 | 
					part 'translate.g.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freezed
 | 
				
			||||||
 | 
					sealed class TranslateQuery with _$TranslateQuery {
 | 
				
			||||||
 | 
					  const factory TranslateQuery({required String text, required String lang}) =
 | 
				
			||||||
 | 
					      _TranslateQuery;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@riverpod
 | 
				
			||||||
 | 
					Future<String> translateString(Ref ref, TranslateQuery query) async {
 | 
				
			||||||
 | 
					  final client = ref.watch(apiClientProvider);
 | 
				
			||||||
 | 
					  final response = await client.post(
 | 
				
			||||||
 | 
					    '/sphere/translate',
 | 
				
			||||||
 | 
					    queryParameters: {'to': query.lang},
 | 
				
			||||||
 | 
					    data: jsonEncode(query.text),
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					  return response.data as String;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@riverpod
 | 
				
			||||||
 | 
					String? detectStringLanguage(Ref ref, String text) {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    return langdetect.detectLangs(text).firstOrNull?.lang;
 | 
				
			||||||
 | 
					  } catch (err) {
 | 
				
			||||||
 | 
					    log('[Language] Unable to detect text\'s language: $text');
 | 
				
			||||||
 | 
					    return null;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										268
									
								
								lib/pods/translate.freezed.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										268
									
								
								lib/pods/translate.freezed.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,268 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
 | 
					// ignore_for_file: type=lint
 | 
				
			||||||
 | 
					// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'translate.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// FreezedGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dart format off
 | 
				
			||||||
 | 
					T _$identity<T>(T value) => value;
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					mixin _$TranslateQuery {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 String get text; String get lang;
 | 
				
			||||||
 | 
					/// Create a copy of TranslateQuery
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline')
 | 
				
			||||||
 | 
					$TranslateQueryCopyWith<TranslateQuery> get copyWith => _$TranslateQueryCopyWithImpl<TranslateQuery>(this as TranslateQuery, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is TranslateQuery&&(identical(other.text, text) || other.text == text)&&(identical(other.lang, lang) || other.lang == lang));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					int get hashCode => Object.hash(runtimeType,text,lang);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					String toString() {
 | 
				
			||||||
 | 
					  return 'TranslateQuery(text: $text, lang: $lang)';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					abstract mixin class $TranslateQueryCopyWith<$Res>  {
 | 
				
			||||||
 | 
					  factory $TranslateQueryCopyWith(TranslateQuery value, $Res Function(TranslateQuery) _then) = _$TranslateQueryCopyWithImpl;
 | 
				
			||||||
 | 
					@useResult
 | 
				
			||||||
 | 
					$Res call({
 | 
				
			||||||
 | 
					 String text, String lang
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					class _$TranslateQueryCopyWithImpl<$Res>
 | 
				
			||||||
 | 
					    implements $TranslateQueryCopyWith<$Res> {
 | 
				
			||||||
 | 
					  _$TranslateQueryCopyWithImpl(this._self, this._then);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final TranslateQuery _self;
 | 
				
			||||||
 | 
					  final $Res Function(TranslateQuery) _then;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of TranslateQuery
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? text = null,Object? lang = null,}) {
 | 
				
			||||||
 | 
					  return _then(_self.copyWith(
 | 
				
			||||||
 | 
					text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,lang: null == lang ? _self.lang : lang // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,
 | 
				
			||||||
 | 
					  ));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [TranslateQuery].
 | 
				
			||||||
 | 
					extension TranslateQueryPatterns on TranslateQuery {
 | 
				
			||||||
 | 
					/// 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( _TranslateQuery value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery() 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( _TranslateQuery value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery():
 | 
				
			||||||
 | 
					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( _TranslateQuery value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery() 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 text,  String lang)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.text,_that.lang);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 text,  String lang)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery():
 | 
				
			||||||
 | 
					return $default(_that.text,_that.lang);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 text,  String lang)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _TranslateQuery() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.text,_that.lang);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _TranslateQuery implements TranslateQuery {
 | 
				
			||||||
 | 
					  const _TranslateQuery({required this.text, required this.lang});
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override final  String text;
 | 
				
			||||||
 | 
					@override final  String lang;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of TranslateQuery
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@override @JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
 | 
					@pragma('vm:prefer-inline')
 | 
				
			||||||
 | 
					_$TranslateQueryCopyWith<_TranslateQuery> get copyWith => __$TranslateQueryCopyWithImpl<_TranslateQuery>(this, _$identity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _TranslateQuery&&(identical(other.text, text) || other.text == text)&&(identical(other.lang, lang) || other.lang == lang));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					int get hashCode => Object.hash(runtimeType,text,lang);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override
 | 
				
			||||||
 | 
					String toString() {
 | 
				
			||||||
 | 
					  return 'TranslateQuery(text: $text, lang: $lang)';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					abstract mixin class _$TranslateQueryCopyWith<$Res> implements $TranslateQueryCopyWith<$Res> {
 | 
				
			||||||
 | 
					  factory _$TranslateQueryCopyWith(_TranslateQuery value, $Res Function(_TranslateQuery) _then) = __$TranslateQueryCopyWithImpl;
 | 
				
			||||||
 | 
					@override @useResult
 | 
				
			||||||
 | 
					$Res call({
 | 
				
			||||||
 | 
					 String text, String lang
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					class __$TranslateQueryCopyWithImpl<$Res>
 | 
				
			||||||
 | 
					    implements _$TranslateQueryCopyWith<$Res> {
 | 
				
			||||||
 | 
					  __$TranslateQueryCopyWithImpl(this._self, this._then);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final _TranslateQuery _self;
 | 
				
			||||||
 | 
					  final $Res Function(_TranslateQuery) _then;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Create a copy of TranslateQuery
 | 
				
			||||||
 | 
					/// with the given fields replaced by the non-null parameter values.
 | 
				
			||||||
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? text = null,Object? lang = null,}) {
 | 
				
			||||||
 | 
					  return _then(_TranslateQuery(
 | 
				
			||||||
 | 
					text: null == text ? _self.text : text // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,lang: null == lang ? _self.lang : lang // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String,
 | 
				
			||||||
 | 
					  ));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// dart format on
 | 
				
			||||||
							
								
								
									
										274
									
								
								lib/pods/translate.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										274
									
								
								lib/pods/translate.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,274 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'translate.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// RiverpodGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					String _$translateStringHash() => r'51d638cf07cbf3ffa9469298f5bd9c667bc0ccb7';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Copied from Dart SDK
 | 
				
			||||||
 | 
					class _SystemHash {
 | 
				
			||||||
 | 
					  _SystemHash._();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static int combine(int hash, int value) {
 | 
				
			||||||
 | 
					    // ignore: parameter_assignments
 | 
				
			||||||
 | 
					    hash = 0x1fffffff & (hash + value);
 | 
				
			||||||
 | 
					    // ignore: parameter_assignments
 | 
				
			||||||
 | 
					    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
 | 
				
			||||||
 | 
					    return hash ^ (hash >> 6);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static int finish(int hash) {
 | 
				
			||||||
 | 
					    // ignore: parameter_assignments
 | 
				
			||||||
 | 
					    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
 | 
				
			||||||
 | 
					    // ignore: parameter_assignments
 | 
				
			||||||
 | 
					    hash = hash ^ (hash >> 11);
 | 
				
			||||||
 | 
					    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [translateString].
 | 
				
			||||||
 | 
					@ProviderFor(translateString)
 | 
				
			||||||
 | 
					const translateStringProvider = TranslateStringFamily();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [translateString].
 | 
				
			||||||
 | 
					class TranslateStringFamily extends Family<AsyncValue<String>> {
 | 
				
			||||||
 | 
					  /// See also [translateString].
 | 
				
			||||||
 | 
					  const TranslateStringFamily();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// See also [translateString].
 | 
				
			||||||
 | 
					  TranslateStringProvider call(TranslateQuery query) {
 | 
				
			||||||
 | 
					    return TranslateStringProvider(query);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  TranslateStringProvider getProviderOverride(
 | 
				
			||||||
 | 
					    covariant TranslateStringProvider provider,
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    return call(provider.query);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static const Iterable<ProviderOrFamily>? _dependencies = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Iterable<ProviderOrFamily>? get dependencies => _dependencies;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
 | 
				
			||||||
 | 
					      _allTransitiveDependencies;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  String? get name => r'translateStringProvider';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [translateString].
 | 
				
			||||||
 | 
					class TranslateStringProvider extends AutoDisposeFutureProvider<String> {
 | 
				
			||||||
 | 
					  /// See also [translateString].
 | 
				
			||||||
 | 
					  TranslateStringProvider(TranslateQuery query)
 | 
				
			||||||
 | 
					    : this._internal(
 | 
				
			||||||
 | 
					        (ref) => translateString(ref as TranslateStringRef, query),
 | 
				
			||||||
 | 
					        from: translateStringProvider,
 | 
				
			||||||
 | 
					        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
 | 
				
			||||||
 | 
					  bool operator ==(Object other) {
 | 
				
			||||||
 | 
					    return other is TranslateStringProvider && other.query == query;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  int get hashCode {
 | 
				
			||||||
 | 
					    var hash = _SystemHash.combine(0, runtimeType.hashCode);
 | 
				
			||||||
 | 
					    hash = _SystemHash.combine(hash, query.hashCode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return _SystemHash.finish(hash);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
				
			||||||
 | 
					// ignore: unused_element
 | 
				
			||||||
 | 
					mixin TranslateStringRef on AutoDisposeFutureProviderRef<String> {
 | 
				
			||||||
 | 
					  /// The parameter `query` of this provider.
 | 
				
			||||||
 | 
					  TranslateQuery get query;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _TranslateStringProviderElement
 | 
				
			||||||
 | 
					    extends AutoDisposeFutureProviderElement<String>
 | 
				
			||||||
 | 
					    with TranslateStringRef {
 | 
				
			||||||
 | 
					  _TranslateStringProviderElement(super.provider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  TranslateQuery get query => (origin as TranslateStringProvider).query;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					String _$detectStringLanguageHash() =>
 | 
				
			||||||
 | 
					    r'697b68464b3d00927cc43ccc1ba8ba93f2a470ed';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					@ProviderFor(detectStringLanguage)
 | 
				
			||||||
 | 
					const detectStringLanguageProvider = DetectStringLanguageFamily();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					class DetectStringLanguageFamily extends Family<String?> {
 | 
				
			||||||
 | 
					  /// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					  const DetectStringLanguageFamily();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					  DetectStringLanguageProvider call(String text) {
 | 
				
			||||||
 | 
					    return DetectStringLanguageProvider(text);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  DetectStringLanguageProvider getProviderOverride(
 | 
				
			||||||
 | 
					    covariant DetectStringLanguageProvider provider,
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    return call(provider.text);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static const Iterable<ProviderOrFamily>? _dependencies = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Iterable<ProviderOrFamily>? get dependencies => _dependencies;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
 | 
				
			||||||
 | 
					      _allTransitiveDependencies;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  String? get name => r'detectStringLanguageProvider';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					class DetectStringLanguageProvider extends AutoDisposeProvider<String?> {
 | 
				
			||||||
 | 
					  /// See also [detectStringLanguage].
 | 
				
			||||||
 | 
					  DetectStringLanguageProvider(String text)
 | 
				
			||||||
 | 
					    : this._internal(
 | 
				
			||||||
 | 
					        (ref) => detectStringLanguage(ref as DetectStringLanguageRef, text),
 | 
				
			||||||
 | 
					        from: detectStringLanguageProvider,
 | 
				
			||||||
 | 
					        name: r'detectStringLanguageProvider',
 | 
				
			||||||
 | 
					        debugGetCreateSourceHash:
 | 
				
			||||||
 | 
					            const bool.fromEnvironment('dart.vm.product')
 | 
				
			||||||
 | 
					                ? null
 | 
				
			||||||
 | 
					                : _$detectStringLanguageHash,
 | 
				
			||||||
 | 
					        dependencies: DetectStringLanguageFamily._dependencies,
 | 
				
			||||||
 | 
					        allTransitiveDependencies:
 | 
				
			||||||
 | 
					            DetectStringLanguageFamily._allTransitiveDependencies,
 | 
				
			||||||
 | 
					        text: text,
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  DetectStringLanguageProvider._internal(
 | 
				
			||||||
 | 
					    super._createNotifier, {
 | 
				
			||||||
 | 
					    required super.name,
 | 
				
			||||||
 | 
					    required super.dependencies,
 | 
				
			||||||
 | 
					    required super.allTransitiveDependencies,
 | 
				
			||||||
 | 
					    required super.debugGetCreateSourceHash,
 | 
				
			||||||
 | 
					    required super.from,
 | 
				
			||||||
 | 
					    required this.text,
 | 
				
			||||||
 | 
					  }) : super.internal();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final String text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Override overrideWith(
 | 
				
			||||||
 | 
					    String? Function(DetectStringLanguageRef provider) create,
 | 
				
			||||||
 | 
					  ) {
 | 
				
			||||||
 | 
					    return ProviderOverride(
 | 
				
			||||||
 | 
					      origin: this,
 | 
				
			||||||
 | 
					      override: DetectStringLanguageProvider._internal(
 | 
				
			||||||
 | 
					        (ref) => create(ref as DetectStringLanguageRef),
 | 
				
			||||||
 | 
					        from: from,
 | 
				
			||||||
 | 
					        name: null,
 | 
				
			||||||
 | 
					        dependencies: null,
 | 
				
			||||||
 | 
					        allTransitiveDependencies: null,
 | 
				
			||||||
 | 
					        debugGetCreateSourceHash: null,
 | 
				
			||||||
 | 
					        text: text,
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @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,7 +14,7 @@ class UserInfoNotifier extends StateNotifier<AsyncValue<SnAccount?>> {
 | 
				
			|||||||
  Future<void> fetchUser() async {
 | 
					  Future<void> fetchUser() async {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final client = _ref.read(apiClientProvider);
 | 
					      final client = _ref.read(apiClientProvider);
 | 
				
			||||||
      final response = await client.get('/accounts/me');
 | 
					      final response = await client.get('/id/accounts/me');
 | 
				
			||||||
      final user = SnAccount.fromJson(response.data);
 | 
					      final user = SnAccount.fromJson(response.data);
 | 
				
			||||||
      state = AsyncValue.data(user);
 | 
					      state = AsyncValue.data(user);
 | 
				
			||||||
    } catch (error, stackTrace) {
 | 
					    } catch (error, stackTrace) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ final webFeedListProvider = FutureProvider.family<List<SnWebFeed>, String>((
 | 
				
			|||||||
  pubName,
 | 
					  pubName,
 | 
				
			||||||
) async {
 | 
					) async {
 | 
				
			||||||
  final client = ref.watch(apiClientProvider);
 | 
					  final client = ref.watch(apiClientProvider);
 | 
				
			||||||
  final response = await client.get('/publishers/$pubName/feeds');
 | 
					  final response = await client.get('/sphere/publishers/$pubName/feeds');
 | 
				
			||||||
  return (response.data as List)
 | 
					  return (response.data as List)
 | 
				
			||||||
      .map((json) => SnWebFeed.fromJson(json))
 | 
					      .map((json) => SnWebFeed.fromJson(json))
 | 
				
			||||||
      .toList();
 | 
					      .toList();
 | 
				
			||||||
@@ -39,7 +39,7 @@ class WebFeedNotifier
 | 
				
			|||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      final response = await client.get(
 | 
					      final response = await client.get(
 | 
				
			||||||
        '/publishers/${arg.pubName}/feeds/${arg.feedId}',
 | 
					        '/sphere/publishers/${arg.pubName}/feeds/${arg.feedId}',
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      return SnWebFeed.fromJson(response.data);
 | 
					      return SnWebFeed.fromJson(response.data);
 | 
				
			||||||
    } catch (e) {
 | 
					    } catch (e) {
 | 
				
			||||||
@@ -51,7 +51,7 @@ class WebFeedNotifier
 | 
				
			|||||||
    state = const AsyncValue.loading();
 | 
					    state = const AsyncValue.loading();
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      final url = '/publishers/${feed.publisherId}/feeds';
 | 
					      final url = '/sphere/publishers/${feed.publisherId}/feeds';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      final response =
 | 
					      final response =
 | 
				
			||||||
          feed.id.isEmpty
 | 
					          feed.id.isEmpty
 | 
				
			||||||
@@ -72,7 +72,7 @@ class WebFeedNotifier
 | 
				
			|||||||
    state = const AsyncValue.loading();
 | 
					    state = const AsyncValue.loading();
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      await client.delete('/publishers/${arg.pubName}/feeds/$feedId');
 | 
					      await client.delete('/sphere/publishers/${arg.pubName}/feeds/$feedId');
 | 
				
			||||||
      state = AsyncValue.data(
 | 
					      state = AsyncValue.data(
 | 
				
			||||||
        SnWebFeed(
 | 
					        SnWebFeed(
 | 
				
			||||||
          id: '',
 | 
					          id: '',
 | 
				
			||||||
@@ -98,7 +98,7 @@ class WebFeedNotifier
 | 
				
			|||||||
    try {
 | 
					    try {
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      await client.post(
 | 
					      await client.post(
 | 
				
			||||||
        '/publishers/${arg.pubName}/feeds/$feedId/scrap',
 | 
					        '/sphere/publishers/${arg.pubName}/feeds/$feedId/scrap',
 | 
				
			||||||
        options: Options(
 | 
					        options: Options(
 | 
				
			||||||
          sendTimeout: const Duration(seconds: 60),
 | 
					          sendTimeout: const Duration(seconds: 60),
 | 
				
			||||||
          receiveTimeout: const Duration(seconds: 180),
 | 
					          receiveTimeout: const Duration(seconds: 180),
 | 
				
			||||||
@@ -107,7 +107,7 @@ class WebFeedNotifier
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      // Reload the feed
 | 
					      // Reload the feed
 | 
				
			||||||
      final response = await client.get(
 | 
					      final response = await client.get(
 | 
				
			||||||
        '/publishers/${arg.pubName}/feeds/$feedId',
 | 
					        '/sphere/publishers/${arg.pubName}/feeds/$feedId',
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      state = AsyncValue.data(SnWebFeed.fromJson(response.data));
 | 
					      state = AsyncValue.data(SnWebFeed.fromJson(response.data));
 | 
				
			||||||
    } catch (error, stackTrace) {
 | 
					    } catch (error, stackTrace) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,7 @@ sealed class WebSocketPacket with _$WebSocketPacket {
 | 
				
			|||||||
  const factory WebSocketPacket({
 | 
					  const factory WebSocketPacket({
 | 
				
			||||||
    required String type,
 | 
					    required String type,
 | 
				
			||||||
    required Map<String, dynamic>? data,
 | 
					    required Map<String, dynamic>? data,
 | 
				
			||||||
 | 
					    String? endpoint,
 | 
				
			||||||
    String? errorMessage,
 | 
					    String? errorMessage,
 | 
				
			||||||
  }) = _WebSocketPacket;
 | 
					  }) = _WebSocketPacket;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -45,6 +46,10 @@ class WebSocketService {
 | 
				
			|||||||
  final StreamController<WebSocketState> _statusStreamController =
 | 
					  final StreamController<WebSocketState> _statusStreamController =
 | 
				
			||||||
      StreamController<WebSocketState>.broadcast();
 | 
					      StreamController<WebSocketState>.broadcast();
 | 
				
			||||||
  Timer? _reconnectTimer;
 | 
					  Timer? _reconnectTimer;
 | 
				
			||||||
 | 
					  Timer? _heartbeatTimer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  DateTime? _heartbeatAt;
 | 
				
			||||||
 | 
					  Duration? _heartbeatDelay;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Stream<WebSocketPacket> get dataStream => _streamController.stream;
 | 
					  Stream<WebSocketPacket> get dataStream => _streamController.stream;
 | 
				
			||||||
  Stream<WebSocketState> get statusStream => _statusStreamController.stream;
 | 
					  Stream<WebSocketState> get statusStream => _statusStreamController.stream;
 | 
				
			||||||
@@ -65,11 +70,12 @@ class WebSocketService {
 | 
				
			|||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        _channel = IOWebSocketChannel.connect(
 | 
					        _channel = IOWebSocketChannel.connect(
 | 
				
			||||||
          Uri.parse(url),
 | 
					          Uri.parse(url),
 | 
				
			||||||
          headers: {'Authorization': 'Bearer $token'},
 | 
					          headers: {'Authorization': 'AtField $token'},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      await _channel!.ready;
 | 
					      await _channel!.ready;
 | 
				
			||||||
      _statusStreamController.sink.add(WebSocketState.connected());
 | 
					      _statusStreamController.sink.add(WebSocketState.connected());
 | 
				
			||||||
 | 
					      _scheduleHeartbeat();
 | 
				
			||||||
      _channel!.stream.listen(
 | 
					      _channel!.stream.listen(
 | 
				
			||||||
        (data) {
 | 
					        (data) {
 | 
				
			||||||
          final dataStr =
 | 
					          final dataStr =
 | 
				
			||||||
@@ -79,6 +85,13 @@ class WebSocketService {
 | 
				
			|||||||
          log(
 | 
					          log(
 | 
				
			||||||
            "[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}",
 | 
					            "[WebSocket] Received packet: ${packet.type} ${packet.errorMessage}",
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
 | 
					          if (packet.type == 'pong' && _heartbeatAt != null) {
 | 
				
			||||||
 | 
					            var now = DateTime.now();
 | 
				
			||||||
 | 
					            _heartbeatDelay = now.difference(_heartbeatAt!);
 | 
				
			||||||
 | 
					            log(
 | 
				
			||||||
 | 
					              "[WebSocket] Server respond last heartbeat for ${_heartbeatDelay!.inMilliseconds} ms",
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        onDone: () {
 | 
					        onDone: () {
 | 
				
			||||||
          log('[WebSocket] Connection closed, attempting to reconnect...');
 | 
					          log('[WebSocket] Connection closed, attempting to reconnect...');
 | 
				
			||||||
@@ -107,6 +120,19 @@ class WebSocketService {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void _scheduleHeartbeat() {
 | 
				
			||||||
 | 
					    _heartbeatTimer?.cancel();
 | 
				
			||||||
 | 
					    _heartbeatTimer = Timer.periodic(const Duration(seconds: 60), (_) {
 | 
				
			||||||
 | 
					      _beatTheHeart();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void _beatTheHeart() {
 | 
				
			||||||
 | 
					    _heartbeatAt = DateTime.now();
 | 
				
			||||||
 | 
					    log('[WebSocket] We\'re beating the heart! $_heartbeatAt');
 | 
				
			||||||
 | 
					    sendMessage(jsonEncode(WebSocketPacket(type: 'ping', data: null)));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  WebSocketChannel? get ws => _channel;
 | 
					  WebSocketChannel? get ws => _channel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void sendMessage(String message) {
 | 
					  void sendMessage(String message) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
// dart format width=80
 | 
					 | 
				
			||||||
// coverage:ignore-file
 | 
					 | 
				
			||||||
// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					// coverage:ignore-file
 | 
				
			||||||
// ignore_for_file: type=lint
 | 
					// 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
 | 
					// 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,6 +47,148 @@ $WebSocketStateCopyWith(WebSocketState _, $Res Function(WebSocketState) __);
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [WebSocketState].
 | 
				
			||||||
 | 
					extension WebSocketStatePatterns on WebSocketState {
 | 
				
			||||||
 | 
					/// 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( _Connected value)?  connected,TResult Function( _Connecting value)?  connecting,TResult Function( _Disconnected value)?  disconnected,TResult Function( _Error value)?  error,required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected() when connected != null:
 | 
				
			||||||
 | 
					return connected(_that);case _Connecting() when connecting != null:
 | 
				
			||||||
 | 
					return connecting(_that);case _Disconnected() when disconnected != null:
 | 
				
			||||||
 | 
					return disconnected(_that);case _Error() when error != null:
 | 
				
			||||||
 | 
					return error(_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?>({required TResult Function( _Connected value)  connected,required TResult Function( _Connecting value)  connecting,required TResult Function( _Disconnected value)  disconnected,required TResult Function( _Error value)  error,}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected():
 | 
				
			||||||
 | 
					return connected(_that);case _Connecting():
 | 
				
			||||||
 | 
					return connecting(_that);case _Disconnected():
 | 
				
			||||||
 | 
					return disconnected(_that);case _Error():
 | 
				
			||||||
 | 
					return error(_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( _Connected value)?  connected,TResult? Function( _Connecting value)?  connecting,TResult? Function( _Disconnected value)?  disconnected,TResult? Function( _Error value)?  error,}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected() when connected != null:
 | 
				
			||||||
 | 
					return connected(_that);case _Connecting() when connecting != null:
 | 
				
			||||||
 | 
					return connecting(_that);case _Disconnected() when disconnected != null:
 | 
				
			||||||
 | 
					return disconnected(_that);case _Error() when error != null:
 | 
				
			||||||
 | 
					return error(_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()?  connected,TResult Function()?  connecting,TResult Function()?  disconnected,TResult Function( String message)?  error,required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected() when connected != null:
 | 
				
			||||||
 | 
					return connected();case _Connecting() when connecting != null:
 | 
				
			||||||
 | 
					return connecting();case _Disconnected() when disconnected != null:
 | 
				
			||||||
 | 
					return disconnected();case _Error() when error != null:
 | 
				
			||||||
 | 
					return error(_that.message);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?>({required TResult Function()  connected,required TResult Function()  connecting,required TResult Function()  disconnected,required TResult Function( String message)  error,}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected():
 | 
				
			||||||
 | 
					return connected();case _Connecting():
 | 
				
			||||||
 | 
					return connecting();case _Disconnected():
 | 
				
			||||||
 | 
					return disconnected();case _Error():
 | 
				
			||||||
 | 
					return error(_that.message);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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()?  connected,TResult? Function()?  connecting,TResult? Function()?  disconnected,TResult? Function( String message)?  error,}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _Connected() when connected != null:
 | 
				
			||||||
 | 
					return connected();case _Connecting() when connecting != null:
 | 
				
			||||||
 | 
					return connecting();case _Disconnected() when disconnected != null:
 | 
				
			||||||
 | 
					return disconnected();case _Error() when error != null:
 | 
				
			||||||
 | 
					return error(_that.message);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -238,7 +379,7 @@ as String,
 | 
				
			|||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
mixin _$WebSocketPacket implements DiagnosticableTreeMixin {
 | 
					mixin _$WebSocketPacket implements DiagnosticableTreeMixin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 String get type; Map<String, dynamic>? get data; String? get errorMessage;
 | 
					 String get type; Map<String, dynamic>? get data; String? get endpoint; String? get errorMessage;
 | 
				
			||||||
/// Create a copy of WebSocketPacket
 | 
					/// Create a copy of WebSocketPacket
 | 
				
			||||||
/// 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)
 | 
				
			||||||
@@ -252,21 +393,21 @@ $WebSocketPacketCopyWith<WebSocketPacket> get copyWith => _$WebSocketPacketCopyW
 | 
				
			|||||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
  properties
 | 
					  properties
 | 
				
			||||||
    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
					    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
				
			||||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
					    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('endpoint', endpoint))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other.data, data)&&(identical(other.endpoint, endpoint) || other.endpoint == endpoint)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(data),errorMessage);
 | 
					int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(data),endpoint,errorMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'WebSocketPacket(type: $type, data: $data, errorMessage: $errorMessage)';
 | 
					  return 'WebSocketPacket(type: $type, data: $data, endpoint: $endpoint, errorMessage: $errorMessage)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -277,7 +418,7 @@ abstract mixin class $WebSocketPacketCopyWith<$Res>  {
 | 
				
			|||||||
  factory $WebSocketPacketCopyWith(WebSocketPacket value, $Res Function(WebSocketPacket) _then) = _$WebSocketPacketCopyWithImpl;
 | 
					  factory $WebSocketPacketCopyWith(WebSocketPacket value, $Res Function(WebSocketPacket) _then) = _$WebSocketPacketCopyWithImpl;
 | 
				
			||||||
@useResult
 | 
					@useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String type, Map<String, dynamic>? data, String? errorMessage
 | 
					 String type, Map<String, dynamic>? data, String? endpoint, String? errorMessage
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -294,11 +435,12 @@ class _$WebSocketPacketCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of WebSocketPacket
 | 
					/// Create a copy of WebSocketPacket
 | 
				
			||||||
/// 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? type = null,Object? data = freezed,Object? errorMessage = freezed,}) {
 | 
					@pragma('vm:prefer-inline') @override $Res call({Object? type = null,Object? data = freezed,Object? endpoint = freezed,Object? errorMessage = freezed,}) {
 | 
				
			||||||
  return _then(_self.copyWith(
 | 
					  return _then(_self.copyWith(
 | 
				
			||||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
					type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
					as String,data: freezed == data ? _self.data : data // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,endpoint: freezed == endpoint ? _self.endpoint : endpoint // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,
 | 
					as String?,
 | 
				
			||||||
  ));
 | 
					  ));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -306,11 +448,135 @@ as String?,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Adds pattern-matching-related methods to [WebSocketPacket].
 | 
				
			||||||
 | 
					extension WebSocketPacketPatterns on WebSocketPacket {
 | 
				
			||||||
 | 
					/// 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( _WebSocketPacket value)?  $default,{required TResult orElse(),}){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket() 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( _WebSocketPacket value)  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket():
 | 
				
			||||||
 | 
					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( _WebSocketPacket value)?  $default,){
 | 
				
			||||||
 | 
					final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket() 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 type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)?  $default,{required TResult orElse(),}) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);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 type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket():
 | 
				
			||||||
 | 
					return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/// 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 type,  Map<String, dynamic>? data,  String? endpoint,  String? errorMessage)?  $default,) {final _that = this;
 | 
				
			||||||
 | 
					switch (_that) {
 | 
				
			||||||
 | 
					case _WebSocketPacket() when $default != null:
 | 
				
			||||||
 | 
					return $default(_that.type,_that.data,_that.endpoint,_that.errorMessage);case _:
 | 
				
			||||||
 | 
					  return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// @nodoc
 | 
					/// @nodoc
 | 
				
			||||||
@JsonSerializable()
 | 
					@JsonSerializable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class _WebSocketPacket with DiagnosticableTreeMixin implements WebSocketPacket {
 | 
					class _WebSocketPacket with DiagnosticableTreeMixin implements WebSocketPacket {
 | 
				
			||||||
  const _WebSocketPacket({required this.type, required final  Map<String, dynamic>? data, this.errorMessage}): _data = data;
 | 
					  const _WebSocketPacket({required this.type, required final  Map<String, dynamic>? data, this.endpoint, this.errorMessage}): _data = data;
 | 
				
			||||||
  factory _WebSocketPacket.fromJson(Map<String, dynamic> json) => _$WebSocketPacketFromJson(json);
 | 
					  factory _WebSocketPacket.fromJson(Map<String, dynamic> json) => _$WebSocketPacketFromJson(json);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override final  String type;
 | 
					@override final  String type;
 | 
				
			||||||
@@ -323,6 +589,7 @@ class _WebSocketPacket with DiagnosticableTreeMixin implements WebSocketPacket {
 | 
				
			|||||||
  return EqualUnmodifiableMapView(value);
 | 
					  return EqualUnmodifiableMapView(value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@override final  String? endpoint;
 | 
				
			||||||
@override final  String? errorMessage;
 | 
					@override final  String? errorMessage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Create a copy of WebSocketPacket
 | 
					/// Create a copy of WebSocketPacket
 | 
				
			||||||
@@ -339,21 +606,21 @@ Map<String, dynamic> toJson() {
 | 
				
			|||||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
					void debugFillProperties(DiagnosticPropertiesBuilder properties) {
 | 
				
			||||||
  properties
 | 
					  properties
 | 
				
			||||||
    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
					    ..add(DiagnosticsProperty('type', 'WebSocketPacket'))
 | 
				
			||||||
    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
					    ..add(DiagnosticsProperty('type', type))..add(DiagnosticsProperty('data', data))..add(DiagnosticsProperty('endpoint', endpoint))..add(DiagnosticsProperty('errorMessage', errorMessage));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
bool operator ==(Object other) {
 | 
					bool operator ==(Object other) {
 | 
				
			||||||
  return identical(this, other) || (other.runtimeType == runtimeType&&other is _WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._data, _data)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
					  return identical(this, other) || (other.runtimeType == runtimeType&&other is _WebSocketPacket&&(identical(other.type, type) || other.type == type)&&const DeepCollectionEquality().equals(other._data, _data)&&(identical(other.endpoint, endpoint) || other.endpoint == endpoint)&&(identical(other.errorMessage, errorMessage) || other.errorMessage == errorMessage));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@JsonKey(includeFromJson: false, includeToJson: false)
 | 
					@JsonKey(includeFromJson: false, includeToJson: false)
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(_data),errorMessage);
 | 
					int get hashCode => Object.hash(runtimeType,type,const DeepCollectionEquality().hash(_data),endpoint,errorMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@override
 | 
					@override
 | 
				
			||||||
String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
					String toString({ DiagnosticLevel minLevel = DiagnosticLevel.info }) {
 | 
				
			||||||
  return 'WebSocketPacket(type: $type, data: $data, errorMessage: $errorMessage)';
 | 
					  return 'WebSocketPacket(type: $type, data: $data, endpoint: $endpoint, errorMessage: $errorMessage)';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -364,7 +631,7 @@ abstract mixin class _$WebSocketPacketCopyWith<$Res> implements $WebSocketPacket
 | 
				
			|||||||
  factory _$WebSocketPacketCopyWith(_WebSocketPacket value, $Res Function(_WebSocketPacket) _then) = __$WebSocketPacketCopyWithImpl;
 | 
					  factory _$WebSocketPacketCopyWith(_WebSocketPacket value, $Res Function(_WebSocketPacket) _then) = __$WebSocketPacketCopyWithImpl;
 | 
				
			||||||
@override @useResult
 | 
					@override @useResult
 | 
				
			||||||
$Res call({
 | 
					$Res call({
 | 
				
			||||||
 String type, Map<String, dynamic>? data, String? errorMessage
 | 
					 String type, Map<String, dynamic>? data, String? endpoint, String? errorMessage
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -381,11 +648,12 @@ class __$WebSocketPacketCopyWithImpl<$Res>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/// Create a copy of WebSocketPacket
 | 
					/// Create a copy of WebSocketPacket
 | 
				
			||||||
/// 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? type = null,Object? data = freezed,Object? errorMessage = freezed,}) {
 | 
					@override @pragma('vm:prefer-inline') $Res call({Object? type = null,Object? data = freezed,Object? endpoint = freezed,Object? errorMessage = freezed,}) {
 | 
				
			||||||
  return _then(_WebSocketPacket(
 | 
					  return _then(_WebSocketPacket(
 | 
				
			||||||
type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
					type: null == type ? _self.type : type // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String,data: freezed == data ? _self._data : data // ignore: cast_nullable_to_non_nullable
 | 
					as String,data: freezed == data ? _self._data : data // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as Map<String, dynamic>?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
					as Map<String, dynamic>?,endpoint: freezed == endpoint ? _self.endpoint : endpoint // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
 | 
					as String?,errorMessage: freezed == errorMessage ? _self.errorMessage : errorMessage // ignore: cast_nullable_to_non_nullable
 | 
				
			||||||
as String?,
 | 
					as String?,
 | 
				
			||||||
  ));
 | 
					  ));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@ _WebSocketPacket _$WebSocketPacketFromJson(Map<String, dynamic> json) =>
 | 
				
			|||||||
    _WebSocketPacket(
 | 
					    _WebSocketPacket(
 | 
				
			||||||
      type: json['type'] as String,
 | 
					      type: json['type'] as String,
 | 
				
			||||||
      data: json['data'] as Map<String, dynamic>?,
 | 
					      data: json['data'] as Map<String, dynamic>?,
 | 
				
			||||||
 | 
					      endpoint: json['endpoint'] as String?,
 | 
				
			||||||
      errorMessage: json['error_message'] as String?,
 | 
					      errorMessage: json['error_message'] as String?,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,5 +18,6 @@ Map<String, dynamic> _$WebSocketPacketToJson(_WebSocketPacket instance) =>
 | 
				
			|||||||
    <String, dynamic>{
 | 
					    <String, dynamic>{
 | 
				
			||||||
      'type': instance.type,
 | 
					      'type': instance.type,
 | 
				
			||||||
      'data': instance.data,
 | 
					      'data': instance.data,
 | 
				
			||||||
 | 
					      'endpoint': instance.endpoint,
 | 
				
			||||||
      'error_message': instance.errorMessage,
 | 
					      'error_message': instance.errorMessage,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										139
									
								
								lib/route.dart
									
									
									
									
									
								
							
							
						
						
									
										139
									
								
								lib/route.dart
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ import 'package:island/screens/posts/post_search.dart';
 | 
				
			|||||||
import 'package:island/widgets/app_wrapper.dart';
 | 
					import 'package:island/widgets/app_wrapper.dart';
 | 
				
			||||||
import 'package:island/screens/tabs.dart';
 | 
					import 'package:island/screens/tabs.dart';
 | 
				
			||||||
import 'package:island/screens/explore.dart';
 | 
					import 'package:island/screens/explore.dart';
 | 
				
			||||||
import 'package:island/screens/article_detail_screen.dart';
 | 
					import 'package:island/screens/discovery/article_detail.dart';
 | 
				
			||||||
import 'package:island/screens/account.dart';
 | 
					import 'package:island/screens/account.dart';
 | 
				
			||||||
import 'package:island/screens/notification.dart';
 | 
					import 'package:island/screens/notification.dart';
 | 
				
			||||||
import 'package:island/screens/wallet.dart';
 | 
					import 'package:island/screens/wallet.dart';
 | 
				
			||||||
@@ -28,9 +28,11 @@ import 'package:island/screens/creators/hub.dart';
 | 
				
			|||||||
import 'package:island/screens/creators/posts/post_manage_list.dart';
 | 
					import 'package:island/screens/creators/posts/post_manage_list.dart';
 | 
				
			||||||
import 'package:island/screens/creators/stickers/stickers.dart';
 | 
					import 'package:island/screens/creators/stickers/stickers.dart';
 | 
				
			||||||
import 'package:island/screens/creators/stickers/pack_detail.dart';
 | 
					import 'package:island/screens/creators/stickers/pack_detail.dart';
 | 
				
			||||||
 | 
					import 'package:island/screens/creators/poll/poll_list.dart';
 | 
				
			||||||
import 'package:island/screens/creators/publishers.dart';
 | 
					import 'package:island/screens/creators/publishers.dart';
 | 
				
			||||||
import 'package:island/screens/creators/webfeed/webfeed_list.dart';
 | 
					import 'package:island/screens/creators/webfeed/webfeed_list.dart';
 | 
				
			||||||
import 'package:island/screens/creators/webfeed/webfeed_edit.dart';
 | 
					import 'package:island/screens/creators/webfeed/webfeed_edit.dart';
 | 
				
			||||||
 | 
					import 'package:island/screens/poll/poll_editor.dart';
 | 
				
			||||||
import 'package:island/screens/posts/compose.dart';
 | 
					import 'package:island/screens/posts/compose.dart';
 | 
				
			||||||
import 'package:island/screens/posts/post_detail.dart';
 | 
					import 'package:island/screens/posts/post_detail.dart';
 | 
				
			||||||
import 'package:island/screens/posts/pub_profile.dart';
 | 
					import 'package:island/screens/posts/pub_profile.dart';
 | 
				
			||||||
@@ -41,6 +43,8 @@ import 'package:island/screens/realm/realms.dart';
 | 
				
			|||||||
import 'package:island/screens/realm/realm_detail.dart';
 | 
					import 'package:island/screens/realm/realm_detail.dart';
 | 
				
			||||||
import 'package:island/screens/account/event_calendar.dart';
 | 
					import 'package:island/screens/account/event_calendar.dart';
 | 
				
			||||||
import 'package:island/screens/discovery/realms.dart';
 | 
					import 'package:island/screens/discovery/realms.dart';
 | 
				
			||||||
 | 
					import 'package:island/screens/reports/report_detail.dart';
 | 
				
			||||||
 | 
					import 'package:island/screens/reports/report_list.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Shell route keys for nested navigation
 | 
					// Shell route keys for nested navigation
 | 
				
			||||||
final rootNavigatorKey = GlobalKey<NavigatorState>();
 | 
					final rootNavigatorKey = GlobalKey<NavigatorState>();
 | 
				
			||||||
@@ -61,6 +65,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
        routes: [
 | 
					        routes: [
 | 
				
			||||||
          // Standalone routes without bottom navigation
 | 
					          // Standalone routes without bottom navigation
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'postCompose',
 | 
				
			||||||
            path: '/posts/compose',
 | 
					            path: '/posts/compose',
 | 
				
			||||||
            builder:
 | 
					            builder:
 | 
				
			||||||
                (context, state) => PostComposeScreen(
 | 
					                (context, state) => PostComposeScreen(
 | 
				
			||||||
@@ -71,6 +76,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                ),
 | 
					                ),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'postEdit',
 | 
				
			||||||
            path: '/posts/:id/edit',
 | 
					            path: '/posts/:id/edit',
 | 
				
			||||||
            builder: (context, state) {
 | 
					            builder: (context, state) {
 | 
				
			||||||
              final id = state.pathParameters['id']!;
 | 
					              final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -78,6 +84,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'chatCall',
 | 
				
			||||||
            path: '/chat/:id/call',
 | 
					            path: '/chat/:id/call',
 | 
				
			||||||
            builder: (context, state) {
 | 
					            builder: (context, state) {
 | 
				
			||||||
              final id = state.pathParameters['id']!;
 | 
					              final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -85,6 +92,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'accountCalendar',
 | 
				
			||||||
            path: '/account/:name/calendar',
 | 
					            path: '/account/:name/calendar',
 | 
				
			||||||
            builder: (context, state) {
 | 
					            builder: (context, state) {
 | 
				
			||||||
              final name = state.pathParameters['name']!;
 | 
					              final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -96,11 +104,13 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                (context, state, child) => CreatorHubShellScreen(child: child),
 | 
					                (context, state, child) => CreatorHubShellScreen(child: child),
 | 
				
			||||||
            routes: [
 | 
					            routes: [
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorHub',
 | 
				
			||||||
                path: '/creators',
 | 
					                path: '/creators',
 | 
				
			||||||
                builder: (context, state) => const CreatorHubScreen(),
 | 
					                builder: (context, state) => const CreatorHubScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              // Web Feed Routes
 | 
					              // Web Feed Routes
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorFeeds',
 | 
				
			||||||
                path: '/creators/:name/feeds',
 | 
					                path: '/creators/:name/feeds',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -108,6 +118,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
                routes: [
 | 
					                routes: [
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'creatorFeedNew',
 | 
				
			||||||
                    path: 'new',
 | 
					                    path: 'new',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      return WebFeedNewScreen(
 | 
					                      return WebFeedNewScreen(
 | 
				
			||||||
@@ -116,6 +127,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    },
 | 
					                    },
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'creatorFeedEdit',
 | 
				
			||||||
                    path: ':feedId',
 | 
					                    path: ':feedId',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      return WebFeedEditScreen(
 | 
					                      return WebFeedEditScreen(
 | 
				
			||||||
@@ -127,13 +139,46 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                ],
 | 
					                ],
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorPosts',
 | 
				
			||||||
                path: '/creators/:name/posts',
 | 
					                path: '/creators/:name/posts',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
                  return CreatorPostListScreen(pubName: name);
 | 
					                  return CreatorPostListScreen(pubName: name);
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
 | 
					              // Poll list route
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorPolls',
 | 
				
			||||||
 | 
					                path: '/creators/:name/polls',
 | 
				
			||||||
 | 
					                builder: (context, state) {
 | 
				
			||||||
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
 | 
					                  return CreatorPollListScreen(pubName: name);
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              // Poll routes
 | 
				
			||||||
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorPollNew',
 | 
				
			||||||
 | 
					                path: '/creators/:name/polls/new',
 | 
				
			||||||
 | 
					                builder: (context, state) {
 | 
				
			||||||
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
 | 
					                  // initialPollId left null for create; initialPublisher prefilled
 | 
				
			||||||
 | 
					                  return PollEditorScreen(initialPublisher: name);
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorPollEdit',
 | 
				
			||||||
 | 
					                path: '/creators/:name/polls/:id/edit',
 | 
				
			||||||
 | 
					                builder: (context, state) {
 | 
				
			||||||
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
 | 
					                  final id = state.pathParameters['id']!;
 | 
				
			||||||
 | 
					                  return PollEditorScreen(
 | 
				
			||||||
 | 
					                    initialPollId: id,
 | 
				
			||||||
 | 
					                    initialPublisher: name,
 | 
				
			||||||
 | 
					                  );
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickers',
 | 
				
			||||||
                path: '/creators/:name/stickers',
 | 
					                path: '/creators/:name/stickers',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -141,6 +186,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickerPackNew',
 | 
				
			||||||
                path: '/creators/:name/stickers/new',
 | 
					                path: '/creators/:name/stickers/new',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -148,6 +194,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickerPackEdit',
 | 
				
			||||||
                path: '/creators/:name/stickers/:packId/edit',
 | 
					                path: '/creators/:name/stickers/:packId/edit',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -156,6 +203,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickerPackDetail',
 | 
				
			||||||
                path: '/creators/:name/stickers/:packId',
 | 
					                path: '/creators/:name/stickers/:packId',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -164,6 +212,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickerNew',
 | 
				
			||||||
                path: '/creators/:name/stickers/:packId/new',
 | 
					                path: '/creators/:name/stickers/:packId/new',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final packId = state.pathParameters['packId']!;
 | 
					                  final packId = state.pathParameters['packId']!;
 | 
				
			||||||
@@ -171,6 +220,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorStickerEdit',
 | 
				
			||||||
                path: '/creators/:name/stickers/:packId/:id/edit',
 | 
					                path: '/creators/:name/stickers/:packId/:id/edit',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final packId = state.pathParameters['packId']!;
 | 
					                  final packId = state.pathParameters['packId']!;
 | 
				
			||||||
@@ -179,10 +229,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorNew',
 | 
				
			||||||
                path: '/creators/new',
 | 
					                path: '/creators/new',
 | 
				
			||||||
                builder: (context, state) => const NewPublisherScreen(),
 | 
					                builder: (context, state) => const NewPublisherScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'creatorEdit',
 | 
				
			||||||
                path: '/creators/:name/edit',
 | 
					                path: '/creators/:name/edit',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -197,10 +249,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    DeveloperHubShellScreen(child: child),
 | 
					                    DeveloperHubShellScreen(child: child),
 | 
				
			||||||
            routes: [
 | 
					            routes: [
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'developerHub',
 | 
				
			||||||
                path: '/developers',
 | 
					                path: '/developers',
 | 
				
			||||||
                builder: (context, state) => const DeveloperHubScreen(),
 | 
					                builder: (context, state) => const DeveloperHubScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'developerApps',
 | 
				
			||||||
                path: '/developers/:name/apps',
 | 
					                path: '/developers/:name/apps',
 | 
				
			||||||
                builder:
 | 
					                builder:
 | 
				
			||||||
                    (context, state) => CustomAppsScreen(
 | 
					                    (context, state) => CustomAppsScreen(
 | 
				
			||||||
@@ -208,6 +262,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'developerAppNew',
 | 
				
			||||||
                path: '/developers/:name/apps/new',
 | 
					                path: '/developers/:name/apps/new',
 | 
				
			||||||
                builder:
 | 
					                builder:
 | 
				
			||||||
                    (context, state) => NewCustomAppScreen(
 | 
					                    (context, state) => NewCustomAppScreen(
 | 
				
			||||||
@@ -215,6 +270,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'developerAppEdit',
 | 
				
			||||||
                path: '/developers/:name/apps/:id',
 | 
					                path: '/developers/:name/apps/:id',
 | 
				
			||||||
                builder:
 | 
					                builder:
 | 
				
			||||||
                    (context, state) => EditAppScreen(
 | 
					                    (context, state) => EditAppScreen(
 | 
				
			||||||
@@ -227,10 +283,12 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          // Web articles
 | 
					          // Web articles
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'articles',
 | 
				
			||||||
            path: '/feeds/articles',
 | 
					            path: '/feeds/articles',
 | 
				
			||||||
            builder: (context, state) => const ArticlesScreen(),
 | 
					            builder: (context, state) => const ArticlesScreen(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'articleDetail',
 | 
				
			||||||
            path: '/feeds/articles/:id',
 | 
					            path: '/feeds/articles/:id',
 | 
				
			||||||
            builder: (context, state) {
 | 
					            builder: (context, state) {
 | 
				
			||||||
              final id = state.pathParameters['id']!;
 | 
					              final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -240,24 +298,37 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          // Auth routes
 | 
					          // Auth routes
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'login',
 | 
				
			||||||
            path: '/auth/login',
 | 
					            path: '/auth/login',
 | 
				
			||||||
            builder: (context, state) => const LoginScreen(),
 | 
					            builder: (context, state) => const LoginScreen(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'createAccount',
 | 
				
			||||||
            path: '/auth/create-account',
 | 
					            path: '/auth/create-account',
 | 
				
			||||||
            builder: (context, state) => const CreateAccountScreen(),
 | 
					            builder: (context, state) => const CreateAccountScreen(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Other routes
 | 
					          // Other routes
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'settings',
 | 
				
			||||||
            path: '/settings',
 | 
					            path: '/settings',
 | 
				
			||||||
            builder: (context, state) => const SettingsScreen(),
 | 
					            builder: (context, state) => const SettingsScreen(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
          GoRoute(
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'about',
 | 
				
			||||||
            path: '/about',
 | 
					            path: '/about',
 | 
				
			||||||
            builder: (context, state) => const AboutScreen(),
 | 
					            builder: (context, state) => const AboutScreen(),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          GoRoute(
 | 
				
			||||||
 | 
					            name: 'reportDetail',
 | 
				
			||||||
 | 
					            path: '/safety/reports/me/:id',
 | 
				
			||||||
 | 
					            builder: (context, state) {
 | 
				
			||||||
 | 
					              final id = state.pathParameters['id']!;
 | 
				
			||||||
 | 
					              return AbuseReportDetailScreen(reportId: id);
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // Main tabs with TabsScreen shell
 | 
					          // Main tabs with TabsScreen shell
 | 
				
			||||||
          ShellRoute(
 | 
					          ShellRoute(
 | 
				
			||||||
            navigatorKey: _tabsShellKey,
 | 
					            navigatorKey: _tabsShellKey,
 | 
				
			||||||
@@ -266,19 +337,18 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
            },
 | 
					            },
 | 
				
			||||||
            routes: [
 | 
					            routes: [
 | 
				
			||||||
              // Explore tab
 | 
					              // Explore tab
 | 
				
			||||||
              ShellRoute(
 | 
					 | 
				
			||||||
                builder:
 | 
					 | 
				
			||||||
                    (context, state, child) => ExploreShellScreen(child: child),
 | 
					 | 
				
			||||||
                routes: [
 | 
					 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'explore',
 | 
				
			||||||
                path: '/',
 | 
					                path: '/',
 | 
				
			||||||
                builder: (context, state) => const ExploreScreen(),
 | 
					                builder: (context, state) => const ExploreScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'postSearch',
 | 
				
			||||||
                path: '/posts/search',
 | 
					                path: '/posts/search',
 | 
				
			||||||
                builder: (context, state) => const PostSearchScreen(),
 | 
					                builder: (context, state) => const PostSearchScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'postDetail',
 | 
				
			||||||
                path: '/posts/:id',
 | 
					                path: '/posts/:id',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final id = state.pathParameters['id']!;
 | 
					                  final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -286,6 +356,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'publisherProfile',
 | 
				
			||||||
                path: '/publishers/:name',
 | 
					                path: '/publishers/:name',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
@@ -293,11 +364,10 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'discoveryRealms',
 | 
				
			||||||
                path: '/discovery/realms',
 | 
					                path: '/discovery/realms',
 | 
				
			||||||
                builder: (context, state) => const DiscoveryRealmsScreen(),
 | 
					                builder: (context, state) => const DiscoveryRealmsScreen(),
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
              // Chat tab
 | 
					              // Chat tab
 | 
				
			||||||
              ShellRoute(
 | 
					              ShellRoute(
 | 
				
			||||||
@@ -305,14 +375,17 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    (context, state, child) => ChatShellScreen(child: child),
 | 
					                    (context, state, child) => ChatShellScreen(child: child),
 | 
				
			||||||
                routes: [
 | 
					                routes: [
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'chatList',
 | 
				
			||||||
                    path: '/chat',
 | 
					                    path: '/chat',
 | 
				
			||||||
                    builder: (context, state) => const ChatListScreen(),
 | 
					                    builder: (context, state) => const ChatListScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'chatNew',
 | 
				
			||||||
                    path: '/chat/new',
 | 
					                    path: '/chat/new',
 | 
				
			||||||
                    builder: (context, state) => const NewChatScreen(),
 | 
					                    builder: (context, state) => const NewChatScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'chatRoom',
 | 
				
			||||||
                    path: '/chat/:id',
 | 
					                    path: '/chat/:id',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      final id = state.pathParameters['id']!;
 | 
					                      final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -320,6 +393,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    },
 | 
					                    },
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'chatEdit',
 | 
				
			||||||
                    path: '/chat/:id/edit',
 | 
					                    path: '/chat/:id/edit',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      final id = state.pathParameters['id']!;
 | 
					                      final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -327,6 +401,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    },
 | 
					                    },
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'chatDetail',
 | 
				
			||||||
                    path: '/chat/:id/detail',
 | 
					                    path: '/chat/:id/detail',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      final id = state.pathParameters['id']!;
 | 
					                      final id = state.pathParameters['id']!;
 | 
				
			||||||
@@ -338,14 +413,17 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
              // Realms tab
 | 
					              // Realms tab
 | 
				
			||||||
              GoRoute(
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'realmList',
 | 
				
			||||||
                path: '/realms',
 | 
					                path: '/realms',
 | 
				
			||||||
                builder: (context, state) => const RealmListScreen(),
 | 
					                builder: (context, state) => const RealmListScreen(),
 | 
				
			||||||
                routes: [
 | 
					                routes: [
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'realmNew',
 | 
				
			||||||
                    path: 'new',
 | 
					                    path: 'new',
 | 
				
			||||||
                    builder: (context, state) => const NewRealmScreen(),
 | 
					                    builder: (context, state) => const NewRealmScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'realmDetail',
 | 
				
			||||||
                    path: ':slug',
 | 
					                    path: ':slug',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      final slug = state.pathParameters['slug']!;
 | 
					                      final slug = state.pathParameters['slug']!;
 | 
				
			||||||
@@ -353,6 +431,7 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    },
 | 
					                    },
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'realmEdit',
 | 
				
			||||||
                    path: ':slug/edit',
 | 
					                    path: ':slug/edit',
 | 
				
			||||||
                    builder: (context, state) {
 | 
					                    builder: (context, state) {
 | 
				
			||||||
                      final slug = state.pathParameters['slug']!;
 | 
					                      final slug = state.pathParameters['slug']!;
 | 
				
			||||||
@@ -368,42 +447,56 @@ final routerProvider = Provider<GoRouter>((ref) {
 | 
				
			|||||||
                    (context, state, child) => AccountShellScreen(child: child),
 | 
					                    (context, state, child) => AccountShellScreen(child: child),
 | 
				
			||||||
                routes: [
 | 
					                routes: [
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'account',
 | 
				
			||||||
                    path: '/account',
 | 
					                    path: '/account',
 | 
				
			||||||
                    builder: (context, state) => const AccountScreen(),
 | 
					                    builder: (context, state) => const AccountScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'notifications',
 | 
				
			||||||
                    path: '/account/notifications',
 | 
					                    path: '/account/notifications',
 | 
				
			||||||
                    builder: (context, state) => const NotificationScreen(),
 | 
					                    builder: (context, state) => const NotificationScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'wallet',
 | 
				
			||||||
                    path: '/account/wallet',
 | 
					                    path: '/account/wallet',
 | 
				
			||||||
                    builder: (context, state) => const WalletScreen(),
 | 
					                    builder: (context, state) => const WalletScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'relationships',
 | 
				
			||||||
                    path: '/account/relationships',
 | 
					                    path: '/account/relationships',
 | 
				
			||||||
                    builder: (context, state) => const RelationshipScreen(),
 | 
					                    builder: (context, state) => const RelationshipScreen(),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  GoRoute(
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'profileUpdate',
 | 
				
			||||||
 | 
					                    path: '/account/me/update',
 | 
				
			||||||
 | 
					                    builder: (context, state) => const UpdateProfileScreen(),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'leveling',
 | 
				
			||||||
 | 
					                    path: '/account/me/leveling',
 | 
				
			||||||
 | 
					                    builder: (context, state) => const LevelingScreen(),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'accountSettings',
 | 
				
			||||||
 | 
					                    path: '/account/me/settings',
 | 
				
			||||||
 | 
					                    builder: (context, state) => const AccountSettingsScreen(),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                  GoRoute(
 | 
				
			||||||
 | 
					                    name: 'reportList',
 | 
				
			||||||
 | 
					                    path: '/safety/reports/me',
 | 
				
			||||||
 | 
					                    builder: (context, state) => const AbuseReportListScreen(),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              GoRoute(
 | 
				
			||||||
 | 
					                name: 'accountProfile',
 | 
				
			||||||
                path: '/account/:name',
 | 
					                path: '/account/:name',
 | 
				
			||||||
                builder: (context, state) {
 | 
					                builder: (context, state) {
 | 
				
			||||||
                  final name = state.pathParameters['name']!;
 | 
					                  final name = state.pathParameters['name']!;
 | 
				
			||||||
                  return AccountProfileScreen(name: name);
 | 
					                  return AccountProfileScreen(name: name);
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
                  GoRoute(
 | 
					 | 
				
			||||||
                    path: '/account/me/update',
 | 
					 | 
				
			||||||
                    builder: (context, state) => const UpdateProfileScreen(),
 | 
					 | 
				
			||||||
                  ),
 | 
					 | 
				
			||||||
                  GoRoute(
 | 
					 | 
				
			||||||
                    path: '/account/me/leveling',
 | 
					 | 
				
			||||||
                    builder: (context, state) => const LevelingScreen(),
 | 
					 | 
				
			||||||
                  ),
 | 
					 | 
				
			||||||
                  GoRoute(
 | 
					 | 
				
			||||||
                    path: '/account/settings',
 | 
					 | 
				
			||||||
                    builder: (context, state) => const AccountSettingsScreen(),
 | 
					 | 
				
			||||||
                  ),
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
            ],
 | 
					            ],
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
@@ -426,6 +519,10 @@ class AppRouter {
 | 
				
			|||||||
    context.push(path);
 | 
					    context.push(path);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static void pushNamed(BuildContext context, String name) {
 | 
				
			||||||
 | 
					    context.pushNamed(name);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  static void pop(BuildContext context) {
 | 
					  static void pop(BuildContext context) {
 | 
				
			||||||
    context.pop();
 | 
					    context.pop();
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,17 +1,19 @@
 | 
				
			|||||||
 | 
					import 'dart:io';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:device_info_plus/device_info_plus.dart';
 | 
					import 'package:device_info_plus/device_info_plus.dart';
 | 
				
			||||||
 | 
					import 'package:flutter/foundation.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter/services.dart';
 | 
					import 'package:flutter/services.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/pods/network.dart';
 | 
					 | 
				
			||||||
import 'package:island/services/notify.dart';
 | 
					 | 
				
			||||||
import 'package:island/services/udid.native.dart';
 | 
					import 'package:island/services/udid.native.dart';
 | 
				
			||||||
import 'package:island/widgets/alert.dart';
 | 
					import 'package:island/widgets/app_scaffold.dart';
 | 
				
			||||||
import 'package:material_symbols_icons/symbols.dart';
 | 
					import 'package:material_symbols_icons/symbols.dart';
 | 
				
			||||||
import 'package:package_info_plus/package_info_plus.dart';
 | 
					import 'package:package_info_plus/package_info_plus.dart';
 | 
				
			||||||
import 'package:styled_widget/styled_widget.dart';
 | 
					import 'package:styled_widget/styled_widget.dart';
 | 
				
			||||||
import 'package:url_launcher/url_launcher.dart';
 | 
					import 'package:url_launcher/url_launcher.dart';
 | 
				
			||||||
import 'package:easy_localization/easy_localization.dart';
 | 
					import 'package:easy_localization/easy_localization.dart';
 | 
				
			||||||
 | 
					import 'package:url_launcher/url_launcher_string.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AboutScreen extends ConsumerStatefulWidget {
 | 
					class AboutScreen extends ConsumerStatefulWidget {
 | 
				
			||||||
  const AboutScreen({super.key});
 | 
					  const AboutScreen({super.key});
 | 
				
			||||||
@@ -90,7 +92,8 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
				
			|||||||
  Widget build(BuildContext context) {
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
    final theme = Theme.of(context);
 | 
					    final theme = Theme.of(context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return Scaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
 | 
					      isNoBackground: false,
 | 
				
			||||||
      appBar: AppBar(title: Text('about'.tr()), elevation: 0),
 | 
					      appBar: AppBar(title: Text('about'.tr()), elevation: 0),
 | 
				
			||||||
      body:
 | 
					      body:
 | 
				
			||||||
          _isLoading
 | 
					          _isLoading
 | 
				
			||||||
@@ -167,34 +170,16 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
				
			|||||||
                          _buildInfoItem(
 | 
					                          _buildInfoItem(
 | 
				
			||||||
                            context,
 | 
					                            context,
 | 
				
			||||||
                            icon: Symbols.label,
 | 
					                            icon: Symbols.label,
 | 
				
			||||||
                            label: 'Device Name',
 | 
					                            label: 'aboutDeviceName'.tr(),
 | 
				
			||||||
                            value: _deviceInfo?.data['name'],
 | 
					                            value: _deviceInfo?.data['name'],
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                          _buildInfoItem(
 | 
					                          _buildInfoItem(
 | 
				
			||||||
                            context,
 | 
					                            context,
 | 
				
			||||||
                            icon: Symbols.fingerprint,
 | 
					                            icon: Symbols.fingerprint,
 | 
				
			||||||
                            label: 'Device Identifier',
 | 
					                            label: 'aboutDeviceIdentifier'.tr(),
 | 
				
			||||||
                            value: _deviceUdid ?? 'N/A',
 | 
					                            value: _deviceUdid ?? 'N/A',
 | 
				
			||||||
                            copyable: true,
 | 
					                            copyable: true,
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                          const Divider(height: 1),
 | 
					 | 
				
			||||||
                          _buildListTile(
 | 
					 | 
				
			||||||
                            context,
 | 
					 | 
				
			||||||
                            icon: Symbols.notifications_active,
 | 
					 | 
				
			||||||
                            title: 'Reactivate Push Notifications',
 | 
					 | 
				
			||||||
                            onTap: () async {
 | 
					 | 
				
			||||||
                              showLoadingModal(context);
 | 
					 | 
				
			||||||
                              try {
 | 
					 | 
				
			||||||
                                await subscribePushNotification(
 | 
					 | 
				
			||||||
                                  ref.watch(apiClientProvider),
 | 
					 | 
				
			||||||
                                );
 | 
					 | 
				
			||||||
                              } catch (err) {
 | 
					 | 
				
			||||||
                                showErrorAlert(err);
 | 
					 | 
				
			||||||
                              } finally {
 | 
					 | 
				
			||||||
                                if (context.mounted) hideLoadingModal(context);
 | 
					 | 
				
			||||||
                              }
 | 
					 | 
				
			||||||
                            },
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,6 +250,18 @@ class _AboutScreenState extends ConsumerState<AboutScreen> {
 | 
				
			|||||||
                                'https://github.com/Solsynth/Solian/blob/v3/LICENSE.txt',
 | 
					                                'https://github.com/Solsynth/Solian/blob/v3/LICENSE.txt',
 | 
				
			||||||
                              ),
 | 
					                              ),
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
 | 
					                        if (kIsWeb || !(Platform.isMacOS || Platform.isIOS))
 | 
				
			||||||
 | 
					                          _buildListTile(
 | 
				
			||||||
 | 
					                            context,
 | 
				
			||||||
 | 
					                            icon: Symbols.favorite,
 | 
				
			||||||
 | 
					                            title: 'donate'.tr(),
 | 
				
			||||||
 | 
					                            subtitle: 'donateDescription'.tr(),
 | 
				
			||||||
 | 
					                            onTap: () {
 | 
				
			||||||
 | 
					                              launchUrlString(
 | 
				
			||||||
 | 
					                                'https://afdian.com/@littlesheep',
 | 
				
			||||||
 | 
					                              );
 | 
				
			||||||
 | 
					                            },
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
                      ],
 | 
					                      ],
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      noBackground: isWide,
 | 
					      isNoBackground: isWide,
 | 
				
			||||||
      appBar: AppBar(backgroundColor: Colors.transparent, toolbarHeight: 0),
 | 
					      appBar: AppBar(backgroundColor: Colors.transparent, toolbarHeight: 0),
 | 
				
			||||||
      body: SingleChildScrollView(
 | 
					      body: SingleChildScrollView(
 | 
				
			||||||
        padding: getTabbedPadding(context),
 | 
					        padding: getTabbedPadding(context),
 | 
				
			||||||
@@ -98,7 +98,10 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
                          radius: 24,
 | 
					                          radius: 24,
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                        onTap: () {
 | 
					                        onTap: () {
 | 
				
			||||||
                          context.push('/account/${user.value!.name}');
 | 
					                          context.pushNamed(
 | 
				
			||||||
 | 
					                            'accountProfile',
 | 
				
			||||||
 | 
					                            pathParameters: {'name': user.value!.name},
 | 
				
			||||||
 | 
					                          );
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                      ),
 | 
					                      ),
 | 
				
			||||||
                      Expanded(
 | 
					                      Expanded(
 | 
				
			||||||
@@ -143,7 +146,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
                progress: user.value!.profile.levelingProgress,
 | 
					                progress: user.value!.profile.levelingProgress,
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/me/leveling');
 | 
					                context.pushNamed('leveling');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ).padding(horizontal: 12),
 | 
					            ).padding(horizontal: 12),
 | 
				
			||||||
            Row(
 | 
					            Row(
 | 
				
			||||||
@@ -161,7 +164,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ).padding(horizontal: 16, vertical: 12),
 | 
					                      ).padding(horizontal: 16, vertical: 12),
 | 
				
			||||||
                      onTap: () {
 | 
					                      onTap: () {
 | 
				
			||||||
                        context.push('/creators');
 | 
					                        context.pushNamed('creatorHub');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                  ).height(140),
 | 
					                  ).height(140),
 | 
				
			||||||
@@ -179,7 +182,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
                        ],
 | 
					                        ],
 | 
				
			||||||
                      ).padding(horizontal: 16, vertical: 12),
 | 
					                      ).padding(horizontal: 16, vertical: 12),
 | 
				
			||||||
                      onTap: () {
 | 
					                      onTap: () {
 | 
				
			||||||
                        context.push('/developers');
 | 
					                        context.pushNamed('developerHub');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                  ).height(140),
 | 
					                  ).height(140),
 | 
				
			||||||
@@ -202,7 +205,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
                ],
 | 
					                ],
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/notifications');
 | 
					                context.pushNamed('notifications');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
@@ -212,7 +215,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('wallet').tr(),
 | 
					              title: Text('wallet').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/wallet');
 | 
					                context.pushNamed('wallet');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
@@ -222,9 +225,17 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('relationships').tr(),
 | 
					              title: Text('relationships').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/relationship');
 | 
					                context.pushNamed('relationships');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
 | 
					            ListTile(
 | 
				
			||||||
 | 
					              minTileHeight: 48,
 | 
				
			||||||
 | 
					              title: Text('abuseReports').tr(),
 | 
				
			||||||
 | 
					              contentPadding: const EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
 | 
					              leading: const Icon(Symbols.gavel),
 | 
				
			||||||
 | 
					              trailing: const Icon(Symbols.chevron_right),
 | 
				
			||||||
 | 
					              onTap: () => context.pushNamed('reportList'),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
            const Divider(height: 1).padding(vertical: 8),
 | 
					            const Divider(height: 1).padding(vertical: 8),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
              minTileHeight: 48,
 | 
					              minTileHeight: 48,
 | 
				
			||||||
@@ -233,7 +244,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('appSettings').tr(),
 | 
					              title: Text('appSettings').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/settings');
 | 
					                context.pushNamed('settings');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
@@ -243,7 +254,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('updateYourProfile').tr(),
 | 
					              title: Text('updateYourProfile').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/me/update');
 | 
					                context.pushNamed('profileUpdate');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
@@ -253,7 +264,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('accountSettings').tr(),
 | 
					              title: Text('accountSettings').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/account/me/settings');
 | 
					                context.pushNamed('accountSettings');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            if (kDebugMode) const Divider(height: 1).padding(vertical: 8),
 | 
					            if (kDebugMode) const Divider(height: 1).padding(vertical: 8),
 | 
				
			||||||
@@ -288,7 +299,7 @@ class AccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
					              contentPadding: EdgeInsets.symmetric(horizontal: 24),
 | 
				
			||||||
              title: Text('about').tr(),
 | 
					              title: Text('about').tr(),
 | 
				
			||||||
              onTap: () {
 | 
					              onTap: () {
 | 
				
			||||||
                context.push('/about');
 | 
					                context.pushNamed('about');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            ListTile(
 | 
					            ListTile(
 | 
				
			||||||
@@ -328,7 +339,7 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
				
			|||||||
                  child: Card(
 | 
					                  child: Card(
 | 
				
			||||||
                    child: InkWell(
 | 
					                    child: InkWell(
 | 
				
			||||||
                      onTap: () {
 | 
					                      onTap: () {
 | 
				
			||||||
                        context.push('/auth/create');
 | 
					                        context.pushNamed('createAccount');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                      child: Padding(
 | 
					                      child: Padding(
 | 
				
			||||||
                        padding: const EdgeInsets.all(16),
 | 
					                        padding: const EdgeInsets.all(16),
 | 
				
			||||||
@@ -350,7 +361,7 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
				
			|||||||
                  child: Card(
 | 
					                  child: Card(
 | 
				
			||||||
                    child: InkWell(
 | 
					                    child: InkWell(
 | 
				
			||||||
                      onTap: () {
 | 
					                      onTap: () {
 | 
				
			||||||
                        context.push('/auth/login');
 | 
					                        context.pushNamed('login');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                      child: Padding(
 | 
					                      child: Padding(
 | 
				
			||||||
                        padding: const EdgeInsets.all(16),
 | 
					                        padding: const EdgeInsets.all(16),
 | 
				
			||||||
@@ -372,13 +383,13 @@ class _UnauthorizedAccountScreen extends StatelessWidget {
 | 
				
			|||||||
                  children: [
 | 
					                  children: [
 | 
				
			||||||
                    TextButton(
 | 
					                    TextButton(
 | 
				
			||||||
                      onPressed: () {
 | 
					                      onPressed: () {
 | 
				
			||||||
                        context.push('/about');
 | 
					                        context.pushNamed('about');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                      child: Text('about').tr(),
 | 
					                      child: Text('about').tr(),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                    TextButton(
 | 
					                    TextButton(
 | 
				
			||||||
                      onPressed: () {
 | 
					                      onPressed: () {
 | 
				
			||||||
                        context.push('/settings');
 | 
					                        context.pushNamed('settings');
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                      child: Text('appSettings').tr(),
 | 
					                      child: Text('appSettings').tr(),
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@ class EventCalanderScreen extends HookConsumerWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      noBackground: false,
 | 
					      isNoBackground: false,
 | 
				
			||||||
      appBar: AppBar(
 | 
					      appBar: AppBar(
 | 
				
			||||||
        leading: const PageBackButton(),
 | 
					        leading: const PageBackButton(),
 | 
				
			||||||
        title: Text('eventCalander').tr(),
 | 
					        title: Text('eventCalander').tr(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ part 'leveling.g.dart';
 | 
				
			|||||||
Future<SnWalletSubscription?> accountStellarSubscription(Ref ref) async {
 | 
					Future<SnWalletSubscription?> accountStellarSubscription(Ref ref) async {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    final client = ref.watch(apiClientProvider);
 | 
					    final client = ref.watch(apiClientProvider);
 | 
				
			||||||
    final resp = await client.get('/subscriptions/fuzzy/solian.stellar');
 | 
					    final resp = await client.get('/id/subscriptions/fuzzy/solian.stellar');
 | 
				
			||||||
    return SnWalletSubscription.fromJson(resp.data);
 | 
					    return SnWalletSubscription.fromJson(resp.data);
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    if (err is DioException && err.response?.statusCode == 404) return null;
 | 
					    if (err is DioException && err.response?.statusCode == 404) return null;
 | 
				
			||||||
@@ -280,7 +280,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.post('/subscriptions/${membership.identifier}/cancel');
 | 
					        await client.post('/id/subscriptions/${membership.identifier}/cancel');
 | 
				
			||||||
        ref.invalidate(accountStellarSubscriptionProvider);
 | 
					        ref.invalidate(accountStellarSubscriptionProvider);
 | 
				
			||||||
        ref.read(userInfoProvider.notifier).fetchUser();
 | 
					        ref.read(userInfoProvider.notifier).fetchUser();
 | 
				
			||||||
        if (context.mounted) {
 | 
					        if (context.mounted) {
 | 
				
			||||||
@@ -432,7 +432,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
				
			|||||||
        'id': 'solian.stellar.nova',
 | 
					        'id': 'solian.stellar.nova',
 | 
				
			||||||
        'name': 'membershipTierNova'.tr(),
 | 
					        'name': 'membershipTierNova'.tr(),
 | 
				
			||||||
        'price': 'membershipPriceNova'.tr(),
 | 
					        'price': 'membershipPriceNova'.tr(),
 | 
				
			||||||
        'color': Colors.indigo,
 | 
					        'color': Color.fromRGBO(57, 197, 187, 1),
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        'id': 'solian.stellar.supernova',
 | 
					        'id': 'solian.stellar.supernova',
 | 
				
			||||||
@@ -603,7 +603,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
				
			|||||||
    try {
 | 
					    try {
 | 
				
			||||||
      showLoadingModal(context);
 | 
					      showLoadingModal(context);
 | 
				
			||||||
      final resp = await client.post(
 | 
					      final resp = await client.post(
 | 
				
			||||||
        '/subscriptions',
 | 
					        '/id/subscriptions',
 | 
				
			||||||
        data: {
 | 
					        data: {
 | 
				
			||||||
          'identifier': tierId,
 | 
					          'identifier': tierId,
 | 
				
			||||||
          'payment_method': 'solian.wallet',
 | 
					          'payment_method': 'solian.wallet',
 | 
				
			||||||
@@ -615,7 +615,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
				
			|||||||
      final subscription = SnWalletSubscription.fromJson(resp.data);
 | 
					      final subscription = SnWalletSubscription.fromJson(resp.data);
 | 
				
			||||||
      if (subscription.status == 1) return;
 | 
					      if (subscription.status == 1) return;
 | 
				
			||||||
      final orderResp = await client.post(
 | 
					      final orderResp = await client.post(
 | 
				
			||||||
        '/subscriptions/${subscription.identifier}/order',
 | 
					        '/id/subscriptions/${subscription.identifier}/order',
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      final order = SnWalletOrder.fromJson(orderResp.data);
 | 
					      final order = SnWalletOrder.fromJson(orderResp.data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -633,7 +633,7 @@ class LevelingScreen extends HookConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      if (paidOrder != null) {
 | 
					      if (paidOrder != null) {
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/subscriptions/order/handle',
 | 
					          '/id/subscriptions/order/handle',
 | 
				
			||||||
          data: {'order_id': paidOrder.id},
 | 
					          data: {'order_id': paidOrder.id},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ part of 'leveling.dart';
 | 
				
			|||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$accountStellarSubscriptionHash() =>
 | 
					String _$accountStellarSubscriptionHash() =>
 | 
				
			||||||
    r'37fb821460e3ac50b5cf777c933b6779f732daee';
 | 
					    r'80abcdefb3868775fd8fe3c980215713efff5948';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [accountStellarSubscription].
 | 
					/// See also [accountStellarSubscription].
 | 
				
			||||||
@ProviderFor(accountStellarSubscription)
 | 
					@ProviderFor(accountStellarSubscription)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,14 +28,14 @@ part 'settings.g.dart';
 | 
				
			|||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnAuthFactor>> authFactors(Ref ref) async {
 | 
					Future<List<SnAuthFactor>> authFactors(Ref ref) async {
 | 
				
			||||||
  final client = ref.read(apiClientProvider);
 | 
					  final client = ref.read(apiClientProvider);
 | 
				
			||||||
  final res = await client.get('/accounts/me/factors');
 | 
					  final res = await client.get('/id/accounts/me/factors');
 | 
				
			||||||
  return res.data.map<SnAuthFactor>((e) => SnAuthFactor.fromJson(e)).toList();
 | 
					  return res.data.map<SnAuthFactor>((e) => SnAuthFactor.fromJson(e)).toList();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnContactMethod>> contactMethods(Ref ref) async {
 | 
					Future<List<SnContactMethod>> contactMethods(Ref ref) async {
 | 
				
			||||||
  final client = ref.read(apiClientProvider);
 | 
					  final client = ref.read(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/accounts/me/contacts');
 | 
					  final resp = await client.get('/id/accounts/me/contacts');
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map<SnContactMethod>((e) => SnContactMethod.fromJson(e))
 | 
					      .map<SnContactMethod>((e) => SnContactMethod.fromJson(e))
 | 
				
			||||||
      .toList();
 | 
					      .toList();
 | 
				
			||||||
@@ -44,7 +44,7 @@ Future<List<SnContactMethod>> contactMethods(Ref ref) async {
 | 
				
			|||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnAccountConnection>> accountConnections(Ref ref) async {
 | 
					Future<List<SnAccountConnection>> accountConnections(Ref ref) async {
 | 
				
			||||||
  final client = ref.read(apiClientProvider);
 | 
					  final client = ref.read(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/accounts/me/connections');
 | 
					  final resp = await client.get('/id/accounts/me/connections');
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map<SnAccountConnection>((e) => SnAccountConnection.fromJson(e))
 | 
					      .map<SnAccountConnection>((e) => SnAccountConnection.fromJson(e))
 | 
				
			||||||
      .toList();
 | 
					      .toList();
 | 
				
			||||||
@@ -68,7 +68,7 @@ class AccountSettingsScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.delete('/accounts/me');
 | 
					        await client.delete('/id/accounts/me');
 | 
				
			||||||
        if (context.mounted) {
 | 
					        if (context.mounted) {
 | 
				
			||||||
          showSnackBar('accountDeletionSent'.tr());
 | 
					          showSnackBar('accountDeletionSent'.tr());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -94,7 +94,7 @@ class AccountSettingsScreen extends HookConsumerWidget {
 | 
				
			|||||||
        final userInfo = ref.read(userInfoProvider);
 | 
					        final userInfo = ref.read(userInfoProvider);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/accounts/recovery/password',
 | 
					          '/id/accounts/recovery/password',
 | 
				
			||||||
          data: {'account': userInfo.value!.name, 'captcha_token': captchaTk},
 | 
					          data: {'account': userInfo.value!.name, 'captcha_token': captchaTk},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        if (context.mounted) {
 | 
					        if (context.mounted) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'settings.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$authFactorsHash() => r'4bb65bc0c065c4091c209ee81e57ddef41051ae2';
 | 
					String _$authFactorsHash() => r'24fe2f7b375b019d87fc3b85cbedbe857f399c0f';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [authFactors].
 | 
					/// See also [authFactors].
 | 
				
			||||||
@ProviderFor(authFactors)
 | 
					@ProviderFor(authFactors)
 | 
				
			||||||
@@ -25,7 +25,7 @@ final authFactorsProvider =
 | 
				
			|||||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
					@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
				
			||||||
// ignore: unused_element
 | 
					// ignore: unused_element
 | 
				
			||||||
typedef AuthFactorsRef = AutoDisposeFutureProviderRef<List<SnAuthFactor>>;
 | 
					typedef AuthFactorsRef = AutoDisposeFutureProviderRef<List<SnAuthFactor>>;
 | 
				
			||||||
String _$contactMethodsHash() => r'4d7952fc196dce4dc646314565a49c115fd1d292';
 | 
					String _$contactMethodsHash() => r'76a1a93f61c51c44b32b4821f5112d58406155f0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [contactMethods].
 | 
					/// See also [contactMethods].
 | 
				
			||||||
@ProviderFor(contactMethods)
 | 
					@ProviderFor(contactMethods)
 | 
				
			||||||
@@ -45,7 +45,7 @@ final contactMethodsProvider =
 | 
				
			|||||||
// ignore: unused_element
 | 
					// ignore: unused_element
 | 
				
			||||||
typedef ContactMethodsRef = AutoDisposeFutureProviderRef<List<SnContactMethod>>;
 | 
					typedef ContactMethodsRef = AutoDisposeFutureProviderRef<List<SnContactMethod>>;
 | 
				
			||||||
String _$accountConnectionsHash() =>
 | 
					String _$accountConnectionsHash() =>
 | 
				
			||||||
    r'38a309d596e0ea2539cd92ea86984e1e4fb346e4';
 | 
					    r'9f69e7f23e3e53c528d38b93d76f0c9efc9a83db';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [accountConnections].
 | 
					/// See also [accountConnections].
 | 
				
			||||||
@ProviderFor(accountConnections)
 | 
					@ProviderFor(accountConnections)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.delete('/accounts/me/factors/${factor.id}');
 | 
					        await client.delete('/id/accounts/me/factors/${factor.id}');
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -49,7 +49,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post('/accounts/me/factors/${factor.id}/disable');
 | 
					        await client.post('/id/accounts/me/factors/${factor.id}/disable');
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -106,7 +106,7 @@ class AuthFactorSheet extends HookConsumerWidget {
 | 
				
			|||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/accounts/me/factors/${factor.id}/enable',
 | 
					          '/id/accounts/me/factors/${factor.id}/enable',
 | 
				
			||||||
          data: jsonEncode(password),
 | 
					          data: jsonEncode(password),
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
@@ -193,7 +193,7 @@ class AuthFactorNewSheet extends HookConsumerWidget {
 | 
				
			|||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final apiClient = ref.read(apiClientProvider);
 | 
					        final apiClient = ref.read(apiClientProvider);
 | 
				
			||||||
        final resp = await apiClient.post(
 | 
					        final resp = await apiClient.post(
 | 
				
			||||||
          '/accounts/me/factors',
 | 
					          '/id/accounts/me/factors',
 | 
				
			||||||
          data: {'type': factorType.value, 'secret': secretController.text},
 | 
					          data: {'type': factorType.value, 'secret': secretController.text},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        final factor = SnAuthFactor.fromJson(resp.data);
 | 
					        final factor = SnAuthFactor.fromJson(resp.data);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,7 @@ class AccountConnectionSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.delete('/accounts/me/connections/${connection.id}');
 | 
					        await client.delete('/id/accounts/me/connections/${connection.id}');
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -174,7 +174,7 @@ class AccountConnectionNewSheet extends HookConsumerWidget {
 | 
				
			|||||||
            if (context.mounted) showLoadingModal(context);
 | 
					            if (context.mounted) showLoadingModal(context);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            await client.post(
 | 
					            await client.post(
 | 
				
			||||||
              '/auth/connect/apple/mobile',
 | 
					              '/id/auth/connect/apple/mobile',
 | 
				
			||||||
              data: {
 | 
					              data: {
 | 
				
			||||||
                'identity_token': credential.identityToken!,
 | 
					                'identity_token': credential.identityToken!,
 | 
				
			||||||
                'authorization_code': credential.authorizationCode,
 | 
					                'authorization_code': credential.authorizationCode,
 | 
				
			||||||
@@ -336,7 +336,7 @@ class AccountConnectionsSheet extends HookConsumerWidget {
 | 
				
			|||||||
                                try {
 | 
					                                try {
 | 
				
			||||||
                                  final client = ref.read(apiClientProvider);
 | 
					                                  final client = ref.read(apiClientProvider);
 | 
				
			||||||
                                  await client.delete(
 | 
					                                  await client.delete(
 | 
				
			||||||
                                    '/accounts/me/connections/${connection.id}',
 | 
					                                    '/id/accounts/me/connections/${connection.id}',
 | 
				
			||||||
                                  );
 | 
					                                  );
 | 
				
			||||||
                                  ref.invalidate(accountConnectionsProvider);
 | 
					                                  ref.invalidate(accountConnectionsProvider);
 | 
				
			||||||
                                  return true;
 | 
					                                  return true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.delete('/accounts/me/contacts/${contact.id}');
 | 
					        await client.delete('/id/accounts/me/contacts/${contact.id}');
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -38,7 +38,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post('/accounts/me/contacts/${contact.id}/verify');
 | 
					        await client.post('/id/accounts/me/contacts/${contact.id}/verify');
 | 
				
			||||||
        if (context.mounted) {
 | 
					        if (context.mounted) {
 | 
				
			||||||
          showSnackBar('contactMethodVerificationSent'.tr());
 | 
					          showSnackBar('contactMethodVerificationSent'.tr());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -53,7 +53,7 @@ class ContactMethodSheet extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post('/accounts/me/contacts/${contact.id}/primary');
 | 
					        await client.post('/id/accounts/me/contacts/${contact.id}/primary');
 | 
				
			||||||
        if (context.mounted) Navigator.pop(context, true);
 | 
					        if (context.mounted) Navigator.pop(context, true);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -160,7 +160,7 @@ class ContactMethodNewSheet extends HookConsumerWidget {
 | 
				
			|||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final apiClient = ref.read(apiClientProvider);
 | 
					        final apiClient = ref.read(apiClientProvider);
 | 
				
			||||||
        await apiClient.post(
 | 
					        await apiClient.post(
 | 
				
			||||||
          '/accounts/me/contacts',
 | 
					          '/id/accounts/me/contacts',
 | 
				
			||||||
          data: {'type': contactType.value, 'content': contentController.text},
 | 
					          data: {'type': contactType.value, 'content': contentController.text},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        if (context.mounted) {
 | 
					        if (context.mounted) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.patch(
 | 
					        await client.patch(
 | 
				
			||||||
          '/accounts/me/profile',
 | 
					          '/id/accounts/me/profile',
 | 
				
			||||||
          data: {'${position}_id': cloudFile.id},
 | 
					          data: {'${position}_id': cloudFile.id},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        final userNotifier = ref.read(userInfoProvider.notifier);
 | 
					        final userNotifier = ref.read(userInfoProvider.notifier);
 | 
				
			||||||
@@ -102,7 +102,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.patch(
 | 
					        await client.patch(
 | 
				
			||||||
          '/accounts/me',
 | 
					          '/id/accounts/me',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'name': usernameController.text,
 | 
					            'name': usernameController.text,
 | 
				
			||||||
            'nick': nicknameController.text,
 | 
					            'nick': nicknameController.text,
 | 
				
			||||||
@@ -154,7 +154,7 @@ class UpdateProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.patch(
 | 
					        await client.patch(
 | 
				
			||||||
          '/accounts/me/profile',
 | 
					          '/id/accounts/me/profile',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'bio': bioController.text,
 | 
					            'bio': bioController.text,
 | 
				
			||||||
            'first_name': firstNameController.text,
 | 
					            'first_name': firstNameController.text,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,7 @@ import 'package:island/pods/event_calendar.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';
 | 
				
			||||||
import 'package:island/services/color.dart';
 | 
					import 'package:island/services/color.dart';
 | 
				
			||||||
 | 
					import 'package:island/services/responsive.dart';
 | 
				
			||||||
import 'package:island/services/time.dart';
 | 
					import 'package:island/services/time.dart';
 | 
				
			||||||
import 'package:island/services/timezone/native.dart';
 | 
					import 'package:island/services/timezone/native.dart';
 | 
				
			||||||
import 'package:island/widgets/account/account_name.dart';
 | 
					import 'package:island/widgets/account/account_name.dart';
 | 
				
			||||||
@@ -22,9 +23,12 @@ import 'package:island/widgets/account/status.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/content/markdown.dart';
 | 
				
			||||||
 | 
					import 'package:island/widgets/safety/abuse_report_helper.dart';
 | 
				
			||||||
import 'package:material_symbols_icons/symbols.dart';
 | 
					import 'package:material_symbols_icons/symbols.dart';
 | 
				
			||||||
import 'package:palette_generator/palette_generator.dart';
 | 
					import 'package:palette_generator/palette_generator.dart';
 | 
				
			||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
					import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
				
			||||||
 | 
					import 'package:share_plus/share_plus.dart';
 | 
				
			||||||
import 'package:styled_widget/styled_widget.dart';
 | 
					import 'package:styled_widget/styled_widget.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
part 'profile.g.dart';
 | 
					part 'profile.g.dart';
 | 
				
			||||||
@@ -38,14 +42,14 @@ Future<SnAccount> account(Ref ref, String uname) async {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  final apiClient = ref.watch(apiClientProvider);
 | 
					  final apiClient = ref.watch(apiClientProvider);
 | 
				
			||||||
  final resp = await apiClient.get("/accounts/$uname");
 | 
					  final resp = await apiClient.get("/id/accounts/$uname");
 | 
				
			||||||
  return SnAccount.fromJson(resp.data);
 | 
					  return SnAccount.fromJson(resp.data);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnAccountBadge>> accountBadges(Ref ref, String uname) async {
 | 
					Future<List<SnAccountBadge>> accountBadges(Ref ref, String uname) async {
 | 
				
			||||||
  final apiClient = ref.watch(apiClientProvider);
 | 
					  final apiClient = ref.watch(apiClientProvider);
 | 
				
			||||||
  final resp = await apiClient.get("/accounts/$uname/badges");
 | 
					  final resp = await apiClient.get("/id/accounts/$uname/badges");
 | 
				
			||||||
  return List<SnAccountBadge>.from(
 | 
					  return List<SnAccountBadge>.from(
 | 
				
			||||||
    resp.data.map((x) => SnAccountBadge.fromJson(x)),
 | 
					    resp.data.map((x) => SnAccountBadge.fromJson(x)),
 | 
				
			||||||
  );
 | 
					  );
 | 
				
			||||||
@@ -77,7 +81,7 @@ Future<SnChatRoom?> accountDirectChat(Ref ref, String uname) async {
 | 
				
			|||||||
  final account = await ref.watch(accountProvider(uname).future);
 | 
					  final account = await ref.watch(accountProvider(uname).future);
 | 
				
			||||||
  final apiClient = ref.watch(apiClientProvider);
 | 
					  final apiClient = ref.watch(apiClientProvider);
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    final resp = await apiClient.get("/chat/direct/${account.id}");
 | 
					    final resp = await apiClient.get("/sphere/chat/direct/${account.id}");
 | 
				
			||||||
    return SnChatRoom.fromJson(resp.data);
 | 
					    return SnChatRoom.fromJson(resp.data);
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
					    if (err is DioException && err.response?.statusCode == 404) {
 | 
				
			||||||
@@ -94,7 +98,7 @@ Future<SnRelationship?> accountRelationship(Ref ref, String uname) async {
 | 
				
			|||||||
  final account = await ref.watch(accountProvider(uname).future);
 | 
					  final account = await ref.watch(accountProvider(uname).future);
 | 
				
			||||||
  final apiClient = ref.watch(apiClientProvider);
 | 
					  final apiClient = ref.watch(apiClientProvider);
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    final resp = await apiClient.get("/relationships/${account.id}");
 | 
					    final resp = await apiClient.get("/id/relationships/${account.id}");
 | 
				
			||||||
    return SnRelationship.fromJson(resp.data);
 | 
					    return SnRelationship.fromJson(resp.data);
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
					    if (err is DioException && err.response?.statusCode == 404) {
 | 
				
			||||||
@@ -134,7 +138,24 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
      showLoadingModal(context);
 | 
					      showLoadingModal(context);
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.post('/relationships/${account.value!.id}/friends');
 | 
					        await client.post('/id/relationships/${account.value!.id}/friends');
 | 
				
			||||||
 | 
					        ref.invalidate(accountRelationshipProvider(name));
 | 
				
			||||||
 | 
					      } catch (err) {
 | 
				
			||||||
 | 
					        showErrorAlert(err);
 | 
				
			||||||
 | 
					      } finally {
 | 
				
			||||||
 | 
					        if (context.mounted) hideLoadingModal(context);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Future<void> blockAction() async {
 | 
				
			||||||
 | 
					      showLoadingModal(context);
 | 
				
			||||||
 | 
					      try {
 | 
				
			||||||
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
 | 
					        if (accountRelationship.value == null) {
 | 
				
			||||||
 | 
					          await client.post('/id/relationships/${account.value!.id}/block');
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          await client.delete('/id/relationships/${account.value!.id}/block');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        ref.invalidate(accountRelationshipProvider(name));
 | 
					        ref.invalidate(accountRelationshipProvider(name));
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -146,18 +167,23 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
    Future<void> directMessageAction() async {
 | 
					    Future<void> directMessageAction() async {
 | 
				
			||||||
      if (!account.hasValue) return;
 | 
					      if (!account.hasValue) return;
 | 
				
			||||||
      if (accountChat.value != null) {
 | 
					      if (accountChat.value != null) {
 | 
				
			||||||
        context.push('/chat/${accountChat.value!.id}');
 | 
					        context.pushNamed(
 | 
				
			||||||
 | 
					          'chatRoom',
 | 
				
			||||||
 | 
					          pathParameters: {'id': accountChat.value!.id},
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      showLoadingModal(context);
 | 
					      showLoadingModal(context);
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        final resp = await client.post(
 | 
					        final resp = await client.post(
 | 
				
			||||||
          '/chat/direct',
 | 
					          '/sphere/chat/direct',
 | 
				
			||||||
          data: {'related_user_id': account.value!.id},
 | 
					          data: {'related_user_id': account.value!.id},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        final chat = SnChatRoom.fromJson(resp.data);
 | 
					        final chat = SnChatRoom.fromJson(resp.data);
 | 
				
			||||||
        if (context.mounted) context.push('/chat/${chat.id}');
 | 
					        if (context.mounted) {
 | 
				
			||||||
 | 
					          context.pushNamed('chatRoom', pathParameters: {'id': chat.id});
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        ref.invalidate(accountDirectChatProvider(name));
 | 
					        ref.invalidate(accountDirectChatProvider(name));
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -225,10 +251,316 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    final user = ref.watch(userInfoProvider);
 | 
					    final user = ref.watch(userInfoProvider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Widget accountBasicInfo(SnAccount data) => Padding(
 | 
				
			||||||
 | 
					      padding: const EdgeInsets.fromLTRB(24, 24, 24, 8),
 | 
				
			||||||
 | 
					      child: Row(
 | 
				
			||||||
 | 
					        crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					        children: [
 | 
				
			||||||
 | 
					          ProfilePictureWidget(file: data.profile.picture, radius: 32),
 | 
				
			||||||
 | 
					          const Gap(20),
 | 
				
			||||||
 | 
					          Expanded(
 | 
				
			||||||
 | 
					            child: Column(
 | 
				
			||||||
 | 
					              crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
				
			||||||
 | 
					              children: [
 | 
				
			||||||
 | 
					                Row(
 | 
				
			||||||
 | 
					                  children: [
 | 
				
			||||||
 | 
					                    AccountName(account: data, style: TextStyle(fontSize: 20)),
 | 
				
			||||||
 | 
					                    const Gap(6),
 | 
				
			||||||
 | 
					                    Flexible(
 | 
				
			||||||
 | 
					                      child: Text(
 | 
				
			||||||
 | 
					                        '@${data.name}',
 | 
				
			||||||
 | 
					                        maxLines: 1,
 | 
				
			||||||
 | 
					                        overflow: TextOverflow.ellipsis,
 | 
				
			||||||
 | 
					                      ).fontSize(14).opacity(0.85),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ],
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                AccountStatusWidget(uname: name, padding: EdgeInsets.zero),
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          IconButton(
 | 
				
			||||||
 | 
					            onPressed: () {
 | 
				
			||||||
 | 
					              SharePlus.instance.share(
 | 
				
			||||||
 | 
					                ShareParams(
 | 
				
			||||||
 | 
					                  uri: Uri.parse('https://id.solian.app/@${data.name}'),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            icon: const Icon(Symbols.share),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Widget accountProfileBio(SnAccount data) => Card(
 | 
				
			||||||
 | 
					      child: Column(
 | 
				
			||||||
 | 
					        crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					        children: [
 | 
				
			||||||
 | 
					          Text('bio').tr().bold().fontSize(15).padding(bottom: 8),
 | 
				
			||||||
 | 
					          if (data.profile.bio.isEmpty)
 | 
				
			||||||
 | 
					            Text('descriptionNone').tr().italic()
 | 
				
			||||||
 | 
					          else
 | 
				
			||||||
 | 
					            MarkdownTextContent(
 | 
				
			||||||
 | 
					              content: data.profile.bio,
 | 
				
			||||||
 | 
					              linesMargin: EdgeInsets.zero,
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ).padding(horizontal: 24, vertical: 20),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Widget accountProfileDetail(SnAccount data) => Card(
 | 
				
			||||||
 | 
					      child: Column(
 | 
				
			||||||
 | 
					        crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
				
			||||||
 | 
					        spacing: 24,
 | 
				
			||||||
 | 
					        children: [
 | 
				
			||||||
 | 
					          if (buildSubcolumn(data).isNotEmpty)
 | 
				
			||||||
 | 
					            Column(
 | 
				
			||||||
 | 
					              crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					              spacing: 2,
 | 
				
			||||||
 | 
					              children: buildSubcolumn(data),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          if (data.profile.timeZone.isNotEmpty)
 | 
				
			||||||
 | 
					            Column(
 | 
				
			||||||
 | 
					              crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					              children: [
 | 
				
			||||||
 | 
					                Text('timeZone').tr().bold(),
 | 
				
			||||||
 | 
					                Row(
 | 
				
			||||||
 | 
					                  crossAxisAlignment: CrossAxisAlignment.baseline,
 | 
				
			||||||
 | 
					                  textBaseline: TextBaseline.alphabetic,
 | 
				
			||||||
 | 
					                  spacing: 6,
 | 
				
			||||||
 | 
					                  children: [
 | 
				
			||||||
 | 
					                    Text(data.profile.timeZone),
 | 
				
			||||||
 | 
					                    Text(
 | 
				
			||||||
 | 
					                      getTzInfo(
 | 
				
			||||||
 | 
					                        data.profile.timeZone,
 | 
				
			||||||
 | 
					                      ).$2.formatCustomGlobal('HH:mm'),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    Text(
 | 
				
			||||||
 | 
					                      getTzInfo(data.profile.timeZone).$1.formatOffsetLocal(),
 | 
				
			||||||
 | 
					                    ).fontSize(11),
 | 
				
			||||||
 | 
					                    Text(
 | 
				
			||||||
 | 
					                      'UTC${getTzInfo(data.profile.timeZone).$1.formatOffset()}',
 | 
				
			||||||
 | 
					                    ).fontSize(11).opacity(0.75),
 | 
				
			||||||
 | 
					                  ],
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ).padding(horizontal: 24, vertical: 16),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Widget accountAction(SnAccount data) => Card(
 | 
				
			||||||
 | 
					      child: Column(
 | 
				
			||||||
 | 
					        children: [
 | 
				
			||||||
 | 
					          Row(
 | 
				
			||||||
 | 
					            spacing: 8,
 | 
				
			||||||
 | 
					            children: [
 | 
				
			||||||
 | 
					              if (accountRelationship.value == null ||
 | 
				
			||||||
 | 
					                  accountRelationship.value!.status > -100)
 | 
				
			||||||
 | 
					                Expanded(
 | 
				
			||||||
 | 
					                  child: FilledButton.icon(
 | 
				
			||||||
 | 
					                    style: ButtonStyle(
 | 
				
			||||||
 | 
					                      backgroundColor: WidgetStatePropertyAll(
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? null
 | 
				
			||||||
 | 
					                            : Theme.of(context).colorScheme.secondary,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      foregroundColor: WidgetStatePropertyAll(
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? null
 | 
				
			||||||
 | 
					                            : Theme.of(context).colorScheme.onSecondary,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    onPressed: relationshipAction,
 | 
				
			||||||
 | 
					                    label:
 | 
				
			||||||
 | 
					                        Text(
 | 
				
			||||||
 | 
					                          accountRelationship.value == null
 | 
				
			||||||
 | 
					                              ? 'addFriendShort'
 | 
				
			||||||
 | 
					                              : 'added',
 | 
				
			||||||
 | 
					                        ).tr(),
 | 
				
			||||||
 | 
					                    icon:
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? const Icon(Symbols.person_add)
 | 
				
			||||||
 | 
					                            : const Icon(Symbols.person_check),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              if (accountRelationship.value == null ||
 | 
				
			||||||
 | 
					                  accountRelationship.value!.status <= -100)
 | 
				
			||||||
 | 
					                Expanded(
 | 
				
			||||||
 | 
					                  child: FilledButton.icon(
 | 
				
			||||||
 | 
					                    style: ButtonStyle(
 | 
				
			||||||
 | 
					                      backgroundColor: WidgetStatePropertyAll(
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? null
 | 
				
			||||||
 | 
					                            : Theme.of(context).colorScheme.secondary,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      foregroundColor: WidgetStatePropertyAll(
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? null
 | 
				
			||||||
 | 
					                            : Theme.of(context).colorScheme.onSecondary,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    onPressed: blockAction,
 | 
				
			||||||
 | 
					                    label:
 | 
				
			||||||
 | 
					                        Text(
 | 
				
			||||||
 | 
					                          accountRelationship.value == null
 | 
				
			||||||
 | 
					                              ? 'blockUser'
 | 
				
			||||||
 | 
					                              : 'unblockUser',
 | 
				
			||||||
 | 
					                        ).tr(),
 | 
				
			||||||
 | 
					                    icon:
 | 
				
			||||||
 | 
					                        accountRelationship.value == null
 | 
				
			||||||
 | 
					                            ? const Icon(Symbols.block)
 | 
				
			||||||
 | 
					                            : const Icon(Symbols.person_cancel),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          Row(
 | 
				
			||||||
 | 
					            spacing: 8,
 | 
				
			||||||
 | 
					            children: [
 | 
				
			||||||
 | 
					              Expanded(
 | 
				
			||||||
 | 
					                child: FilledButton.icon(
 | 
				
			||||||
 | 
					                  onPressed: directMessageAction,
 | 
				
			||||||
 | 
					                  icon: const Icon(Symbols.message),
 | 
				
			||||||
 | 
					                  label:
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
 | 
					                        accountChat.value == null
 | 
				
			||||||
 | 
					                            ? 'createDirectMessage'
 | 
				
			||||||
 | 
					                            : 'gotoDirectMessage',
 | 
				
			||||||
 | 
					                        maxLines: 1,
 | 
				
			||||||
 | 
					                      ).tr(),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              IconButton.filled(
 | 
				
			||||||
 | 
					                onPressed: () {
 | 
				
			||||||
 | 
					                  showAbuseReportSheet(
 | 
				
			||||||
 | 
					                    context,
 | 
				
			||||||
 | 
					                    resourceIdentifier: 'account/${data.id}',
 | 
				
			||||||
 | 
					                  );
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                icon: Icon(
 | 
				
			||||||
 | 
					                  Symbols.flag,
 | 
				
			||||||
 | 
					                  color: Theme.of(context).colorScheme.onError,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                style: ButtonStyle(
 | 
				
			||||||
 | 
					                  backgroundColor: WidgetStatePropertyAll(
 | 
				
			||||||
 | 
					                    Theme.of(context).colorScheme.error,
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ).padding(horizontal: 16, vertical: 8),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return account.when(
 | 
					    return account.when(
 | 
				
			||||||
      data:
 | 
					      data:
 | 
				
			||||||
          (data) => AppScaffold(
 | 
					          (data) => AppScaffold(
 | 
				
			||||||
            body: CustomScrollView(
 | 
					            isNoBackground: false,
 | 
				
			||||||
 | 
					            appBar:
 | 
				
			||||||
 | 
					                isWideScreen(context)
 | 
				
			||||||
 | 
					                    ? AppBar(
 | 
				
			||||||
 | 
					                      foregroundColor: appbarColor.value,
 | 
				
			||||||
 | 
					                      leading: PageBackButton(
 | 
				
			||||||
 | 
					                        color: appbarColor.value,
 | 
				
			||||||
 | 
					                        shadows: [appbarShadow],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      flexibleSpace: Stack(
 | 
				
			||||||
 | 
					                        children: [
 | 
				
			||||||
 | 
					                          Positioned.fill(
 | 
				
			||||||
 | 
					                            child:
 | 
				
			||||||
 | 
					                                data.profile.background?.id != null
 | 
				
			||||||
 | 
					                                    ? CloudImageWidget(
 | 
				
			||||||
 | 
					                                      file: data.profile.background,
 | 
				
			||||||
 | 
					                                    )
 | 
				
			||||||
 | 
					                                    : Container(
 | 
				
			||||||
 | 
					                                      color:
 | 
				
			||||||
 | 
					                                          Theme.of(
 | 
				
			||||||
 | 
					                                            context,
 | 
				
			||||||
 | 
					                                          ).appBarTheme.backgroundColor,
 | 
				
			||||||
 | 
					                                    ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                          FlexibleSpaceBar(
 | 
				
			||||||
 | 
					                            title: Text(
 | 
				
			||||||
 | 
					                              data.nick,
 | 
				
			||||||
 | 
					                              style: TextStyle(
 | 
				
			||||||
 | 
					                                color:
 | 
				
			||||||
 | 
					                                    appbarColor.value ??
 | 
				
			||||||
 | 
					                                    Theme.of(
 | 
				
			||||||
 | 
					                                      context,
 | 
				
			||||||
 | 
					                                    ).appBarTheme.foregroundColor,
 | 
				
			||||||
 | 
					                                shadows: [appbarShadow],
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                    : null,
 | 
				
			||||||
 | 
					            body:
 | 
				
			||||||
 | 
					                isWideScreen(context)
 | 
				
			||||||
 | 
					                    ? Row(
 | 
				
			||||||
 | 
					                      children: [
 | 
				
			||||||
 | 
					                        Flexible(
 | 
				
			||||||
 | 
					                          child: CustomScrollView(
 | 
				
			||||||
 | 
					                            slivers: [
 | 
				
			||||||
 | 
					                              SliverToBoxAdapter(child: accountBasicInfo(data)),
 | 
				
			||||||
 | 
					                              if (data.badges.isNotEmpty)
 | 
				
			||||||
 | 
					                                SliverToBoxAdapter(
 | 
				
			||||||
 | 
					                                  child: BadgeList(
 | 
				
			||||||
 | 
					                                    badges: data.badges,
 | 
				
			||||||
 | 
					                                  ).padding(horizontal: 24, bottom: 24),
 | 
				
			||||||
 | 
					                                ),
 | 
				
			||||||
 | 
					                              SliverToBoxAdapter(
 | 
				
			||||||
 | 
					                                child: Column(
 | 
				
			||||||
 | 
					                                  spacing: 12,
 | 
				
			||||||
 | 
					                                  children: [
 | 
				
			||||||
 | 
					                                    LevelingProgressCard(
 | 
				
			||||||
 | 
					                                      level: data.profile.level,
 | 
				
			||||||
 | 
					                                      experience: data.profile.experience,
 | 
				
			||||||
 | 
					                                      progress: data.profile.levelingProgress,
 | 
				
			||||||
 | 
					                                    ),
 | 
				
			||||||
 | 
					                                    if (data.profile.verification != null)
 | 
				
			||||||
 | 
					                                      Card(
 | 
				
			||||||
 | 
					                                        child: VerificationStatusCard(
 | 
				
			||||||
 | 
					                                          mark: data.profile.verification!,
 | 
				
			||||||
 | 
					                                        ),
 | 
				
			||||||
 | 
					                                      ),
 | 
				
			||||||
 | 
					                                  ],
 | 
				
			||||||
 | 
					                                ).padding(horizontal: 4, top: 8),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                              SliverToBoxAdapter(
 | 
				
			||||||
 | 
					                                child: accountProfileBio(data).padding(top: 4),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                              SliverToBoxAdapter(
 | 
				
			||||||
 | 
					                                child: accountProfileDetail(data),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                        Flexible(
 | 
				
			||||||
 | 
					                          child: CustomScrollView(
 | 
				
			||||||
 | 
					                            slivers: [
 | 
				
			||||||
 | 
					                              SliverGap(24),
 | 
				
			||||||
 | 
					                              if (user.value != null)
 | 
				
			||||||
 | 
					                                SliverToBoxAdapter(child: accountAction(data)),
 | 
				
			||||||
 | 
					                              SliverToBoxAdapter(
 | 
				
			||||||
 | 
					                                child: Card(
 | 
				
			||||||
 | 
					                                  child: FortuneGraphWidget(
 | 
				
			||||||
 | 
					                                    events: accountEvents,
 | 
				
			||||||
 | 
					                                    eventCalanderUser: data.name,
 | 
				
			||||||
 | 
					                                    margin: EdgeInsets.zero,
 | 
				
			||||||
 | 
					                                  ),
 | 
				
			||||||
 | 
					                                ),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ],
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ],
 | 
				
			||||||
 | 
					                    ).padding(horizontal: 24)
 | 
				
			||||||
 | 
					                    : CustomScrollView(
 | 
				
			||||||
                      slivers: [
 | 
					                      slivers: [
 | 
				
			||||||
                        SliverAppBar(
 | 
					                        SliverAppBar(
 | 
				
			||||||
                          foregroundColor: appbarColor.value,
 | 
					                          foregroundColor: appbarColor.value,
 | 
				
			||||||
@@ -259,7 +591,9 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
                                  style: TextStyle(
 | 
					                                  style: TextStyle(
 | 
				
			||||||
                                    color:
 | 
					                                    color:
 | 
				
			||||||
                                        appbarColor.value ??
 | 
					                                        appbarColor.value ??
 | 
				
			||||||
                                Theme.of(context).appBarTheme.foregroundColor,
 | 
					                                        Theme.of(
 | 
				
			||||||
 | 
					                                          context,
 | 
				
			||||||
 | 
					                                        ).appBarTheme.foregroundColor,
 | 
				
			||||||
                                    shadows: [appbarShadow],
 | 
					                                    shadows: [appbarShadow],
 | 
				
			||||||
                                  ),
 | 
					                                  ),
 | 
				
			||||||
                                ),
 | 
					                                ),
 | 
				
			||||||
@@ -267,44 +601,7 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
                            ],
 | 
					                            ],
 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                SliverToBoxAdapter(
 | 
					                        SliverToBoxAdapter(child: accountBasicInfo(data)),
 | 
				
			||||||
                  child: Padding(
 | 
					 | 
				
			||||||
                    padding: const EdgeInsets.fromLTRB(24, 24, 24, 8),
 | 
					 | 
				
			||||||
                    child: Row(
 | 
					 | 
				
			||||||
                      crossAxisAlignment: CrossAxisAlignment.start,
 | 
					 | 
				
			||||||
                      children: [
 | 
					 | 
				
			||||||
                        ProfilePictureWidget(
 | 
					 | 
				
			||||||
                          file: data.profile.picture,
 | 
					 | 
				
			||||||
                          radius: 32,
 | 
					 | 
				
			||||||
                        ),
 | 
					 | 
				
			||||||
                        const Gap(20),
 | 
					 | 
				
			||||||
                        Expanded(
 | 
					 | 
				
			||||||
                          child: Column(
 | 
					 | 
				
			||||||
                            crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
					 | 
				
			||||||
                            children: [
 | 
					 | 
				
			||||||
                              Row(
 | 
					 | 
				
			||||||
                                children: [
 | 
					 | 
				
			||||||
                                  AccountName(
 | 
					 | 
				
			||||||
                                    account: data,
 | 
					 | 
				
			||||||
                                    style: TextStyle(fontSize: 20),
 | 
					 | 
				
			||||||
                                  ),
 | 
					 | 
				
			||||||
                                  const Gap(6),
 | 
					 | 
				
			||||||
                                  Text(
 | 
					 | 
				
			||||||
                                    '@${data.name}',
 | 
					 | 
				
			||||||
                                  ).fontSize(14).opacity(0.85),
 | 
					 | 
				
			||||||
                                ],
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                              AccountStatusWidget(
 | 
					 | 
				
			||||||
                                uname: name,
 | 
					 | 
				
			||||||
                                padding: EdgeInsets.zero,
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                            ],
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                        ),
 | 
					 | 
				
			||||||
                      ],
 | 
					 | 
				
			||||||
                    ),
 | 
					 | 
				
			||||||
                  ),
 | 
					 | 
				
			||||||
                ),
 | 
					 | 
				
			||||||
                        if (data.badges.isNotEmpty)
 | 
					                        if (data.badges.isNotEmpty)
 | 
				
			||||||
                          SliverToBoxAdapter(
 | 
					                          SliverToBoxAdapter(
 | 
				
			||||||
                            child: BadgeList(
 | 
					                            child: BadgeList(
 | 
				
			||||||
@@ -313,144 +610,40 @@ class AccountProfileScreen extends HookConsumerWidget {
 | 
				
			|||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                        SliverToBoxAdapter(
 | 
					                        SliverToBoxAdapter(
 | 
				
			||||||
                          child: Column(
 | 
					                          child: Column(
 | 
				
			||||||
                    spacing: 12,
 | 
					 | 
				
			||||||
                            children: [
 | 
					                            children: [
 | 
				
			||||||
                              LevelingProgressCard(
 | 
					                              LevelingProgressCard(
 | 
				
			||||||
                                level: data.profile.level,
 | 
					                                level: data.profile.level,
 | 
				
			||||||
                                experience: data.profile.experience,
 | 
					                                experience: data.profile.experience,
 | 
				
			||||||
                                progress: data.profile.levelingProgress,
 | 
					                                progress: data.profile.levelingProgress,
 | 
				
			||||||
                      ),
 | 
					                              ).padding(top: 8, horizontal: 8, bottom: 4),
 | 
				
			||||||
                              if (data.profile.verification != null)
 | 
					                              if (data.profile.verification != null)
 | 
				
			||||||
                        VerificationStatusCard(
 | 
					                                Card(
 | 
				
			||||||
 | 
					                                  child: VerificationStatusCard(
 | 
				
			||||||
                                    mark: data.profile.verification!,
 | 
					                                    mark: data.profile.verification!,
 | 
				
			||||||
                                  ),
 | 
					                                  ),
 | 
				
			||||||
 | 
					                                ).padding(horizontal: 4),
 | 
				
			||||||
                            ],
 | 
					                            ],
 | 
				
			||||||
                  ).padding(horizontal: 20),
 | 
					 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
 | 
					 | 
				
			||||||
                SliverToBoxAdapter(
 | 
					 | 
				
			||||||
                  child: const Divider(height: 1).padding(vertical: 24),
 | 
					 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                        SliverToBoxAdapter(
 | 
					                        SliverToBoxAdapter(
 | 
				
			||||||
                  child: Column(
 | 
					                          child: accountProfileBio(data).padding(horizontal: 4),
 | 
				
			||||||
                    crossAxisAlignment: CrossAxisAlignment.stretch,
 | 
					 | 
				
			||||||
                    spacing: 24,
 | 
					 | 
				
			||||||
                    children: [
 | 
					 | 
				
			||||||
                      if (buildSubcolumn(data).isNotEmpty)
 | 
					 | 
				
			||||||
                        Column(
 | 
					 | 
				
			||||||
                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
					 | 
				
			||||||
                          spacing: 2,
 | 
					 | 
				
			||||||
                          children: buildSubcolumn(data),
 | 
					 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                      Column(
 | 
					 | 
				
			||||||
                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
					 | 
				
			||||||
                        children: [
 | 
					 | 
				
			||||||
                          Text('bio').tr().bold(),
 | 
					 | 
				
			||||||
                          Text(
 | 
					 | 
				
			||||||
                            data.profile.bio.isEmpty
 | 
					 | 
				
			||||||
                                ? 'descriptionNone'.tr()
 | 
					 | 
				
			||||||
                                : data.profile.bio,
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                        ],
 | 
					 | 
				
			||||||
                      ),
 | 
					 | 
				
			||||||
                      if (data.profile.timeZone.isNotEmpty)
 | 
					 | 
				
			||||||
                        Column(
 | 
					 | 
				
			||||||
                          crossAxisAlignment: CrossAxisAlignment.start,
 | 
					 | 
				
			||||||
                          children: [
 | 
					 | 
				
			||||||
                            Text('timeZone').tr().bold(),
 | 
					 | 
				
			||||||
                            Row(
 | 
					 | 
				
			||||||
                              crossAxisAlignment: CrossAxisAlignment.baseline,
 | 
					 | 
				
			||||||
                              textBaseline: TextBaseline.alphabetic,
 | 
					 | 
				
			||||||
                              spacing: 6,
 | 
					 | 
				
			||||||
                              children: [
 | 
					 | 
				
			||||||
                                Text(data.profile.timeZone),
 | 
					 | 
				
			||||||
                                Text(
 | 
					 | 
				
			||||||
                                  getTzInfo(
 | 
					 | 
				
			||||||
                                    data.profile.timeZone,
 | 
					 | 
				
			||||||
                                  ).$2.formatCustomGlobal('HH:mm'),
 | 
					 | 
				
			||||||
                                ),
 | 
					 | 
				
			||||||
                                Text(
 | 
					 | 
				
			||||||
                                  getTzInfo(
 | 
					 | 
				
			||||||
                                    data.profile.timeZone,
 | 
					 | 
				
			||||||
                                  ).$1.formatOffsetLocal(),
 | 
					 | 
				
			||||||
                                ).fontSize(11),
 | 
					 | 
				
			||||||
                                Text(
 | 
					 | 
				
			||||||
                                  'UTC${getTzInfo(data.profile.timeZone).$1.formatOffset()}',
 | 
					 | 
				
			||||||
                                ).fontSize(11).opacity(0.75),
 | 
					 | 
				
			||||||
                              ],
 | 
					 | 
				
			||||||
                            ),
 | 
					 | 
				
			||||||
                          ],
 | 
					 | 
				
			||||||
                        ),
 | 
					 | 
				
			||||||
                    ],
 | 
					 | 
				
			||||||
                  ).padding(horizontal: 24),
 | 
					 | 
				
			||||||
                ),
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (user.value != null)
 | 
					 | 
				
			||||||
                        SliverToBoxAdapter(
 | 
					                        SliverToBoxAdapter(
 | 
				
			||||||
                    child: const Divider(
 | 
					                          child: accountProfileDetail(
 | 
				
			||||||
                      height: 1,
 | 
					                            data,
 | 
				
			||||||
                    ).padding(top: 24, bottom: 12),
 | 
					                          ).padding(horizontal: 4),
 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                        if (user.value != null)
 | 
					                        if (user.value != null)
 | 
				
			||||||
                          SliverToBoxAdapter(
 | 
					                          SliverToBoxAdapter(
 | 
				
			||||||
                    child: Row(
 | 
					                            child: accountAction(data).padding(horizontal: 4),
 | 
				
			||||||
                      spacing: 8,
 | 
					 | 
				
			||||||
                      children: [
 | 
					 | 
				
			||||||
                        Expanded(
 | 
					 | 
				
			||||||
                          child: FilledButton.icon(
 | 
					 | 
				
			||||||
                            style: ButtonStyle(
 | 
					 | 
				
			||||||
                              backgroundColor: WidgetStatePropertyAll(
 | 
					 | 
				
			||||||
                                accountRelationship.value == null
 | 
					 | 
				
			||||||
                                    ? null
 | 
					 | 
				
			||||||
                                    : Theme.of(context).colorScheme.secondary,
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                              foregroundColor: WidgetStatePropertyAll(
 | 
					 | 
				
			||||||
                                accountRelationship.value == null
 | 
					 | 
				
			||||||
                                    ? null
 | 
					 | 
				
			||||||
                                    : Theme.of(context).colorScheme.onSecondary,
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                            ),
 | 
					 | 
				
			||||||
                            onPressed: relationshipAction,
 | 
					 | 
				
			||||||
                            label:
 | 
					 | 
				
			||||||
                                Text(
 | 
					 | 
				
			||||||
                                  accountRelationship.value == null
 | 
					 | 
				
			||||||
                                      ? 'addFriendShort'
 | 
					 | 
				
			||||||
                                      : 'added',
 | 
					 | 
				
			||||||
                                ).tr(),
 | 
					 | 
				
			||||||
                            icon:
 | 
					 | 
				
			||||||
                                accountRelationship.value == null
 | 
					 | 
				
			||||||
                                    ? const Icon(Symbols.person_add)
 | 
					 | 
				
			||||||
                                    : const Icon(Symbols.person_check),
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                        ),
 | 
					 | 
				
			||||||
                        Expanded(
 | 
					 | 
				
			||||||
                          child: FilledButton.icon(
 | 
					 | 
				
			||||||
                            onPressed: directMessageAction,
 | 
					 | 
				
			||||||
                            icon: const Icon(Symbols.message),
 | 
					 | 
				
			||||||
                            label:
 | 
					 | 
				
			||||||
                                Text(
 | 
					 | 
				
			||||||
                                  accountChat.value == null
 | 
					 | 
				
			||||||
                                      ? 'createDirectMessage'
 | 
					 | 
				
			||||||
                                      : 'gotoDirectMessage',
 | 
					 | 
				
			||||||
                                  maxLines: 1,
 | 
					 | 
				
			||||||
                                ).tr(),
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                        ),
 | 
					 | 
				
			||||||
                      ],
 | 
					 | 
				
			||||||
                    ).padding(horizontal: 16),
 | 
					 | 
				
			||||||
                          ),
 | 
					                          ),
 | 
				
			||||||
                        SliverToBoxAdapter(
 | 
					                        SliverToBoxAdapter(
 | 
				
			||||||
                  child: const Divider(height: 1).padding(top: 12),
 | 
					                          child: Card(
 | 
				
			||||||
                ),
 | 
					                            child: FortuneGraphWidget(
 | 
				
			||||||
                SliverToBoxAdapter(
 | 
					 | 
				
			||||||
                  child: Column(
 | 
					 | 
				
			||||||
                    children: [
 | 
					 | 
				
			||||||
                      FortuneGraphWidget(
 | 
					 | 
				
			||||||
                              events: accountEvents,
 | 
					                              events: accountEvents,
 | 
				
			||||||
                              eventCalanderUser: data.name,
 | 
					                              eventCalanderUser: data.name,
 | 
				
			||||||
                            ),
 | 
					                            ),
 | 
				
			||||||
                    ],
 | 
					                          ).padding(horizontal: 4),
 | 
				
			||||||
                  ).padding(all: 8),
 | 
					 | 
				
			||||||
                        ),
 | 
					                        ),
 | 
				
			||||||
                      ],
 | 
					                      ],
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'profile.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$accountHash() => r'd2b0579617e6264452d98f47f695a9cdf45b24ec';
 | 
					String _$accountHash() => r'ce7264a04f69e32a5cb07bc10ca5fa47ae1fddaa';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Copied from Dart SDK
 | 
					/// Copied from Dart SDK
 | 
				
			||||||
class _SystemHash {
 | 
					class _SystemHash {
 | 
				
			||||||
@@ -145,7 +145,7 @@ class _AccountProviderElement
 | 
				
			|||||||
  String get uname => (origin as AccountProvider).uname;
 | 
					  String get uname => (origin as AccountProvider).uname;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$accountBadgesHash() => r'4bfe5fb0d6ac0d4cde4563460bde289289188f6d';
 | 
					String _$accountBadgesHash() => r'1de05e122c23ff2c6ac6d318977165761e2ad177';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [accountBadges].
 | 
					/// See also [accountBadges].
 | 
				
			||||||
@ProviderFor(accountBadges)
 | 
					@ProviderFor(accountBadges)
 | 
				
			||||||
@@ -395,7 +395,7 @@ class _AccountAppbarForcegroundColorProviderElement
 | 
				
			|||||||
  String get uname => (origin as AccountAppbarForcegroundColorProvider).uname;
 | 
					  String get uname => (origin as AccountAppbarForcegroundColorProvider).uname;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$accountDirectChatHash() => r'60d0015fc2a3c8fc2190bb41d6818cf3027d9d0a';
 | 
					String _$accountDirectChatHash() => r'149ea3a3730672cfbbb8c16fe1f2caa0bb9f0e17';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [accountDirectChat].
 | 
					/// See also [accountDirectChat].
 | 
				
			||||||
@ProviderFor(accountDirectChat)
 | 
					@ProviderFor(accountDirectChat)
 | 
				
			||||||
@@ -517,7 +517,7 @@ class _AccountDirectChatProviderElement
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$accountRelationshipHash() =>
 | 
					String _$accountRelationshipHash() =>
 | 
				
			||||||
    r'cb7d0d3f8cd4f23ad9d2d529872c540dac483d4f';
 | 
					    r'9a3a4e8c6c6706f73df95feccb86736fcad33f30';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [accountRelationship].
 | 
					/// See also [accountRelationship].
 | 
				
			||||||
@ProviderFor(accountRelationship)
 | 
					@ProviderFor(accountRelationship)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ part 'relationship.g.dart';
 | 
				
			|||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnRelationship>> sentFriendRequest(Ref ref) async {
 | 
					Future<List<SnRelationship>> sentFriendRequest(Ref ref) async {
 | 
				
			||||||
  final client = ref.read(apiClientProvider);
 | 
					  final client = ref.read(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/relationships/requests');
 | 
					  final resp = await client.get('/id/relationships/requests');
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map((e) => SnRelationship.fromJson(e))
 | 
					      .map((e) => SnRelationship.fromJson(e))
 | 
				
			||||||
      .cast<SnRelationship>()
 | 
					      .cast<SnRelationship>()
 | 
				
			||||||
@@ -42,7 +42,7 @@ class RelationshipListNotifier extends _$RelationshipListNotifier
 | 
				
			|||||||
    final take = 20;
 | 
					    final take = 20;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final response = await client.get(
 | 
					    final response = await client.get(
 | 
				
			||||||
      '/relationships',
 | 
					      '/id/relationships',
 | 
				
			||||||
      queryParameters: {'offset': offset, 'take': take},
 | 
					      queryParameters: {'offset': offset, 'take': take},
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,7 +221,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
				
			|||||||
      if (result == null) return;
 | 
					      if (result == null) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      await client.post('/relationships/${result.id}/friends');
 | 
					      await client.post('/id/relationships/${result.id}/friends');
 | 
				
			||||||
      ref.invalidate(sentFriendRequestProvider);
 | 
					      ref.invalidate(sentFriendRequestProvider);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -235,7 +235,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
				
			|||||||
        submitting.value = true;
 | 
					        submitting.value = true;
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
 | 
					          '/id/relationships/${relationship.accountId}/friends/${isAccept ? 'accept' : 'decline'}',
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        relationshipNotifier.forceRefresh();
 | 
					        relationshipNotifier.forceRefresh();
 | 
				
			||||||
        if (!context.mounted) return;
 | 
					        if (!context.mounted) return;
 | 
				
			||||||
@@ -262,7 +262,7 @@ class RelationshipScreen extends HookConsumerWidget {
 | 
				
			|||||||
    ) async {
 | 
					    ) async {
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      await client.patch(
 | 
					      await client.patch(
 | 
				
			||||||
        '/relationships/${relationship.accountId}',
 | 
					        '/id/relationships/${relationship.accountId}',
 | 
				
			||||||
        data: {'status': newStatus},
 | 
					        data: {'status': newStatus},
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      relationshipNotifier.forceRefresh();
 | 
					      relationshipNotifier.forceRefresh();
 | 
				
			||||||
@@ -345,7 +345,7 @@ class _SentFriendRequestsSheet extends HookConsumerWidget {
 | 
				
			|||||||
    Future<void> cancelRequest(SnRelationship request) async {
 | 
					    Future<void> cancelRequest(SnRelationship request) async {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.delete('/relationships/${request.relatedId}/friends');
 | 
					        await client.delete('/id/relationships/${request.relatedId}/friends');
 | 
				
			||||||
        ref.invalidate(sentFriendRequestProvider);
 | 
					        ref.invalidate(sentFriendRequestProvider);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ part of 'relationship.dart';
 | 
				
			|||||||
// RiverpodGenerator
 | 
					// RiverpodGenerator
 | 
				
			||||||
// **************************************************************************
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
String _$sentFriendRequestHash() => r'2efa72835b1740e0fe96bd347bce0f98b6ae80d6';
 | 
					String _$sentFriendRequestHash() => r'dc02ace6cb755a01ab862c9fcff3b26de7f946cb';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [sentFriendRequest].
 | 
					/// See also [sentFriendRequest].
 | 
				
			||||||
@ProviderFor(sentFriendRequest)
 | 
					@ProviderFor(sentFriendRequest)
 | 
				
			||||||
@@ -27,7 +27,7 @@ final sentFriendRequestProvider =
 | 
				
			|||||||
typedef SentFriendRequestRef =
 | 
					typedef SentFriendRequestRef =
 | 
				
			||||||
    AutoDisposeFutureProviderRef<List<SnRelationship>>;
 | 
					    AutoDisposeFutureProviderRef<List<SnRelationship>>;
 | 
				
			||||||
String _$relationshipListNotifierHash() =>
 | 
					String _$relationshipListNotifierHash() =>
 | 
				
			||||||
    r'560410cba6e4c26affd91aa86b3666319bd31f24';
 | 
					    r'0a134ce69489a4f2002d2223853855b6f22e4e9f';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// See also [RelationshipListNotifier].
 | 
					/// See also [RelationshipListNotifier].
 | 
				
			||||||
@ProviderFor(RelationshipListNotifier)
 | 
					@ProviderFor(RelationshipListNotifier)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										17
									
								
								lib/screens/auth/captcha.config.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								lib/screens/auth/captcha.config.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
				
			||||||
 | 
					import 'package:island/pods/network.dart';
 | 
				
			||||||
 | 
					import 'package:riverpod_annotation/riverpod_annotation.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part 'captcha.config.g.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@riverpod
 | 
				
			||||||
 | 
					Future<String> captchaUrl(Ref ref) async {
 | 
				
			||||||
 | 
					  final apiClient = ref.watch(apiClientProvider);
 | 
				
			||||||
 | 
					  final resp = await apiClient.get('/.well-known/services');
 | 
				
			||||||
 | 
					  final serviceMapping = await resp.data;
 | 
				
			||||||
 | 
					  var baseUrl = serviceMapping['DysonNetwork.Pass'] as String;
 | 
				
			||||||
 | 
					  // The backend using self-signed certicates on development
 | 
				
			||||||
 | 
					  // Which mobile simulator might not accept, use this to avoid errors
 | 
				
			||||||
 | 
					  if (baseUrl.contains('https://localhost')) baseUrl = 'http://localhost:5216';
 | 
				
			||||||
 | 
					  return '$baseUrl/captcha';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										26
									
								
								lib/screens/auth/captcha.config.g.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								lib/screens/auth/captcha.config.g.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					// GENERATED CODE - DO NOT MODIFY BY HAND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					part of 'captcha.config.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					// RiverpodGenerator
 | 
				
			||||||
 | 
					// **************************************************************************
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					String _$captchaUrlHash() => r'bbed0d18272dd205069642b3c6583ea2eef735d1';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// See also [captchaUrl].
 | 
				
			||||||
 | 
					@ProviderFor(captchaUrl)
 | 
				
			||||||
 | 
					final captchaUrlProvider = AutoDisposeFutureProvider<String>.internal(
 | 
				
			||||||
 | 
					  captchaUrl,
 | 
				
			||||||
 | 
					  name: r'captchaUrlProvider',
 | 
				
			||||||
 | 
					  debugGetCreateSourceHash:
 | 
				
			||||||
 | 
					      const bool.fromEnvironment('dart.vm.product') ? null : _$captchaUrlHash,
 | 
				
			||||||
 | 
					  dependencies: null,
 | 
				
			||||||
 | 
					  allTransitiveDependencies: null,
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Deprecated('Will be removed in 3.0. Use Ref instead')
 | 
				
			||||||
 | 
					// ignore: unused_element
 | 
				
			||||||
 | 
					typedef CaptchaUrlRef = AutoDisposeFutureProviderRef<String>;
 | 
				
			||||||
 | 
					// ignore_for_file: type=lint
 | 
				
			||||||
 | 
					// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 | 
					import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 | 
				
			||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
 | 
					import 'package:flutter_riverpod/flutter_riverpod.dart';
 | 
				
			||||||
import 'package:island/pods/config.dart';
 | 
					import 'package:island/screens/auth/captcha.config.dart';
 | 
				
			||||||
import 'package:island/widgets/app_scaffold.dart';
 | 
					import 'package:island/widgets/app_scaffold.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CaptchaScreen extends ConsumerWidget {
 | 
					class CaptchaScreen extends ConsumerWidget {
 | 
				
			||||||
@@ -9,13 +9,15 @@ class CaptchaScreen extends ConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
					  Widget build(BuildContext context, WidgetRef ref) {
 | 
				
			||||||
    final serverUrl = ref.watch(serverUrlProvider);
 | 
					    final captchaUrl = ref.watch(captchaUrlProvider);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!captchaUrl.hasValue) return Center(child: CircularProgressIndicator());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      appBar: AppBar(title: Text("Anti-Robot")),
 | 
					      appBar: AppBar(title: Text("Anti-Robot")),
 | 
				
			||||||
      body: InAppWebView(
 | 
					      body: InAppWebView(
 | 
				
			||||||
        initialUrlRequest: URLRequest(
 | 
					        initialUrlRequest: URLRequest(
 | 
				
			||||||
          url: WebUri('$serverUrl/auth/captcha?redirect_uri=solink://captcha'),
 | 
					          url: WebUri('${captchaUrl.value}?redirect_uri=solian://captcha'),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        shouldOverrideUrlLoading: (controller, navigationAction) async {
 | 
					        shouldOverrideUrlLoading: (controller, navigationAction) async {
 | 
				
			||||||
          Uri? url = navigationAction.request.url;
 | 
					          Uri? url = navigationAction.request.url;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@
 | 
				
			|||||||
import 'dart:ui_web' as ui;
 | 
					import 'dart:ui_web' as ui;
 | 
				
			||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
					import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
				
			||||||
import 'package:island/pods/config.dart';
 | 
					import 'package:island/pods/config.dart';
 | 
				
			||||||
 | 
					import 'package:island/screens/auth/captcha.config.dart';
 | 
				
			||||||
import 'package:island/widgets/app_scaffold.dart';
 | 
					import 'package:island/widgets/app_scaffold.dart';
 | 
				
			||||||
import 'package:web/web.dart' as web;
 | 
					import 'package:web/web.dart' as web;
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
@@ -17,7 +18,7 @@ class CaptchaScreen extends ConsumerStatefulWidget {
 | 
				
			|||||||
class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
 | 
					class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
 | 
				
			||||||
  bool _isInitialized = false;
 | 
					  bool _isInitialized = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  void _setupWebListener(String serverUrl) {
 | 
					  void _setupWebListener(String serverUrl) async {
 | 
				
			||||||
    web.window.onMessage.listen((event) {
 | 
					    web.window.onMessage.listen((event) {
 | 
				
			||||||
      if (event.data != null && event.data is String) {
 | 
					      if (event.data != null && event.data is String) {
 | 
				
			||||||
        final message = event.data as String;
 | 
					        final message = event.data as String;
 | 
				
			||||||
@@ -29,9 +30,11 @@ class _CaptchaScreenState extends ConsumerState<CaptchaScreen> {
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final captchaUrl = await ref.watch(captchaUrlProvider.future);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final iframe =
 | 
					    final iframe =
 | 
				
			||||||
        web.HTMLIFrameElement()
 | 
					        web.HTMLIFrameElement()
 | 
				
			||||||
          ..src = '$serverUrl/auth/captcha'
 | 
					          ..src = captchaUrl
 | 
				
			||||||
          ..style.border = 'none'
 | 
					          ..style.border = 'none'
 | 
				
			||||||
          ..width = '100%'
 | 
					          ..width = '100%'
 | 
				
			||||||
          ..height = '100%';
 | 
					          ..height = '100%';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ class CreateAccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
        showLoadingModal(context);
 | 
					        showLoadingModal(context);
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/accounts',
 | 
					          '/id/accounts',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'name': usernameController.text,
 | 
					            'name': usernameController.text,
 | 
				
			||||||
            'nick': nicknameController.text,
 | 
					            'nick': nicknameController.text,
 | 
				
			||||||
@@ -73,7 +73,7 @@ class CreateAccountScreen extends HookConsumerWidget {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      noBackground: false,
 | 
					      isNoBackground: false,
 | 
				
			||||||
      appBar: AppBar(
 | 
					      appBar: AppBar(
 | 
				
			||||||
        leading: const PageBackButton(),
 | 
					        leading: const PageBackButton(),
 | 
				
			||||||
        title: Text('createAccount').tr(),
 | 
					        title: Text('createAccount').tr(),
 | 
				
			||||||
@@ -305,7 +305,7 @@ class _PostCreateModal extends HookConsumerWidget {
 | 
				
			|||||||
            TextButton(
 | 
					            TextButton(
 | 
				
			||||||
              onPressed: () {
 | 
					              onPressed: () {
 | 
				
			||||||
                Navigator.pop(context);
 | 
					                Navigator.pop(context);
 | 
				
			||||||
                context.pushReplacement('/auth/login');
 | 
					                context.pushReplacementNamed('login');
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              child: Text('login'.tr()),
 | 
					              child: Text('login'.tr()),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,7 +55,7 @@ class LoginScreen extends HookConsumerWidget {
 | 
				
			|||||||
    final factorPicked = useState<SnAuthFactor?>(null);
 | 
					    final factorPicked = useState<SnAuthFactor?>(null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      noBackground: false,
 | 
					      isNoBackground: false,
 | 
				
			||||||
      appBar: AppBar(
 | 
					      appBar: AppBar(
 | 
				
			||||||
        leading: const PageBackButton(),
 | 
					        leading: const PageBackButton(),
 | 
				
			||||||
        title: Text('login').tr(),
 | 
					        title: Text('login').tr(),
 | 
				
			||||||
@@ -178,7 +178,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
				
			|||||||
      // Get token if challenge is completed
 | 
					      // Get token if challenge is completed
 | 
				
			||||||
      final client = ref.watch(apiClientProvider);
 | 
					      final client = ref.watch(apiClientProvider);
 | 
				
			||||||
      final tokenResp = await client.post(
 | 
					      final tokenResp = await client.post(
 | 
				
			||||||
        '/auth/token',
 | 
					        '/id/auth/token',
 | 
				
			||||||
        data: {
 | 
					        data: {
 | 
				
			||||||
          'grant_type': 'authorization_code',
 | 
					          'grant_type': 'authorization_code',
 | 
				
			||||||
          'code': code ?? challenge!.id,
 | 
					          'code': code ?? challenge!.id,
 | 
				
			||||||
@@ -215,7 +215,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
				
			|||||||
        if (name != null) {
 | 
					        if (name != null) {
 | 
				
			||||||
          final client = ref.watch(apiClientProvider);
 | 
					          final client = ref.watch(apiClientProvider);
 | 
				
			||||||
          await client.patch(
 | 
					          await client.patch(
 | 
				
			||||||
            '/accounts/me/sessions/current/label',
 | 
					            '/id/accounts/me/sessions/current/label',
 | 
				
			||||||
            data: jsonEncode(name),
 | 
					            data: jsonEncode(name),
 | 
				
			||||||
          );
 | 
					          );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -225,6 +225,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
				
			|||||||
    useEffect(() {
 | 
					    useEffect(() {
 | 
				
			||||||
      if (challenge != null && challenge?.stepRemain == 0) {
 | 
					      if (challenge != null && challenge?.stepRemain == 0) {
 | 
				
			||||||
        Future(() {
 | 
					        Future(() {
 | 
				
			||||||
 | 
					          if (isBusy.value) return;
 | 
				
			||||||
          isBusy.value = true;
 | 
					          isBusy.value = true;
 | 
				
			||||||
          getToken().catchError((err) {
 | 
					          getToken().catchError((err) {
 | 
				
			||||||
            showErrorAlert(err);
 | 
					            showErrorAlert(err);
 | 
				
			||||||
@@ -265,7 +266,7 @@ class _LoginCheckScreen extends HookConsumerWidget {
 | 
				
			|||||||
        // Pass challenge
 | 
					        // Pass challenge
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        final resp = await client.patch(
 | 
					        final resp = await client.patch(
 | 
				
			||||||
          '/auth/challenge/${challenge!.id}',
 | 
					          '/id/auth/challenge/${challenge!.id}',
 | 
				
			||||||
          data: {'factor_id': factor!.id, 'password': pwd},
 | 
					          data: {'factor_id': factor!.id, 'password': pwd},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        final result = SnAuthChallenge.fromJson(resp.data);
 | 
					        final result = SnAuthChallenge.fromJson(resp.data);
 | 
				
			||||||
@@ -412,7 +413,7 @@ class _LoginPickerScreen extends HookConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/auth/challenge/${challenge!.id}/factors/${factorPicked.value!.id}',
 | 
					          '/id/auth/challenge/${challenge!.id}/factors/${factorPicked.value!.id}',
 | 
				
			||||||
          data:
 | 
					          data:
 | 
				
			||||||
              hintController.text.isNotEmpty
 | 
					              hintController.text.isNotEmpty
 | 
				
			||||||
                  ? jsonEncode(hintController.text)
 | 
					                  ? jsonEncode(hintController.text)
 | 
				
			||||||
@@ -555,7 +556,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        await client.post(
 | 
					        await client.post(
 | 
				
			||||||
          '/accounts/recovery/password',
 | 
					          '/id/accounts/recovery/password',
 | 
				
			||||||
          data: {'account': uname, 'captcha_token': captchaTk},
 | 
					          data: {'account': uname, 'captcha_token': captchaTk},
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        showInfoAlert('loginResetPasswordSent'.tr(), 'done'.tr());
 | 
					        showInfoAlert('loginResetPasswordSent'.tr(), 'done'.tr());
 | 
				
			||||||
@@ -573,7 +574,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        final resp = await client.post(
 | 
					        final resp = await client.post(
 | 
				
			||||||
          '/auth/challenge',
 | 
					          '/id/auth/challenge',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'account': uname,
 | 
					            'account': uname,
 | 
				
			||||||
            'device_id': await getUdid(),
 | 
					            'device_id': await getUdid(),
 | 
				
			||||||
@@ -593,7 +594,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
        final result = SnAuthChallenge.fromJson(resp.data);
 | 
					        final result = SnAuthChallenge.fromJson(resp.data);
 | 
				
			||||||
        onChallenge(result);
 | 
					        onChallenge(result);
 | 
				
			||||||
        final factorResp = await client.get(
 | 
					        final factorResp = await client.get(
 | 
				
			||||||
          '/auth/challenge/${result.id}/factors',
 | 
					          '/id/auth/challenge/${result.id}/factors',
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        onFactor(
 | 
					        onFactor(
 | 
				
			||||||
          List<SnAuthFactor>.from(
 | 
					          List<SnAuthFactor>.from(
 | 
				
			||||||
@@ -622,7 +623,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (context.mounted) showLoadingModal(context);
 | 
					        if (context.mounted) showLoadingModal(context);
 | 
				
			||||||
        final resp = await client.post(
 | 
					        final resp = await client.post(
 | 
				
			||||||
          '/auth/login/apple/mobile',
 | 
					          '/id/auth/login/apple/mobile',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'identity_token': credential.identityToken!,
 | 
					            'identity_token': credential.identityToken!,
 | 
				
			||||||
            'authorization_code': credential.authorizationCode,
 | 
					            'authorization_code': credential.authorizationCode,
 | 
				
			||||||
@@ -633,7 +634,7 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
					        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
				
			||||||
        onChallenge(challenge);
 | 
					        onChallenge(challenge);
 | 
				
			||||||
        final factorResp = await client.get(
 | 
					        final factorResp = await client.get(
 | 
				
			||||||
          '/auth/challenge/${challenge.id}/factors',
 | 
					          '/id/auth/challenge/${challenge.id}/factors',
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        onFactor(
 | 
					        onFactor(
 | 
				
			||||||
          List<SnAuthFactor>.from(
 | 
					          List<SnAuthFactor>.from(
 | 
				
			||||||
@@ -658,11 +659,11 @@ class _LoginLookupScreen extends HookConsumerWidget {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      final client = ref.watch(apiClientProvider);
 | 
					      final client = ref.watch(apiClientProvider);
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final resp = await client.get('/auth/challenge/$challengeId');
 | 
					        final resp = await client.get('/id/auth/challenge/$challengeId');
 | 
				
			||||||
        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
					        final challenge = SnAuthChallenge.fromJson(resp.data);
 | 
				
			||||||
        onChallenge(challenge);
 | 
					        onChallenge(challenge);
 | 
				
			||||||
        final factorResp = await client.get(
 | 
					        final factorResp = await client.get(
 | 
				
			||||||
          '/auth/challenge/${challenge.id}/factors',
 | 
					          '/id/auth/challenge/${challenge.id}/factors',
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        onFactor(
 | 
					        onFactor(
 | 
				
			||||||
          List<SnAuthFactor>.from(
 | 
					          List<SnAuthFactor>.from(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -80,7 +80,7 @@ class _OidcScreenState extends ConsumerState<OidcScreen> {
 | 
				
			|||||||
                            : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
 | 
					                            : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  initialUrlRequest: URLRequest(
 | 
					                  initialUrlRequest: URLRequest(
 | 
				
			||||||
                    url: WebUri('$serverUrl/auth/login/${widget.provider}'),
 | 
					                    url: WebUri('$serverUrl/id/auth/login/${widget.provider}'),
 | 
				
			||||||
                    headers: {
 | 
					                    headers: {
 | 
				
			||||||
                      if (token?.token.isNotEmpty ?? false)
 | 
					                      if (token?.token.isNotEmpty ?? false)
 | 
				
			||||||
                        'Authorization': 'AtField ${token!.token}',
 | 
					                        'Authorization': 'AtField ${token!.token}',
 | 
				
			||||||
@@ -205,7 +205,7 @@ class _OidcScreenState extends ConsumerState<OidcScreen> {
 | 
				
			|||||||
                      onPressed: () {
 | 
					                      onPressed: () {
 | 
				
			||||||
                        if (currentUrl != null) {
 | 
					                        if (currentUrl != null) {
 | 
				
			||||||
                          Clipboard.setData(ClipboardData(text: currentUrl!));
 | 
					                          Clipboard.setData(ClipboardData(text: currentUrl!));
 | 
				
			||||||
                          showSnackBar('copyToClipboard');
 | 
					                          showSnackBar('copyToClipboard'.tr());
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,16 @@
 | 
				
			|||||||
 | 
					import 'dart:developer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import 'package:easy_localization/easy_localization.dart';
 | 
					import 'package:easy_localization/easy_localization.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart' hide ConnectionState;
 | 
				
			||||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
					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/pods/call.dart';
 | 
					import 'package:island/pods/call.dart';
 | 
				
			||||||
import 'package:island/services/responsive.dart';
 | 
					 | 
				
			||||||
import 'package:island/widgets/app_scaffold.dart';
 | 
					import 'package:island/widgets/app_scaffold.dart';
 | 
				
			||||||
import 'package:island/widgets/chat/call_button.dart';
 | 
					import 'package:island/widgets/chat/call_button.dart';
 | 
				
			||||||
import 'package:island/widgets/chat/call_overlay.dart';
 | 
					import 'package:island/widgets/chat/call_overlay.dart';
 | 
				
			||||||
import 'package:island/widgets/chat/call_participant_tile.dart';
 | 
					import 'package:island/widgets/chat/call_participant_tile.dart';
 | 
				
			||||||
 | 
					import 'package:island/widgets/alert.dart';
 | 
				
			||||||
import 'package:livekit_client/livekit_client.dart';
 | 
					import 'package:livekit_client/livekit_client.dart';
 | 
				
			||||||
import 'package:material_symbols_icons/symbols.dart';
 | 
					import 'package:material_symbols_icons/symbols.dart';
 | 
				
			||||||
import 'package:styled_widget/styled_widget.dart';
 | 
					import 'package:styled_widget/styled_widget.dart';
 | 
				
			||||||
@@ -21,17 +23,39 @@ class CallScreen extends HookConsumerWidget {
 | 
				
			|||||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
					  Widget build(BuildContext context, WidgetRef ref) {
 | 
				
			||||||
    final ongoingCall = ref.watch(ongoingCallProvider(roomId));
 | 
					    final ongoingCall = ref.watch(ongoingCallProvider(roomId));
 | 
				
			||||||
    final callState = ref.watch(callNotifierProvider);
 | 
					    final callState = ref.watch(callNotifierProvider);
 | 
				
			||||||
    final callNotifier = ref.read(callNotifierProvider.notifier);
 | 
					    final callNotifier = ref.watch(callNotifierProvider.notifier);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    useEffect(() {
 | 
					    useEffect(() {
 | 
				
			||||||
 | 
					      log('[Call] Joining the call...');
 | 
				
			||||||
 | 
					      callNotifier.joinRoom(roomId).catchError((_) {
 | 
				
			||||||
 | 
					        showConfirmAlert(
 | 
				
			||||||
 | 
					          'Seems there already has a call connected, do you want override it?',
 | 
				
			||||||
 | 
					          'Call already connected',
 | 
				
			||||||
 | 
					        ).then((value) {
 | 
				
			||||||
 | 
					          if (value != true) return;
 | 
				
			||||||
 | 
					          log('[Call] Joining the call... with overrides');
 | 
				
			||||||
 | 
					          callNotifier.disconnect();
 | 
				
			||||||
 | 
					          callNotifier.dispose();
 | 
				
			||||||
          callNotifier.joinRoom(roomId);
 | 
					          callNotifier.joinRoom(roomId);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
      return null;
 | 
					      return null;
 | 
				
			||||||
    }, []);
 | 
					    }, []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    final viewMode = useState<String>('grid');
 | 
					    final allAudioOnly = callNotifier.participants.every(
 | 
				
			||||||
 | 
					      (p) =>
 | 
				
			||||||
 | 
					          !(p.hasVideo &&
 | 
				
			||||||
 | 
					              p.remoteParticipant.trackPublications.values.any(
 | 
				
			||||||
 | 
					                (pub) =>
 | 
				
			||||||
 | 
					                    pub.track != null &&
 | 
				
			||||||
 | 
					                    pub.kind == TrackType.VIDEO &&
 | 
				
			||||||
 | 
					                    !pub.muted &&
 | 
				
			||||||
 | 
					                    !pub.isDisposed,
 | 
				
			||||||
 | 
					              )),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return AppScaffold(
 | 
					    return AppScaffold(
 | 
				
			||||||
      noBackground: false,
 | 
					      isNoBackground: false,
 | 
				
			||||||
      appBar: AppBar(
 | 
					      appBar: AppBar(
 | 
				
			||||||
        leading: PageBackButton(),
 | 
					        leading: PageBackButton(),
 | 
				
			||||||
        title: Column(
 | 
					        title: Column(
 | 
				
			||||||
@@ -44,45 +68,55 @@ class CallScreen extends HookConsumerWidget {
 | 
				
			|||||||
            Text(
 | 
					            Text(
 | 
				
			||||||
              callState.isConnected
 | 
					              callState.isConnected
 | 
				
			||||||
                  ? formatDuration(callState.duration)
 | 
					                  ? formatDuration(callState.duration)
 | 
				
			||||||
                  : 'Connecting',
 | 
					                  : (switch (callNotifier.room?.connectionState) {
 | 
				
			||||||
 | 
					                    ConnectionState.connected => 'connected',
 | 
				
			||||||
 | 
					                    ConnectionState.connecting => 'connecting',
 | 
				
			||||||
 | 
					                    ConnectionState.reconnecting => 'reconnecting',
 | 
				
			||||||
 | 
					                    _ => 'disconnected',
 | 
				
			||||||
 | 
					                  }).tr(),
 | 
				
			||||||
              style: const TextStyle(fontSize: 14),
 | 
					              style: const TextStyle(fontSize: 14),
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        actions: [
 | 
					        actions: [
 | 
				
			||||||
          Row(
 | 
					          if (!allAudioOnly)
 | 
				
			||||||
            mainAxisAlignment: MainAxisAlignment.end,
 | 
					            SingleChildScrollView(
 | 
				
			||||||
 | 
					              child: Row(
 | 
				
			||||||
 | 
					                spacing: 4,
 | 
				
			||||||
                children: [
 | 
					                children: [
 | 
				
			||||||
              IconButton(
 | 
					                  for (final live in callNotifier.participants)
 | 
				
			||||||
                icon: Icon(Symbols.grid_view),
 | 
					                    SpeakingRippleAvatar(live: live, size: 30),
 | 
				
			||||||
                tooltip: 'Grid View',
 | 
					                  const Gap(8),
 | 
				
			||||||
                onPressed: () => viewMode.value = 'grid',
 | 
					 | 
				
			||||||
                color:
 | 
					 | 
				
			||||||
                    viewMode.value == 'grid'
 | 
					 | 
				
			||||||
                        ? Theme.of(context).colorScheme.primary
 | 
					 | 
				
			||||||
                        : null,
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
              IconButton(
 | 
					 | 
				
			||||||
                icon: Icon(Symbols.view_agenda),
 | 
					 | 
				
			||||||
                tooltip: 'Stage View',
 | 
					 | 
				
			||||||
                onPressed: () => viewMode.value = 'stage',
 | 
					 | 
				
			||||||
                color:
 | 
					 | 
				
			||||||
                    viewMode.value == 'stage'
 | 
					 | 
				
			||||||
                        ? Theme.of(context).colorScheme.primary
 | 
					 | 
				
			||||||
                        : null,
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
                ],
 | 
					                ],
 | 
				
			||||||
              ),
 | 
					              ),
 | 
				
			||||||
          const Gap(8),
 | 
					            ),
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      body:
 | 
					      body:
 | 
				
			||||||
          callState.error != null
 | 
					          callState.error != null
 | 
				
			||||||
              ? Center(
 | 
					              ? Center(
 | 
				
			||||||
                child: Text(
 | 
					                child: ConstrainedBox(
 | 
				
			||||||
 | 
					                  constraints: const BoxConstraints(maxWidth: 320),
 | 
				
			||||||
 | 
					                  child: Column(
 | 
				
			||||||
 | 
					                    children: [
 | 
				
			||||||
 | 
					                      const Icon(Symbols.error_outline, size: 48),
 | 
				
			||||||
 | 
					                      const Gap(4),
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
                        callState.error!,
 | 
					                        callState.error!,
 | 
				
			||||||
                        textAlign: TextAlign.center,
 | 
					                        textAlign: TextAlign.center,
 | 
				
			||||||
                  style: const TextStyle(color: Colors.red),
 | 
					                        style: const TextStyle(color: Color(0xFF757575)),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      const Gap(8),
 | 
				
			||||||
 | 
					                      TextButton(
 | 
				
			||||||
 | 
					                        onPressed: () {
 | 
				
			||||||
 | 
					                          callNotifier.disconnect();
 | 
				
			||||||
 | 
					                          callNotifier.dispose();
 | 
				
			||||||
 | 
					                          callNotifier.joinRoom(roomId);
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        child: Text('retry').tr(),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
                ),
 | 
					                ),
 | 
				
			||||||
              )
 | 
					              )
 | 
				
			||||||
              : Column(
 | 
					              : Column(
 | 
				
			||||||
@@ -100,17 +134,8 @@ class CallScreen extends HookConsumerWidget {
 | 
				
			|||||||
                            child: Text('No participants in call'),
 | 
					                            child: Text('No participants in call'),
 | 
				
			||||||
                          );
 | 
					                          );
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        final participants = callNotifier.participants;
 | 
					                        final participants = callNotifier.participants;
 | 
				
			||||||
                        final allAudioOnly = participants.every(
 | 
					 | 
				
			||||||
                          (p) =>
 | 
					 | 
				
			||||||
                              !(p.hasVideo &&
 | 
					 | 
				
			||||||
                                  p.remoteParticipant.trackPublications.values
 | 
					 | 
				
			||||||
                                      .any(
 | 
					 | 
				
			||||||
                                        (pub) =>
 | 
					 | 
				
			||||||
                                            pub.track != null &&
 | 
					 | 
				
			||||||
                                            pub.kind == TrackType.VIDEO,
 | 
					 | 
				
			||||||
                                      )),
 | 
					 | 
				
			||||||
                        );
 | 
					 | 
				
			||||||
                        if (allAudioOnly) {
 | 
					                        if (allAudioOnly) {
 | 
				
			||||||
                          // Audio-only: show avatars in a compact row
 | 
					                          // Audio-only: show avatars in a compact row
 | 
				
			||||||
                          return Center(
 | 
					                          return Center(
 | 
				
			||||||
@@ -123,31 +148,16 @@ class CallScreen extends HookConsumerWidget {
 | 
				
			|||||||
                                runSpacing: 8,
 | 
					                                runSpacing: 8,
 | 
				
			||||||
                                children: [
 | 
					                                children: [
 | 
				
			||||||
                                  for (final live in participants)
 | 
					                                  for (final live in participants)
 | 
				
			||||||
                                    Padding(
 | 
					                                    SpeakingRippleAvatar(
 | 
				
			||||||
                                      padding: const EdgeInsets.symmetric(
 | 
					                                      live: live,
 | 
				
			||||||
                                        horizontal: 8,
 | 
					 | 
				
			||||||
                                      ),
 | 
					 | 
				
			||||||
                                      child: SpeakingRippleAvatar(
 | 
					 | 
				
			||||||
                                        isSpeaking: live.isSpeaking,
 | 
					 | 
				
			||||||
                                        audioLevel:
 | 
					 | 
				
			||||||
                                            live.remoteParticipant.audioLevel,
 | 
					 | 
				
			||||||
                                        pictureId:
 | 
					 | 
				
			||||||
                                            live
 | 
					 | 
				
			||||||
                                                .participant
 | 
					 | 
				
			||||||
                                                .profile
 | 
					 | 
				
			||||||
                                                ?.account
 | 
					 | 
				
			||||||
                                                .profile
 | 
					 | 
				
			||||||
                                                .picture
 | 
					 | 
				
			||||||
                                                ?.id,
 | 
					 | 
				
			||||||
                                      size: 72,
 | 
					                                      size: 72,
 | 
				
			||||||
                                      ),
 | 
					                                    ).padding(horizontal: 4),
 | 
				
			||||||
                                    ),
 | 
					 | 
				
			||||||
                                ],
 | 
					                                ],
 | 
				
			||||||
                              ),
 | 
					                              ),
 | 
				
			||||||
                            ),
 | 
					                            ),
 | 
				
			||||||
                          );
 | 
					                          );
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        if (viewMode.value == 'stage') {
 | 
					
 | 
				
			||||||
                        // Stage view: show main speaker(s) large, others in row
 | 
					                        // Stage view: show main speaker(s) large, others in row
 | 
				
			||||||
                        final mainSpeakers =
 | 
					                        final mainSpeakers =
 | 
				
			||||||
                            participants
 | 
					                            participants
 | 
				
			||||||
@@ -166,95 +176,13 @@ class CallScreen extends HookConsumerWidget {
 | 
				
			|||||||
                        if (mainSpeakers.isEmpty && participants.isNotEmpty) {
 | 
					                        if (mainSpeakers.isEmpty && participants.isNotEmpty) {
 | 
				
			||||||
                          mainSpeakers.add(participants.first);
 | 
					                          mainSpeakers.add(participants.first);
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                          final others =
 | 
					 | 
				
			||||||
                              participants
 | 
					 | 
				
			||||||
                                  .where((p) => !mainSpeakers.contains(p))
 | 
					 | 
				
			||||||
                                  .toList();
 | 
					 | 
				
			||||||
                        return Column(
 | 
					                        return Column(
 | 
				
			||||||
                            children: [
 | 
					 | 
				
			||||||
                              Expanded(
 | 
					 | 
				
			||||||
                                child: Row(
 | 
					 | 
				
			||||||
                                  mainAxisAlignment: MainAxisAlignment.center,
 | 
					 | 
				
			||||||
                          children: [
 | 
					                          children: [
 | 
				
			||||||
                            for (final speaker in mainSpeakers)
 | 
					                            for (final speaker in mainSpeakers)
 | 
				
			||||||
                              Expanded(
 | 
					                              Expanded(
 | 
				
			||||||
                                        child:
 | 
					                                child: CallParticipantTile(live: speaker),
 | 
				
			||||||
                                            AspectRatio(
 | 
					 | 
				
			||||||
                                              aspectRatio: 16 / 9,
 | 
					 | 
				
			||||||
                                              child: Card(
 | 
					 | 
				
			||||||
                                                margin: EdgeInsets.zero,
 | 
					 | 
				
			||||||
                                                child: ClipRRect(
 | 
					 | 
				
			||||||
                                                  borderRadius:
 | 
					 | 
				
			||||||
                                                      BorderRadius.circular(8),
 | 
					 | 
				
			||||||
                                                  child: Column(
 | 
					 | 
				
			||||||
                                                    children: [
 | 
					 | 
				
			||||||
                                                      CallParticipantTile(
 | 
					 | 
				
			||||||
                                                        live: speaker,
 | 
					 | 
				
			||||||
                              ),
 | 
					                              ),
 | 
				
			||||||
                          ],
 | 
					                          ],
 | 
				
			||||||
                                                  ),
 | 
					 | 
				
			||||||
                                                ),
 | 
					 | 
				
			||||||
                                              ),
 | 
					 | 
				
			||||||
                                            ).center(),
 | 
					 | 
				
			||||||
                                      ),
 | 
					 | 
				
			||||||
                                  ],
 | 
					 | 
				
			||||||
                                ).padding(horizontal: 12),
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                              if (others.isNotEmpty)
 | 
					 | 
				
			||||||
                                SizedBox(
 | 
					 | 
				
			||||||
                                  height: 100,
 | 
					 | 
				
			||||||
                                  child: ListView(
 | 
					 | 
				
			||||||
                                    scrollDirection: Axis.horizontal,
 | 
					 | 
				
			||||||
                                    children: [
 | 
					 | 
				
			||||||
                                      for (final other in others)
 | 
					 | 
				
			||||||
                                        Padding(
 | 
					 | 
				
			||||||
                                          padding: const EdgeInsets.symmetric(
 | 
					 | 
				
			||||||
                                            horizontal: 8,
 | 
					 | 
				
			||||||
                                          ),
 | 
					 | 
				
			||||||
                                          child: CallParticipantTile(
 | 
					 | 
				
			||||||
                                            live: other,
 | 
					 | 
				
			||||||
                                          ),
 | 
					 | 
				
			||||||
                                        ),
 | 
					 | 
				
			||||||
                                    ],
 | 
					 | 
				
			||||||
                                  ),
 | 
					 | 
				
			||||||
                                ),
 | 
					 | 
				
			||||||
                            ],
 | 
					 | 
				
			||||||
                          );
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        // Default: grid view
 | 
					 | 
				
			||||||
                        return GridView.builder(
 | 
					 | 
				
			||||||
                          padding: const EdgeInsets.symmetric(
 | 
					 | 
				
			||||||
                            horizontal: 12,
 | 
					 | 
				
			||||||
                            vertical: 8,
 | 
					 | 
				
			||||||
                          ),
 | 
					 | 
				
			||||||
                          gridDelegate:
 | 
					 | 
				
			||||||
                              SliverGridDelegateWithFixedCrossAxisCount(
 | 
					 | 
				
			||||||
                                crossAxisCount:
 | 
					 | 
				
			||||||
                                    isWidestScreen(context)
 | 
					 | 
				
			||||||
                                        ? 4
 | 
					 | 
				
			||||||
                                        : isWiderScreen(context)
 | 
					 | 
				
			||||||
                                        ? 3
 | 
					 | 
				
			||||||
                                        : 2,
 | 
					 | 
				
			||||||
                                childAspectRatio: 16 / 9,
 | 
					 | 
				
			||||||
                                crossAxisSpacing: 8,
 | 
					 | 
				
			||||||
                                mainAxisSpacing: 8,
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                          itemCount: participants.length,
 | 
					 | 
				
			||||||
                          itemBuilder: (context, idx) {
 | 
					 | 
				
			||||||
                            final live = participants[idx];
 | 
					 | 
				
			||||||
                            return AspectRatio(
 | 
					 | 
				
			||||||
                              aspectRatio: 16 / 9,
 | 
					 | 
				
			||||||
                              child: Card(
 | 
					 | 
				
			||||||
                                margin: EdgeInsets.zero,
 | 
					 | 
				
			||||||
                                child: ClipRRect(
 | 
					 | 
				
			||||||
                                  borderRadius: BorderRadius.circular(8),
 | 
					 | 
				
			||||||
                                  child: Column(
 | 
					 | 
				
			||||||
                                    children: [CallParticipantTile(live: live)],
 | 
					 | 
				
			||||||
                                  ),
 | 
					 | 
				
			||||||
                                ),
 | 
					 | 
				
			||||||
                              ),
 | 
					 | 
				
			||||||
                            ).center();
 | 
					 | 
				
			||||||
                          },
 | 
					 | 
				
			||||||
                        );
 | 
					                        );
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,6 @@ import 'package:island/services/responsive.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/chat/call_overlay.dart';
 | 
					 | 
				
			||||||
import 'package:island/widgets/content/cloud_files.dart';
 | 
					import 'package:island/widgets/content/cloud_files.dart';
 | 
				
			||||||
import 'package:island/widgets/content/sheet.dart';
 | 
					import 'package:island/widgets/content/sheet.dart';
 | 
				
			||||||
import 'package:island/widgets/realms/selection_dropdown.dart';
 | 
					import 'package:island/widgets/realms/selection_dropdown.dart';
 | 
				
			||||||
@@ -165,7 +164,7 @@ class ChatRoomListTile extends HookConsumerWidget {
 | 
				
			|||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnChatRoom>> chatroomsJoined(Ref ref) async {
 | 
					Future<List<SnChatRoom>> chatroomsJoined(Ref ref) async {
 | 
				
			||||||
  final client = ref.watch(apiClientProvider);
 | 
					  final client = ref.watch(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/chat');
 | 
					  final resp = await client.get('/sphere/chat');
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map((e) => SnChatRoom.fromJson(e))
 | 
					      .map((e) => SnChatRoom.fromJson(e))
 | 
				
			||||||
      .cast<SnChatRoom>()
 | 
					      .cast<SnChatRoom>()
 | 
				
			||||||
@@ -233,7 +232,10 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
      if (result == null) return;
 | 
					      if (result == null) return;
 | 
				
			||||||
      final client = ref.read(apiClientProvider);
 | 
					      final client = ref.read(apiClientProvider);
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        await client.post('/chat/direct', data: {'related_user_id': result.id});
 | 
					        await client.post(
 | 
				
			||||||
 | 
					          '/sphere/chat/direct',
 | 
				
			||||||
 | 
					          data: {'related_user_id': result.id},
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        ref.invalidate(chatroomsJoinedProvider);
 | 
					        ref.invalidate(chatroomsJoinedProvider);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
@@ -295,6 +297,7 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
            ),
 | 
					            ),
 | 
				
			||||||
            onPressed: () {
 | 
					            onPressed: () {
 | 
				
			||||||
              showModalBottomSheet(
 | 
					              showModalBottomSheet(
 | 
				
			||||||
 | 
					                useRootNavigator: true,
 | 
				
			||||||
                isScrollControlled: true,
 | 
					                isScrollControlled: true,
 | 
				
			||||||
                context: context,
 | 
					                context: context,
 | 
				
			||||||
                builder: (context) => const _ChatInvitesSheet(),
 | 
					                builder: (context) => const _ChatInvitesSheet(),
 | 
				
			||||||
@@ -319,7 +322,7 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
                      leading: const Icon(Symbols.add),
 | 
					                      leading: const Icon(Symbols.add),
 | 
				
			||||||
                      onTap: () {
 | 
					                      onTap: () {
 | 
				
			||||||
                        Navigator.pop(context);
 | 
					                        Navigator.pop(context);
 | 
				
			||||||
                        context.push('/chat/new').then((value) {
 | 
					                        context.pushNamed('chatNew').then((value) {
 | 
				
			||||||
                          if (value != null) {
 | 
					                          if (value != null) {
 | 
				
			||||||
                            ref.invalidate(chatroomsJoinedProvider);
 | 
					                            ref.invalidate(chatroomsJoinedProvider);
 | 
				
			||||||
                          }
 | 
					                          }
 | 
				
			||||||
@@ -342,9 +345,7 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
        child: const Icon(Symbols.add),
 | 
					        child: const Icon(Symbols.add),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      floatingActionButtonLocation: TabbedFabLocation(context),
 | 
					      floatingActionButtonLocation: TabbedFabLocation(context),
 | 
				
			||||||
      body: Stack(
 | 
					      body: Column(
 | 
				
			||||||
        children: [
 | 
					 | 
				
			||||||
          Column(
 | 
					 | 
				
			||||||
        children: [
 | 
					        children: [
 | 
				
			||||||
          Consumer(
 | 
					          Consumer(
 | 
				
			||||||
            builder: (context, ref, _) {
 | 
					            builder: (context, ref, _) {
 | 
				
			||||||
@@ -379,8 +380,7 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
                                    selectedTab.value == 0 ||
 | 
					                                    selectedTab.value == 0 ||
 | 
				
			||||||
                                    (selectedTab.value == 1 &&
 | 
					                                    (selectedTab.value == 1 &&
 | 
				
			||||||
                                        item.type == 1) ||
 | 
					                                        item.type == 1) ||
 | 
				
			||||||
                                        (selectedTab.value == 2 &&
 | 
					                                    (selectedTab.value == 2 && item.type != 1),
 | 
				
			||||||
                                            item.type != 1),
 | 
					 | 
				
			||||||
                              )
 | 
					                              )
 | 
				
			||||||
                              .length,
 | 
					                              .length,
 | 
				
			||||||
                      itemBuilder: (context, index) {
 | 
					                      itemBuilder: (context, index) {
 | 
				
			||||||
@@ -400,14 +400,16 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
                          room: item,
 | 
					                          room: item,
 | 
				
			||||||
                          isDirect: item.type == 1,
 | 
					                          isDirect: item.type == 1,
 | 
				
			||||||
                          onTap: () {
 | 
					                          onTap: () {
 | 
				
			||||||
                                context.push('/chat/${item.id}');
 | 
					                            context.pushNamed(
 | 
				
			||||||
 | 
					                              'chatRoom',
 | 
				
			||||||
 | 
					                              pathParameters: {'id': item.id},
 | 
				
			||||||
 | 
					                            );
 | 
				
			||||||
                          },
 | 
					                          },
 | 
				
			||||||
                        );
 | 
					                        );
 | 
				
			||||||
                      },
 | 
					                      },
 | 
				
			||||||
                    ),
 | 
					                    ),
 | 
				
			||||||
                  ),
 | 
					                  ),
 | 
				
			||||||
                  loading:
 | 
					              loading: () => const Center(child: CircularProgressIndicator()),
 | 
				
			||||||
                      () => const Center(child: CircularProgressIndicator()),
 | 
					 | 
				
			||||||
              error:
 | 
					              error:
 | 
				
			||||||
                  (error, stack) => ResponseErrorWidget(
 | 
					                  (error, stack) => ResponseErrorWidget(
 | 
				
			||||||
                    error: error,
 | 
					                    error: error,
 | 
				
			||||||
@@ -419,14 +421,6 @@ class ChatListScreen extends HookConsumerWidget {
 | 
				
			|||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
          Positioned(
 | 
					 | 
				
			||||||
            left: 0,
 | 
					 | 
				
			||||||
            right: 0,
 | 
					 | 
				
			||||||
            bottom: getTabbedPadding(context).bottom + 8,
 | 
					 | 
				
			||||||
            child: const CallOverlayBar().padding(horizontal: 16, vertical: 12),
 | 
					 | 
				
			||||||
          ),
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
      ),
 | 
					 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -436,7 +430,7 @@ Future<SnChatRoom?> chatroom(Ref ref, String? identifier) async {
 | 
				
			|||||||
  if (identifier == null) return null;
 | 
					  if (identifier == null) return null;
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    final client = ref.watch(apiClientProvider);
 | 
					    final client = ref.watch(apiClientProvider);
 | 
				
			||||||
    final resp = await client.get('/chat/$identifier');
 | 
					    final resp = await client.get('/sphere/chat/$identifier');
 | 
				
			||||||
    return SnChatRoom.fromJson(resp.data);
 | 
					    return SnChatRoom.fromJson(resp.data);
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
					    if (err is DioException && err.response?.statusCode == 404) {
 | 
				
			||||||
@@ -451,7 +445,7 @@ Future<SnChatMember?> chatroomIdentity(Ref ref, String? identifier) async {
 | 
				
			|||||||
  if (identifier == null) return null;
 | 
					  if (identifier == null) return null;
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    final client = ref.watch(apiClientProvider);
 | 
					    final client = ref.watch(apiClientProvider);
 | 
				
			||||||
    final resp = await client.get('/chat/$identifier/members/me');
 | 
					    final resp = await client.get('/sphere/chat/$identifier/members/me');
 | 
				
			||||||
    return SnChatMember.fromJson(resp.data);
 | 
					    return SnChatMember.fromJson(resp.data);
 | 
				
			||||||
  } catch (err) {
 | 
					  } catch (err) {
 | 
				
			||||||
    if (err is DioException && err.response?.statusCode == 404) {
 | 
					    if (err is DioException && err.response?.statusCode == 404) {
 | 
				
			||||||
@@ -575,7 +569,7 @@ class EditChatScreen extends HookConsumerWidget {
 | 
				
			|||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.watch(apiClientProvider);
 | 
					        final client = ref.watch(apiClientProvider);
 | 
				
			||||||
        final resp = await client.request(
 | 
					        final resp = await client.request(
 | 
				
			||||||
          id == null ? '/chat' : '/chat/$id',
 | 
					          id == null ? '/sphere/chat' : '/sphere/chat/$id',
 | 
				
			||||||
          data: {
 | 
					          data: {
 | 
				
			||||||
            'name': nameController.text,
 | 
					            'name': nameController.text,
 | 
				
			||||||
            'description': descriptionController.text,
 | 
					            'description': descriptionController.text,
 | 
				
			||||||
@@ -602,7 +596,8 @@ class EditChatScreen extends HookConsumerWidget {
 | 
				
			|||||||
        title: Text(id == null ? 'createChatRoom' : 'editChatRoom').tr(),
 | 
					        title: Text(id == null ? 'createChatRoom' : 'editChatRoom').tr(),
 | 
				
			||||||
        leading: const PageBackButton(),
 | 
					        leading: const PageBackButton(),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      body: Column(
 | 
					      body: SingleChildScrollView(
 | 
				
			||||||
 | 
					        child: Column(
 | 
				
			||||||
          children: [
 | 
					          children: [
 | 
				
			||||||
            RealmSelectionDropdown(
 | 
					            RealmSelectionDropdown(
 | 
				
			||||||
              value: currentRealm.value,
 | 
					              value: currentRealm.value,
 | 
				
			||||||
@@ -724,6 +719,7 @@ class EditChatScreen extends HookConsumerWidget {
 | 
				
			|||||||
            ),
 | 
					            ),
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -731,7 +727,7 @@ class EditChatScreen extends HookConsumerWidget {
 | 
				
			|||||||
@riverpod
 | 
					@riverpod
 | 
				
			||||||
Future<List<SnChatMember>> chatroomInvites(Ref ref) async {
 | 
					Future<List<SnChatMember>> chatroomInvites(Ref ref) async {
 | 
				
			||||||
  final client = ref.watch(apiClientProvider);
 | 
					  final client = ref.watch(apiClientProvider);
 | 
				
			||||||
  final resp = await client.get('/chat/invites');
 | 
					  final resp = await client.get('/sphere/chat/invites');
 | 
				
			||||||
  return resp.data
 | 
					  return resp.data
 | 
				
			||||||
      .map((e) => SnChatMember.fromJson(e))
 | 
					      .map((e) => SnChatMember.fromJson(e))
 | 
				
			||||||
      .cast<SnChatMember>()
 | 
					      .cast<SnChatMember>()
 | 
				
			||||||
@@ -748,7 +744,7 @@ class _ChatInvitesSheet extends HookConsumerWidget {
 | 
				
			|||||||
    Future<void> acceptInvite(SnChatMember invite) async {
 | 
					    Future<void> acceptInvite(SnChatMember invite) async {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post('/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(chatroomsJoinedProvider);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
@@ -759,7 +755,9 @@ class _ChatInvitesSheet extends HookConsumerWidget {
 | 
				
			|||||||
    Future<void> declineInvite(SnChatMember invite) async {
 | 
					    Future<void> declineInvite(SnChatMember invite) async {
 | 
				
			||||||
      try {
 | 
					      try {
 | 
				
			||||||
        final client = ref.read(apiClientProvider);
 | 
					        final client = ref.read(apiClientProvider);
 | 
				
			||||||
        await client.post('/chat/invites/${invite.chatRoom!.id}/decline');
 | 
					        await client.post(
 | 
				
			||||||
 | 
					          '/sphere/chat/invites/${invite.chatRoom!.id}/decline',
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
        ref.invalidate(chatroomInvitesProvider);
 | 
					        ref.invalidate(chatroomInvitesProvider);
 | 
				
			||||||
      } catch (err) {
 | 
					      } catch (err) {
 | 
				
			||||||
        showErrorAlert(err);
 | 
					        showErrorAlert(err);
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user