import 'package:app/service/ServerDetails.dart';
import 'package:app/service/web_service.dart';
import 'package:better_player/better_player.dart';
// import 'package:chewie/chewie.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:get/get.dart';
import 'package:preload_page_view/preload_page_view.dart';
// import 'package:video_player/video_player.dart';
import 'package:wakelock/wakelock.dart';
class FunBoxScreen extends StatefulWidget {
const FunBoxScreen({Key key}) : super(key: key);
@override
State createState() => _FunBoxScreenState();
}
class _FunBoxScreenState extends State {
int _currentPage = 0;
ScrollController _scrollController = ScrollController();
int currentIndex = 0;
bool loading = true;
bool tempLoading = true;
void updateCurrentIndex() {
_currentPage + 1;
}
@override
void initState() {
getFunBoxData();
Wakelock.enable();
super.initState();
setState(() {});
}
final PageController controller = PageController(
initialPage: 0,
);
List listItem = [];
Future getFunBoxData({bool isRefresh = false}) async {
loading = true;
List getList = await Webservice.getFunBoxData(_currentPage, 10);
if (getList.isEmpty) {
Fluttertoast.showToast(msg: 'no more data');
} else {
_currentPage = _currentPage + 1;
for (int i = 0; i < getList.length; i++) {
listItem.add(getList[i]);
}
setState(() {});
}
await Future.delayed(Duration(seconds: 2));
loading = false;
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: listItem.isEmpty
? SizedBox()
: currentIndex == listItem.length
? Padding(
padding: const EdgeInsets.only(bottom: 10),
child: ElevatedButton(
style: ButtonStyle(
backgroundColor:
MaterialStateProperty.all(Colors.red),
shape: MaterialStateProperty.all(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(18.0),
side: BorderSide(color: Colors.black)),
),
),
onPressed: () {
getFunBoxData();
setState(() {});
},
child: Text(
"Load More",
style: TextStyle(
fontSize: 20.sp, fontWeight: FontWeight.bold),
),
),
)
: SizedBox(),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
body: listItem.isEmpty
? Center(child: CircularProgressIndicator())
: PreloadPageView.builder(
onPageChanged: (value) {
currentIndex = value + 1;
setState(() {});
},
controller: PreloadPageController(initialPage: 0),
scrollDirection: Axis.vertical,
itemCount: listItem.length,
preloadPagesCount: 5,
itemBuilder: (context, index) {
String url = ServerDetails.getVideo + listItem[index]["media"];
if (listItem[index]["type"] == "image") {
return imageScreen(listItem, index);
} else {
return VideoScreen(url: url);
}
},
),
);
}
Widget imageScreen(List listItem, index) {
return Container(
color: Colors.black,
height: double.maxFinite,
child: Image.network(
ServerDetails.getImages + listItem[index]["media"],
),
);
}
@override
void dispose() {
Wakelock.disable();
super.dispose();
}
}
class VideoScreen extends StatefulWidget {
final String url;
const VideoScreen({Key key, this.url}) : super(key: key);
@override
_VideoScreenState createState() => _VideoScreenState();
}
class _VideoScreenState extends State {
BetterPlayerController _betterPlayerController;
@override
void initState() {
super.initState();
BetterPlayerControlsConfiguration configuration =
BetterPlayerControlsConfiguration(
showControls: true,
enableFullscreen: false,
enableProgressBar: false,
enableSkips: false,
enableAudioTracks: false,
enablePlayPause: false,
enableRetry: false,
enableMute: false,
enableOverflowMenu: false,
enableProgressText: false,
enablePip: false);
BetterPlayerConfiguration betterPlayerConfiguration =
BetterPlayerConfiguration(
fullScreenByDefault: false,
deviceOrientationsOnFullScreen: [DeviceOrientation.portraitUp],
deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],
autoPlay: true,
aspectRatio: 9 / 16,
fit: BoxFit.contain,
controlsConfiguration: configuration,
);
var dataSource =
BetterPlayerDataSource(BetterPlayerDataSourceType.network, widget.url);
_betterPlayerController = BetterPlayerController(betterPlayerConfiguration);
_betterPlayerController.setupDataSource(dataSource);
}
@override
void dispose() {
_betterPlayerController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.black,
height: Get.height,
width: Get.width,
child: BetterPlayer(controller: _betterPlayerController),
);
}
}