[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.

fix: share sheet profiles scroll to edge

+40 -44
+1 -1
lib/src/core/design_system/components/atoms/buttons/long_button.dart
··· 37 37 borderRadius: BorderRadius.circular(8), 38 38 child: Container( 39 39 // height: 40, 40 - padding: const EdgeInsets.symmetric(horizontal: 11), 40 + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 11), 41 41 decoration: BoxDecoration( 42 42 color: isPrimary 43 43 ? AppColors.primary600
+39 -43
lib/src/features/feed/ui/widgets/action_buttons/share_panel.dart
··· 138 138 ), 139 139 Divider(color: dividerColor, height: 30), 140 140 Padding( 141 - padding: const EdgeInsets.fromLTRB(20, 0, 20, 20), 142 - child: Column( 143 - crossAxisAlignment: CrossAxisAlignment.start, 144 - children: [ 145 - convosAsync.when( 146 - data: (data) { 147 - final items = data.conversations; 148 - if (items.isEmpty) { 149 - return Padding( 150 - padding: const EdgeInsets.symmetric(vertical: 8), 151 - child: Text( 152 - 'No conversations yet', 153 - style: TextStyle(color: textColor.withAlpha(153)), 154 - ), 155 - ); 156 - } 157 - 158 - return SizedBox( 159 - height: 112, 160 - child: ListView.separated( 161 - scrollDirection: Axis.horizontal, 162 - itemCount: items.length, 163 - separatorBuilder: (context, index) => 164 - const SizedBox(width: 12), 165 - itemBuilder: (_, index) { 166 - final (profile, convo) = items[index]; 167 - return _ConvoProfileChip( 168 - displayName: 169 - profile.displayName ?? profile.handle, 170 - avatarUrl: profile.avatar?.toString(), 171 - selected: _selectedConvoId == convo.id, 172 - onTap: () => _toggleSelection(convo.id), 173 - ); 174 - }, 175 - ), 176 - ); 177 - }, 178 - loading: () => const _ConvoProfilesSkeleton(), 179 - error: (e, st) => Padding( 180 - padding: const EdgeInsets.symmetric(vertical: 8), 141 + padding: const EdgeInsets.only(bottom: 10), 142 + child: convosAsync.when( 143 + data: (data) { 144 + final items = data.conversations; 145 + if (items.isEmpty) { 146 + return Padding( 147 + padding: const EdgeInsets.fromLTRB(20, 8, 20, 0), 181 148 child: Text( 182 - 'Failed to load conversations', 183 - style: TextStyle(color: theme.colorScheme.error), 149 + 'No conversations yet', 150 + style: TextStyle(color: textColor.withAlpha(153)), 184 151 ), 152 + ); 153 + } 154 + 155 + return SizedBox( 156 + height: 112, 157 + child: ListView.separated( 158 + padding: const EdgeInsets.symmetric(horizontal: 10), 159 + scrollDirection: Axis.horizontal, 160 + itemCount: items.length, 161 + separatorBuilder: (context, index) => 162 + const SizedBox(width: 5), 163 + itemBuilder: (_, index) { 164 + final (profile, convo) = items[index]; 165 + return _ConvoProfileChip( 166 + displayName: profile.displayName ?? profile.handle, 167 + avatarUrl: profile.avatar?.toString(), 168 + selected: _selectedConvoId == convo.id, 169 + onTap: () => _toggleSelection(convo.id), 170 + ); 171 + }, 185 172 ), 173 + ); 174 + }, 175 + loading: () => const _ConvoProfilesSkeleton(), 176 + error: (e, st) => Padding( 177 + padding: const EdgeInsets.fromLTRB(20, 8, 20, 0), 178 + child: Text( 179 + 'Failed to load conversations', 180 + style: TextStyle(color: theme.colorScheme.error), 186 181 ), 187 - ], 182 + ), 188 183 ), 189 184 ), 190 185 Padding( ··· 395 390 height: 112, 396 391 child: Skeletonizer( 397 392 child: ListView.separated( 393 + padding: const EdgeInsets.symmetric(horizontal: 20), 398 394 scrollDirection: Axis.horizontal, 399 395 itemCount: 5, 400 396 separatorBuilder: (context, index) => const SizedBox(width: 12),