[READ ONLY MIRROR] Open Source TikTok alternative built on AT Protocol github.com/sprksocial/client
flutter atproto video dart
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798import 'package:material_ui/material_ui.dart';import 'package:spark/src/core/design_system/components/atoms/icons.dart';import 'package:spark/src/core/design_system/tokens/colors.dart';import 'package:video_player/video_player.dart';
class VideoContent extends StatefulWidget { const VideoContent({ required this.borderRadius, required this.videoUrl, super.key, }); final BorderRadius borderRadius; final String videoUrl;
@override State<VideoContent> createState() => _VideoContentState();}
class _VideoContentState extends State<VideoContent> { VideoPlayerController? videoController;
@override void initState() { super.initState(); _initializeVideoPlayer(); }
void _initializeVideoPlayer() { videoController = VideoPlayerController.networkUrl(Uri.parse(widget.videoUrl)) ..initialize().then((_) { setState(() {}); }); }
@override void dispose() { videoController?.dispose(); super.dispose(); }
@override Widget build(BuildContext context) { return GestureDetector( onTap: () { if (videoController != null && videoController!.value.isInitialized) { videoController!.value.isPlaying ? videoController!.pause() : videoController!.play(); } },
child: Container( width: double.infinity, height: 200, decoration: BoxDecoration( borderRadius: widget.borderRadius, border: Border.all( color: Theme.of(context).colorScheme.onSurface, width: 0.5, ), color: Colors.black, ), clipBehavior: Clip.antiAlias, child: Stack( alignment: Alignment.center, children: [ if (videoController != null && videoController!.value.isInitialized) AspectRatio( aspectRatio: videoController!.value.aspectRatio, child: VideoPlayer(videoController!), ),
if (!videoController!.value.isInitialized) const CircularProgressIndicator(color: AppColors.white),
if (videoController!.value.isInitialized && !videoController!.value.isPlaying) Container( width: 60, height: 60, decoration: BoxDecoration( color: Colors.black.withValues(alpha: 128), shape: BoxShape.circle, ), child: const AppIcon( AppIconData.play, size: 24, color: Colors.white, ), ), ], ), ), ); }}