问题描述
我有一个流畅的应用程序,可以在线和离线观看视频,但是问题是,在在线观看视频时,我必须保存其上次暂停状态,并在用户观看后以“继续观看”的方式向用户显示再次打开了该应用程序。
简而言之,如果用户退出应用程序,则在观看视频时,如果再次进入应用程序,则应再次显示最近播放的视频以及他/她观看该视频的时间。
我在用扑扑的包装。
下面是我的代码。有人可以帮我吗?
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 (将#修改为@)