136 lines
5.4 KiB
Dart
136 lines
5.4 KiB
Dart
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<NewsModel>? newsList;
|
|
final BreakingNewsModel? breakModel;
|
|
final List<BreakingNewsModel>? 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<String, dynamic>;
|
|
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<NewsDetailScreen> {
|
|
final PageController pageController = PageController();
|
|
|
|
bool isScrollLocked = false;
|
|
|
|
void _setScrollLock(bool lock) {
|
|
setState(() {
|
|
isScrollLocked = lock;
|
|
});
|
|
}
|
|
|
|
@override
|
|
void initState() {
|
|
if (context.read<AppConfigurationCubit>().getInAppAdsMode() == "1") {
|
|
if (context.read<AppConfigurationCubit>().checkAdsType() == "google") {
|
|
createGoogleInterstitialAd(context);
|
|
createGoogleRewardedAd(context);
|
|
} else {
|
|
if (context.read<AppConfigurationCubit>().unityGameId() != null) {
|
|
UnityAds.init(
|
|
gameId: context.read<AppConfigurationCubit>().unityGameId()!,
|
|
testMode: true, //set it to False @Deployement
|
|
onComplete: () {
|
|
loadUnityInterAd(context.read<AppConfigurationCubit>().interstitialId()!);
|
|
loadUnityRewardAd(context.read<AppConfigurationCubit>().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<AppConfigurationCubit>().getInAppAdsMode() == "1") {
|
|
if (context.read<AppConfigurationCubit>().checkAdsType() == "google") {
|
|
showGoogleRewardedAd(context);
|
|
} else {
|
|
showUnityRewardAds(context.read<AppConfigurationCubit>().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());
|
|
}
|
|
}
|