import 'package:better_player/better_player.dart'; import 'package:didvan/models/view/app_bar_data.dart'; import 'package:didvan/services/media/media.dart'; import 'package:didvan/views/home/studio/studio_details/studio_details_state.dart'; import 'package:didvan/views/home/studio/studio_details/widgets/studio_details_widget.dart'; import 'package:didvan/views/home/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'; 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 BetterPlayerController _betterPlayerController; @override void initState() { final state = context.read(); state.args = widget.pageData['args']; Future.delayed( Duration.zero, () => state.getStudioDetails(widget.pageData['id']), ); 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) { BetterPlayerDataSource betterPlayerDataSource = BetterPlayerDataSource( BetterPlayerDataSourceType.network, state.studio.link, ); _betterPlayerController = BetterPlayerController( BetterPlayerConfiguration( aspectRatio: 16 / 9, showPlaceholderUntilPlay: true, controlsConfiguration: BetterPlayerControlsConfiguration( enablePlaybackSpeed: false, enableSubtitles: false, enableAudioTracks: false, progressBarPlayedColor: Theme.of(context).colorScheme.secondary, progressBarHandleColor: Theme.of(context).colorScheme.secondary, ), fit: BoxFit.contain, fullScreenAspectRatio: 16 / 9, ), betterPlayerDataSource: betterPlayerDataSource, ); _currentlyPlayingId = state.studio.id; } return WillPopScope( onWillPop: () async { if (MediaService.currentPodcast != null) { state.studio = MediaService.currentPodcast!; } 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( physics: const NeverScrollableScrollPhysics(), child: SizedBox( height: d.size.height - d.padding.top - 56, child: Column( children: [ BetterPlayer(controller: _betterPlayerController), Expanded( child: StudioDetailsWidget( onMarkChanged: (id, value) => widget .pageData['onMarkChanged'](id, value, true), ), ), ], ), ), ), ), ), ); }, ), ); } // @override // void dispose() { // _betterPlayerController.dispose(); // super.dispose(); // } }