import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:news/utils/constant.dart'; import 'package:news/utils/uiUtils.dart'; import 'package:news/utils/internetConnectivity.dart'; import 'package:unity_ads_plugin/unity_ads_plugin.dart'; import 'package:news/data/models/NewsModel.dart'; import 'package:news/ui/screens/NewsDetail/Widgets/InterstitialAds/googleInterstitialAds.dart'; import 'package:news/ui/screens/NewsDetail/Widgets/InterstitialAds/unityInterstitialAds.dart'; import 'package:news/ui/screens/NewsDetail/Widgets/RerwardAds/googleRewardAds.dart'; import 'package:news/ui/screens/NewsDetail/Widgets/RerwardAds/unityRewardAds.dart'; import 'package:news/ui/screens/NewsDetail/Widgets/NewsSubDetailsScreen.dart'; import 'package:news/cubits/appSystemSettingCubit.dart'; import 'package:news/data/models/BreakingNewsModel.dart'; class NewsDetailScreen extends StatefulWidget { final NewsModel? model; final List? newsList; final BreakingNewsModel? breakModel; final List? breakNewsList; final bool isFromBreak; final bool fromShowMore; final String? slug; const NewsDetailScreen({super.key, this.model, this.breakModel, this.breakNewsList, this.newsList, this.slug, required this.isFromBreak, required this.fromShowMore}); @override NewsDetailsState createState() => NewsDetailsState(); static Route route(RouteSettings routeSettings) { final arguments = routeSettings.arguments as Map; return CupertinoPageRoute( builder: (_) => NewsDetailScreen( model: arguments['model'], breakModel: arguments['breakModel'], breakNewsList: arguments['breakNewsList'], newsList: arguments['newsList'], isFromBreak: arguments['isFromBreak'], fromShowMore: arguments['fromShowMore'], slug: arguments['slug'])); } } class NewsDetailsState extends State { final PageController pageController = PageController(); bool isScrollLocked = false; void _setScrollLock(bool lock) { setState(() { isScrollLocked = lock; }); } @override void initState() { if (context.read().getInAppAdsMode() == "1") { if (context.read().checkAdsType() == "google") { createGoogleInterstitialAd(context); createGoogleRewardedAd(context); } else { if (context.read().unityGameId() != null) { UnityAds.init( gameId: context.read().unityGameId()!, testMode: true, //set it to False @Deployement onComplete: () { loadUnityInterAd(context.read().interstitialId()!); loadUnityRewardAd(context.read().rewardId()!); }, onFailed: (error, message) => debugPrint('Initialization Failed: $error $message'), ); } } } super.initState(); } Widget showBreakingNews() { return PageView.builder( controller: pageController, onPageChanged: (index) async { if (await InternetConnectivity.isNetworkAvailable()) { if (index % rewardAdsIndex == 0) showRewardAds(); if (index % interstitialAdsIndex == 0) UiUtils.showInterstitialAds(context: context); } }, itemCount: (widget.breakNewsList == null || widget.breakNewsList!.isEmpty) ? 1 : widget.breakNewsList!.length + 1, itemBuilder: (context, index) { return NewsSubDetails( onLockScroll: (p0) {}, //no change for breaking news , No comments widget breakModel: (index == 0) ? widget.breakModel : widget.breakNewsList![index - 1], fromShowMore: widget.fromShowMore, isFromBreak: widget.isFromBreak, model: widget.model); }); } void showRewardAds() { if (context.read().getInAppAdsMode() == "1") { if (context.read().checkAdsType() == "google") { showGoogleRewardedAd(context); } else { showUnityRewardAds(context.read().rewardId()!); } } } Widget showNews() { return PageView.builder( controller: pageController, physics: isScrollLocked ? NeverScrollableScrollPhysics() : AlwaysScrollableScrollPhysics(), onPageChanged: (index) async { if (await InternetConnectivity.isNetworkAvailable()) { if (index % rewardAdsIndex == 0) showRewardAds(); if (index % interstitialAdsIndex == 0) UiUtils.showInterstitialAds(context: context); } }, itemCount: (widget.newsList == null || widget.newsList!.isEmpty) ? 1 : widget.newsList!.length + 1, itemBuilder: (context, index) { return NewsSubDetails( onLockScroll: _setScrollLock, model: (index == 0) ? widget.model : widget.newsList![index - 1], fromShowMore: widget.fromShowMore, isFromBreak: widget.isFromBreak, breakModel: widget.breakModel); }); } @override Widget build(BuildContext context) { return Scaffold(backgroundColor: UiUtils.getColorScheme(context).secondary, body: widget.isFromBreak ? showBreakingNews() : showNews()); } }