[READ ONLY MIRROR] Open Source TikTok alternative built on AT Protocol github.com/sprksocial/client
flutter atproto video dart
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

style: remove grid logos

+6 -40
+6 -36
lib/src/features/profile/ui/widgets/profile_grid_widget.dart
··· 2 2 import 'package:fluentui_system_icons/fluentui_system_icons.dart'; 3 3 import 'package:flutter/material.dart'; 4 4 import 'package:flutter_riverpod/flutter_riverpod.dart'; 5 - import 'package:flutter_svg/flutter_svg.dart'; 6 5 import 'package:skeletonizer/skeletonizer.dart'; 7 6 import 'package:spark/src/core/design_system/components/molecules/post_tile.dart'; 8 7 import 'package:spark/src/core/network/atproto/data/models/feed_models.dart'; ··· 76 75 delegate: SliverChildBuilderDelegate((context, index) { 77 76 final postUri = filteredUris[index]; 78 77 final postView = state.postViews[postUri]; 79 - final postSource = state.postSources[postUri]; 80 78 81 79 if (postView == null) { 82 80 return const SizedBox.shrink(); ··· 84 82 85 83 return ProfileGridTile( 86 84 postView: postView, 87 - postSource: postSource, 88 85 onTap: () => onPostTap(context, ref, postUri), 89 86 ); 90 87 }, childCount: filteredUris.length), ··· 153 150 required this.postView, 154 151 required this.onTap, 155 152 super.key, 156 - this.postSource, 157 153 }); 158 154 final PostView postView; 159 - final String? postSource; 160 155 final VoidCallback onTap; 161 156 162 157 /// Check for adult content labels synchronously without network calls ··· 189 184 ); 190 185 } 191 186 192 - return Stack( 193 - fit: StackFit.expand, 194 - children: [ 195 - PostTile( 196 - thumbnailUrl: thumbnailUrl, 197 - likes: likeCount, 198 - seen: false, 199 - nsfwBlur: shouldBlur, 200 - onTap: onTap, 201 - ), 202 - if (postSource != null) 203 - Positioned( 204 - top: 8, 205 - right: 8, 206 - child: Container( 207 - height: 20, 208 - width: 20, 209 - padding: const EdgeInsets.all(4), 210 - decoration: BoxDecoration( 211 - color: Colors.black.withAlpha(150), 212 - borderRadius: BorderRadius.circular(15), 213 - ), 214 - child: SvgPicture.asset( 215 - postSource == 'bsky' ? 'images/bsky.svg' : 'images/sprk.svg', 216 - width: 12, 217 - height: 12, 218 - package: 'assets', 219 - ), 220 - ), 221 - ), 222 - ], 187 + return PostTile( 188 + thumbnailUrl: thumbnailUrl, 189 + likes: likeCount, 190 + seen: false, 191 + nsfwBlur: shouldBlur, 192 + onTap: onTap, 223 193 ); 224 194 } 225 195 }
-2
lib/src/features/profile/ui/widgets/profile_likes_tab.dart
··· 116 116 delegate: SliverChildBuilderDelegate((context, index) { 117 117 final postUri = filteredUris[index]; 118 118 final postView = state.postViews[postUri]; 119 - final postSource = state.postSources[postUri]; 120 119 121 120 if (postView == null) { 122 121 return const SizedBox.shrink(); ··· 124 123 125 124 return ProfileGridTile( 126 125 postView: postView, 127 - postSource: postSource, 128 126 onTap: () => onPostTap(context, ref, postUri), 129 127 ); 130 128 }, childCount: filteredUris.length),
-2
lib/src/features/profile/ui/widgets/profile_reposts_tab.dart
··· 116 116 delegate: SliverChildBuilderDelegate((context, index) { 117 117 final postUri = filteredUris[index]; 118 118 final postView = state.postViews[postUri]; 119 - final postSource = state.postSources[postUri]; 120 119 121 120 if (postView == null) { 122 121 return const SizedBox.shrink(); ··· 124 123 125 124 return ProfileGridTile( 126 125 postView: postView, 127 - postSource: postSource, 128 126 onTap: () => onPostTap(context, ref, postUri), 129 127 ); 130 128 }, childCount: filteredUris.length),