再次打开应用程序后,如何使视频在flutter应用程序中播放以从最后一站播放?

问题描述

我有一个流畅的应用程序,可以在线和离线观看视频,但是问题是,在在线观看视频时,我必须保存其上次暂停状态,并在用户观看后以“继续观看”的方式向用户显示再次打开了该应用程序。

简而言之,如果用户退出应用程序,则在观看视频时,如果再次进入应用程序,则应再次显示最近播放的视频以及他/她观看该视频的时间。

我在用扑扑的包装。

下面是我的代码。有人可以帮我吗?

import 'dart:convert';
import 'dart:io';
import 'package:Flutter/services.dart';
import 'package:nexthour/apidata/apidata.dart';
import 'package:nexthour/custom_player/chewie.dart';
import 'package:Flutter/material.dart';
import 'package:nexthour/ui/multi_screen_page.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:video_player/video_player.dart';
import 'package:wakelock/wakelock.dart';
import 'package:http/http.dart' as http;
import '../global.dart';

class MyCustomPlayer extends StatefulWidget 
{
   MyCustomPlayer({this.title,this.url,this.downloadStatus});

   final String title;
   final String url;
   final int downloadStatus;

   @override
   State<StatefulWidget> createState() 
   {
       return _MyCustomPlayerState();
   }
}

class _MyCustomPlayerState extends State<MyCustomPlayer> with WidgetsBindingObserver 
{
   TargetPlatform _platform;
   VideoPlayerController _videoPlayerController1;
   VideoPlayerController _videoPlayerController2;
   ChewieController _chewieController;
   DateTime currentBackPresstime;


   void stopScreenLock() async
   {
       Wakelock.enable();
   }

   saveNewToken(token) async 
   {
       prefs = await SharedPreferences.getInstance();
       prefs.setString('token',"$token");
   }

   getNewToken() async 
   {
       prefs = await SharedPreferences.getInstance();
       prefs.getString('token');
       nToken = prefs.getString('token');
   }

   updateScreens(screen,count) async 
   {
       final updateScreensResponse = await http.post(APIData.updateScreensApi,body: 
       {
           "macaddress": '$ip',"screen": '$screen',"count": '$count',},headers: 
           {
               // ignore: deprecated_member_use
               HttpHeaders.AUTHORIZATION: nToken == null ? fullData : nToken
           });
       print(updateScreensResponse.statusCode);
       print(fullData);
       print(updateScreensResponse.body);
       if (updateScreensResponse.statusCode == 200) 
       {
           print(updateScreensResponse.body);
       }
   }   

   //  Handle back press
   Future<bool> onWillPopS() 
   {
       print("Back pressed");
       if(userPaymentType != "Free")
       {
           screenlogout();
       }
       SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
       Navigator.pop(context);
       return Future.value(true);
   }

   screenlogout() async 
   {
       Wakelock.disable();
       final screenlogoutResponse = await http.post( APIData.screenlogoutApi,body: 
       {
           "screen": '$myActiveScreen',"count": '${fileContent['screenCount']}',headers: 
       {
           HttpHeaders.authorizationHeader: nToken == null ? fullData : nToken
       });
       print(screenlogoutResponse.statusCode);
       print(screenlogoutResponse.body);

       final accesstoken = await http.post(APIData.tokenApi,body: 
       {
           "email": fileContent['user'],"password": fileContent['pass'],});


       if(accesstoken.statusCode == 200)
       {
           print("Logged In");
           var user = json.decode(accesstoken.body);
           var newToken = "Bearer ${user['access_token']}";
           saveNewToken(newToken);
           getNewToken();
       }
   }

   Future<void> didChangeAppLifecycleState(AppLifecycleState state) async 
   {
       switch(state)
       {
           case AppLifecycleState.inactive:
               _chewieController.pause();
               debugPrint("Inactive");
               break;
           case AppLifecycleState.resumed:
               _chewieController.pause();
               if(userPaymentType != "Free")
               {
                   updateScreens(myActiveScreen,fileContent["screenCount"]);
               }
               break;
           case AppLifecycleState.paused:
               _chewieController.pause();
               if(userPaymentType != "Free")
               {
                   screenlogout();
               }
               break;
           case AppLifecycleState.detached:
               break;
       }
   }

   @override
   void initState()
   {
       super.initState();
       this.stopScreenLock();
       setState(()
       {
           playerTitle = widget.title;
           SystemChrome.setEnabledsystemUIOverlays([]);
           SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]);

       });

       WidgetsBinding.instance.addobserver(this);

       _videoPlayerController1 = VideoPlayerController.network(widget.url);
       _videoPlayerController2 = VideoPlayerController.network(widget.url);
       
       _chewieController = ChewieController
       (
           videoPlayerController: _videoPlayerController1,aspectRatio: 3/2,autoplay: true,looping: true,// deviceOrientationsAfterFullScreen:,materialProgressColors: ChewieProgressColors
           (
               playedColor: Colors.red,handleColor: Colors.red,backgroundColor: Colors.white.withOpacity(0.6),bufferedColor: Colors.white,),placeholder: Container
           (
               color: Colors.black,// autoInitialize: true,);

       var r = _videoPlayerController1.value.aspectRatio;
       print("neeraj $r");
       String os = Platform.operatingSystem;
       
       if(os == 'android')
       {
           setState(()
           {
               _platform = TargetPlatform.android;
           });
       }
       else
       {
           setState(()
           {
               _platform = TargetPlatform.iOS;
           });
       }

   }

   @override
   void dispose() 
   {
       _videoPlayerController1.dispose();
       _videoPlayerController2.dispose();
       _chewieController.dispose();
       super.dispose();
   }

   @override
   Widget build(BuildContext context)
   {
       print("inside m player.dart");
       return WillPopScope
       (
           child: Scaffold
           (
               body: SafeArea
               (
                   top: true,child: Column
                   (
                       children: <Widget>
                       [
                           Expanded
                           (
                               child: Center
                               (
                                   child: Chewie
                                   (
                                       controller: _chewieController,title: widget.title,downloadStatus: widget.downloadStatus,],onWillPop: onWillPopS
       );
   }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)