// ignore_for_file: use_build_context_synchronously, deprecated_member_use import 'package:chewie/chewie.dart'; import 'package:didvan/config/theme_data.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/views/podcasts/studio_details/studio_details_state.dart'; import 'package:didvan/views/podcasts/studio_details/widgets/studio_details_widget.dart'; import 'package:didvan/views/widgets/bookmark_button.dart'; import 'package:didvan/views/widgets/didvan/app_bar.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:didvan/routes/routes.dart'; import 'package:video_player/video_player.dart'; class StudioDetails extends StatefulWidget { final Map pageData; const StudioDetails({Key? key, required this.pageData}) : super(key: key); @override State createState() => _StudioDetailsState(); } class _StudioDetailsState extends State { int _currentlyPlayingId = 0; late VideoPlayerController _videoPlayerController; late final ChewieController _chewieController = ChewieController( videoPlayerController: _videoPlayerController, autoPlay: true, looping: true, aspectRatio: 16 / 9, materialProgressColors: ChewieProgressColors( playedColor: Theme.of(context).colorScheme.title, handleColor: Theme.of(context).colorScheme.title)); @override void initState() { final state = context.read(); state.args = widget.pageData['args']; Future.delayed( Duration.zero, () => state.getStudioDetails(widget.pageData['id']), ); if (widget.pageData['goToComment'] != null) { var openComments = widget.pageData['goToComment']; if (openComments) { Future.delayed( const Duration(seconds: 1), () => Navigator.of(context).pushNamed( Routes.mentions, arguments: { 'id': state.studio.id, 'type': 'studio', 'title': state.studio.title, }, ), ); } } super.initState(); } @override Widget build(BuildContext context) { final d = MediaQuery.of(context); return Consumer( builder: (context, state, child) => StateHandler( state: state, onRetry: () { try { state.getStudioDetails(state.studio.id); } catch (e) { state.getStudioDetails(widget.pageData['id']); } }, builder: (context, state) { if (_currentlyPlayingId != state.studio.id) { _handleVideoPlayback(state); } return WillPopScope( onWillPop: () async { if (MediaService.currentPodcast != null) { state.studio = MediaService.currentPodcast!; } state.handleTracking(id: state.studio.id); return true; }, child: SafeArea( child: Scaffold( backgroundColor: Theme.of(context).colorScheme.surface, appBar: PreferredSize( preferredSize: const Size.fromHeight(56), child: DidvanAppBar( appBarData: AppBarData( trailing: BookmarkButton( itemId: state.studio.id, type: 'video', value: state.studio.marked, onMarkChanged: (value) { widget.pageData['onMarkChanged']( state.studio.id, value); }, gestureSize: 48, ), isSmall: true, title: state.studio.title, ), ), ), body: SingleChildScrollView( child: SizedBox( height: d.size.height - d.padding.top - 56, child: Column( children: [ AspectRatio( aspectRatio: 16 / 9, child: Chewie( controller: _chewieController, ), ), Expanded( child: StudioDetailsWidget( onMarkChanged: (id, value) => widget .pageData['onMarkChanged'](id, value, true), ), ), ], ), ), ), ), ), ); }, ), ); } Future _handleVideoPlayback(state) async { _videoPlayerController = VideoPlayerController.network( state.studio.link, )..initialize().then((value) async {}); _currentlyPlayingId = state.studio.id; } @override void dispose() { _videoPlayerController.pause(); _videoPlayerController.dispose(); _chewieController.dispose(); super.dispose(); } }