This commit is contained in:
xuhang-x 2024-07-26 18:41:05 +08:00
parent 9930a7775d
commit 3bf5f4fa10
23 changed files with 454 additions and 154 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

View File

@ -3,17 +3,17 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>API_KEY</key> <key>API_KEY</key>
<string>AIzaSyCtr6QK7ixiotqBo4BlzoyS1X6ABMWni9E</string> <string>AIzaSyDmSYZIcHWdrLIDDKUpO2SugOfkIPeQ2R0</string>
<key>GCM_SENDER_ID</key> <key>GCM_SENDER_ID</key>
<string>154597733455</string> <string>163289585689</string>
<key>PLIST_VERSION</key> <key>PLIST_VERSION</key>
<string>1</string> <string>1</string>
<key>BUNDLE_ID</key> <key>BUNDLE_ID</key>
<string>com.ai.wallpaper.genie</string> <string>com.zt.atpaper</string>
<key>PROJECT_ID</key> <key>PROJECT_ID</key>
<string>wallpaper-genie-ios</string> <string>visualwallpaper-fdc23</string>
<key>STORAGE_BUCKET</key> <key>STORAGE_BUCKET</key>
<string>wallpaper-genie-ios.appspot.com</string> <string>visualwallpaper-fdc23.appspot.com</string>
<key>IS_ADS_ENABLED</key> <key>IS_ADS_ENABLED</key>
<false></false> <false></false>
<key>IS_ANALYTICS_ENABLED</key> <key>IS_ANALYTICS_ENABLED</key>
@ -25,6 +25,6 @@
<key>IS_SIGNIN_ENABLED</key> <key>IS_SIGNIN_ENABLED</key>
<true></true> <true></true>
<key>GOOGLE_APP_ID</key> <key>GOOGLE_APP_ID</key>
<string>1:154597733455:ios:d1981e1a0bcc03dab6663a</string> <string>1:163289585689:ios:b85946b1bb0a9234abf288</string>
</dict> </dict>
</plist> </plist>

View File

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:wallpaperx/common/utils/shared_util.dart'; import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/generated/assets.dart'; import 'package:wallpaperx/generated/assets.dart';
class PinCodeVerificationScreen extends StatefulWidget { class PinCodeVerificationScreen extends StatefulWidget {
@ -195,6 +196,7 @@ class _PinCodeVerificationScreenState extends State<PinCodeVerificationScreen> {
textEditingController.clear(); textEditingController.clear();
}); });
} else { } else {
ApplovinUtil().showAdIfReady();
widget.callback(); widget.callback();
setState(() { setState(() {
hasError = false; hasError = false;

View File

@ -22,6 +22,7 @@ class HttpUtil {
ResponseType? responseType, ResponseType? responseType,
Function? errorCallback, Function? errorCallback,
bool? isBackResponse = false, //Response类型数据 bool? isBackResponse = false, //Response类型数据
bool? showLoading, //Response类型数据
}) async { }) async {
try { try {
Map<String, dynamic> headers = {}; Map<String, dynamic> headers = {};
@ -43,7 +44,7 @@ class HttpUtil {
errorCallback!(e); errorCallback!(e);
dismiss(dismiss: true); dismiss(dismiss: true);
LogPrint.d("e: $e"); LogPrint.d("e: $e");
showError("Server error"); showError("Server error", show: showLoading ?? true);
} }
} }

View File

@ -1,7 +1,7 @@
class Url { class Url {
Url._(); Url._();
static const String HOST = 'http://185.14.47.106:8001'; static const String HOST = 'http://91.199.84.164:8001';
// //
static const String getImages = "$HOST/images"; static const String getImages = "$HOST/images";

138
lib/config/applovin.dart Normal file
View File

@ -0,0 +1,138 @@
import 'dart:async';
import 'dart:math';
import 'package:applovin_max/applovin_max.dart';
import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/firebase/firebase_analytics_manager.dart';
class ApplovinUtil {
ApplovinUtil._();
static final ApplovinUtil _instance = ApplovinUtil._();
factory ApplovinUtil() => _instance;
/// sdkKey
final String applovinKey =
'HXOh4UBLahW9KzBBrxqwniKOvfD_JEDJgE9y2rv8DlmJaJ6xPEXUmmJyeAg0xipqdH_EiHg5NsnvfmIHubSu1k';
/// 广Id
final String adUnitId = 'f4d33bc86b44eb24';
final List<String> adUnitIds = [
'e0ac389b7746be38',
'a8ecc9c457dee7bf',
'f4231f22c0314229',
];
///
bool isInitialized = false;
///
bool isSplashScreen = true;
///
final _maxExponentialRetryCount = 6;
var _interstitialRetryAttempt = 0;
///
Future<void> initApplovin() async {
MaxConfiguration? configuration = await AppLovinMAX.initialize(applovinKey);
if (configuration != null) {
isInitialized = true;
}
}
/// 广
void initializeInterstitialAds({required Function() onGoHomeTap}) {
if (isInitialized) {
AppLovinMAX.setInterstitialListener(InterstitialListener(
onAdLoadedCallback: (ad) async {
LogPrint.d('AdLoadedSuccess:${ad.adUnitId}');
if (ad.adUnitId == adUnitId && isSplashScreen) {
await showAdIfReady(adUnitId: adUnitId);
AppLovinMAX.loadInterstitial(adUnitId);
isSplashScreen = false;
onGoHomeTap();
}
_interstitialRetryAttempt = 0;
},
onAdLoadFailedCallback: (adUnitId, error) {
LogPrint.d(
'AdLoadFailed:$adUnitId,code:${error.code},message:${error.message}',
);
if (adUnitId == this.adUnitId && isSplashScreen) {
isSplashScreen = false;
onGoHomeTap();
}
// Applovin建议您以指数级更高的延迟重试64
_interstitialRetryAttempt = _interstitialRetryAttempt + 1;
if (_interstitialRetryAttempt > _maxExponentialRetryCount) return;
int retryDelay = pow(
2,
min(
_maxExponentialRetryCount,
_interstitialRetryAttempt,
)).toInt();
Future.delayed(Duration(milliseconds: retryDelay * 1000), () {
AppLovinMAX.loadInterstitial(adUnitId);
});
},
onAdDisplayedCallback: (ad) {
LogPrint.d('AdDisplayedSuccess:${ad.adUnitId}');
UPCache.getInstance().setData<int>(
"lastAdTime",
DateTime.now().millisecondsSinceEpoch,
);
//
FirebaseAnalyticsManager.logAdImpression(
ad.adUnitId, ad.networkName, 1, 1, 0);
},
onAdDisplayFailedCallback: (ad, error) {
LogPrint.d(
'AdDisplayFailed:${ad.adUnitId},code:${error.code},message:${error.message}',
);
//
FirebaseAnalyticsManager.logAdImpression(
ad.adUnitId, ad.networkName, 1, 0, 1);
},
onAdClickedCallback: (ad) {},
onAdHiddenCallback: (ad) {
LogPrint.d('AdHidden:${ad.adUnitId}');
UPCache.getInstance().setData<int>(
"lastAdTime",
DateTime.now().millisecondsSinceEpoch,
);
AppLovinMAX.loadInterstitial(ad.adUnitId);
},
));
AppLovinMAX.loadInterstitial(adUnitId);
for (var e in adUnitIds) {
AppLovinMAX.loadInterstitial(e);
}
}
}
/// 广
Future showAdIfReady({String? adUnitId}) async {
int lastAdTime = UPCache.getInstance().get<int>("lastAdTime") ?? 0;
int now = DateTime.now().millisecondsSinceEpoch;
DateTime timestamp1 = DateTime.fromMillisecondsSinceEpoch(lastAdTime);
DateTime timestamp2 = DateTime.fromMillisecondsSinceEpoch(now);
Duration difference = timestamp2.difference(timestamp1);
LogPrint.d("广告间隔:${difference.inSeconds}");
if (difference.inSeconds <= 5) return;
if (!isInitialized) return;
adUnitId ??= (adUnitIds..shuffle()).toList()[0];
bool isReady = (await AppLovinMAX.isInterstitialReady(adUnitId))!;
LogPrint.d("adUnitId:$adUnitId | isReady:$isReady");
if (isReady) {
AppLovinMAX.showInterstitial(adUnitId);
} else {
AppLovinMAX.loadInterstitial(adUnitId);
}
}
}

View File

@ -21,4 +21,18 @@ class FirebaseAnalyticsManager {
parameters: parameters, parameters: parameters,
); );
} }
/// 广
static logAdImpression(String adId, String adName, int shouldCount, int successCount, int failCount) {
FirebaseAnalytics.instance.logEvent(
name: 'ad_impression',
parameters: {
'adId': adId,
'adName': adName,
'shouldCount': shouldCount,
'successCount': successCount,
'failCount': failCount,
},
);
}
} }

View File

@ -49,21 +49,13 @@ class DefaultFirebaseOptions {
} }
} }
// static const FirebaseOptions android = FirebaseOptions(
// apiKey: 'AIzaSyDP6CpkN3HMpCofXlToug-hadYpTLEgE0E',
// appId: '1:318284530945:android:c7dd2abf520a9840250700',
// messagingSenderId: '318284530945',
// projectId: 'nowwallpaper',
// storageBucket: 'nowwallpaper.appspot.com',
// );
static const FirebaseOptions ios = FirebaseOptions( static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyCtr6QK7ixiotqBo4BlzoyS1X6ABMWni9E', apiKey: 'AIzaSyDmSYZIcHWdrLIDDKUpO2SugOfkIPeQ2R0',
appId: '1:154597733455:ios:d1981e1a0bcc03dab6663a', appId: '1:163289585689:ios:b85946b1bb0a9234abf288',
messagingSenderId: '154597733455', messagingSenderId: '163289585689',
projectId: 'wallpaper-genie-ios', projectId: 'visualwallpaper-fdc23',
storageBucket: 'wallpaper-genie-ios.appspot.com', storageBucket: 'visualwallpaper-fdc23.appspot.com',
iosBundleId: 'com.ai.wallpaper.genie', iosBundleId: 'com.zt.atpaper',
); );
} }

View File

@ -53,5 +53,6 @@ class Assets {
static const String imagesRecommendTopBackground = 'assets/images/recommend_top_background.png'; static const String imagesRecommendTopBackground = 'assets/images/recommend_top_background.png';
static const String imagesSettingBackground = 'assets/images/setting_background.png'; static const String imagesSettingBackground = 'assets/images/setting_background.png';
static const String imagesSettingSelected = 'assets/images/setting_selected.png'; static const String imagesSettingSelected = 'assets/images/setting_selected.png';
static const String imagesSplashBackground = 'assets/images/splash_background.png';
} }

View File

@ -13,6 +13,7 @@ import 'package:wallpaperx/common/components/easy_loading.dart';
import 'package:wallpaperx/common/storage/hive_storage.dart'; import 'package:wallpaperx/common/storage/hive_storage.dart';
import 'package:wallpaperx/common/utils/log_print.dart'; import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/shared_util.dart'; import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/firebase/firebase_options.dart'; import 'package:wallpaperx/firebase/firebase_options.dart';
import 'package:wallpaperx/res/themes/app_themes.dart'; import 'package:wallpaperx/res/themes/app_themes.dart';
import 'package:wallpaperx/res/values/strings.dart'; import 'package:wallpaperx/res/values/strings.dart';
@ -48,6 +49,9 @@ void main() async {
DeviceOrientation.portraitDown, DeviceOrientation.portraitDown,
]); ]);
// 广sdk
await ApplovinUtil().initApplovin();
// Hive // Hive
await initHive(); await initHive();
@ -85,14 +89,13 @@ class MyApp extends StatelessWidget {
builder: (context, child) { builder: (context, child) {
final botToastBuilder = BotToastInit(); final botToastBuilder = BotToastInit();
return GetMaterialApp( return GetMaterialApp(
// defaultTransition:Transition.cupertino,
navigatorObservers: [BotToastNavigatorObserver()],
title: appName, title: appName,
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
theme: lightTheme, theme: lightTheme,
themeMode: ThemeMode.dark, themeMode: ThemeMode.dark,
getPages: AppPages.routes, getPages: AppPages.routes,
initialRoute: AppPages.home, initialRoute: AppPages.splash,
navigatorObservers: [BotToastNavigatorObserver()],
builder: (context, widget) { builder: (context, widget) {
widget = easyLoading(context, widget); widget = easyLoading(context, widget);
child = botToastBuilder(context,widget); child = botToastBuilder(context,widget);

View File

@ -7,6 +7,7 @@ import 'package:wallpaperx/common/components/easy_loading.dart';
import 'package:wallpaperx/common/components/view_state_widget.dart'; import 'package:wallpaperx/common/components/view_state_widget.dart';
import 'package:wallpaperx/common/http/http_util.dart'; import 'package:wallpaperx/common/http/http_util.dart';
import 'package:wallpaperx/common/http/url.dart'; import 'package:wallpaperx/common/http/url.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/image_model.dart'; import 'package:wallpaperx/entity/image_model.dart';
import 'package:wallpaperx/res/values/strings.dart'; import 'package:wallpaperx/res/values/strings.dart';
import 'package:wallpaperx/routes/app_pages.dart'; import 'package:wallpaperx/routes/app_pages.dart';
@ -28,6 +29,7 @@ class CategoryController extends GetxController {
@override @override
void onClose() { void onClose() {
ApplovinUtil().showAdIfReady();
scrollController.dispose(); scrollController.dispose();
super.onClose(); super.onClose();
} }

View File

@ -3,6 +3,7 @@ import 'package:get/get.dart';
import 'package:wallpaperx/common/components/view_state_widget.dart'; import 'package:wallpaperx/common/components/view_state_widget.dart';
import 'package:wallpaperx/common/utils/shared_util.dart'; import 'package:wallpaperx/common/utils/shared_util.dart';
import 'package:wallpaperx/config/app_tracking_transparency_manager.dart'; import 'package:wallpaperx/config/app_tracking_transparency_manager.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/userinfo_model.dart'; import 'package:wallpaperx/entity/userinfo_model.dart';
import 'package:wallpaperx/generated/assets.dart'; import 'package:wallpaperx/generated/assets.dart';
import 'package:wallpaperx/page/custom/custom_view.dart'; import 'package:wallpaperx/page/custom/custom_view.dart';
@ -103,9 +104,11 @@ class HomeController extends GetxController with WidgetsBindingObserver {
/// ///
void toCategory(title, {String? jumpType}) { void toCategory(title, {String? jumpType}) {
scaffoldKey.currentState?.openEndDrawer(); scaffoldKey.currentState?.openEndDrawer();
ApplovinUtil().showAdIfReady().then((e) {
Get.toNamed(AppPages.category, arguments: { Get.toNamed(AppPages.category, arguments: {
'title': title, 'title': title,
}); });
});
} }
} }

View File

@ -36,7 +36,7 @@ class RecommendController extends GetxController {
super.onInit(); super.onInit();
scrollController = ScrollController(); scrollController = ScrollController();
refreshController = EasyRefreshController(controlFinishLoad: true); refreshController = EasyRefreshController(controlFinishLoad: true);
getImages(); getImages(showLoading: false);
} }
/// ///
@ -57,7 +57,7 @@ class RecommendController extends GetxController {
update(["discover_background"]); update(["discover_background"]);
} }
void getImages() { void getImages({bool? showLoading}) {
List<String> tags = UPCache.getInstance().getStringList("labelSettingList"); List<String> tags = UPCache.getInstance().getStringList("labelSettingList");
HttpUtil.get( HttpUtil.get(
Url.getImages, Url.getImages,
@ -78,9 +78,10 @@ class RecommendController extends GetxController {
_stopTimer(); _stopTimer();
} }
}, },
showLoading: showLoading,
errorCallback: (e) { errorCallback: (e) {
_timer ??= Timer.periodic(const Duration(seconds: 2), (Timer t) { _timer ??= Timer.periodic(const Duration(seconds: 2), (Timer t) {
getImages(); getImages(showLoading: false);
}); });
}, },
params: {"limit": limit, "skip": skip, "tags": tags.join(",")}, params: {"limit": limit, "skip": skip, "tags": tags.join(",")},

View File

@ -9,6 +9,7 @@ import 'package:wallpaperx/common/components/easy_loading.dart';
import 'package:wallpaperx/common/http/http_util.dart'; import 'package:wallpaperx/common/http/http_util.dart';
import 'package:wallpaperx/common/http/url.dart'; import 'package:wallpaperx/common/http/url.dart';
import 'package:wallpaperx/common/utils/log_print.dart'; import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/image_model.dart'; import 'package:wallpaperx/entity/image_model.dart';
import 'package:wallpaperx/routes/app_pages.dart'; import 'package:wallpaperx/routes/app_pages.dart';
@ -34,11 +35,13 @@ class SearchImageController extends GetxController {
@override @override
void onClose() { void onClose() {
super.onClose(); ApplovinUtil().showAdIfReady();
refreshController.dispose(); refreshController.dispose();
super.onClose();
} }
void searchImages({int? imageType}) { void searchImages({int? imageType}) {
ApplovinUtil().showAdIfReady();
if (searchController.text.isNotEmpty) { if (searchController.text.isNotEmpty) {
loading(show: true); loading(show: true);
HttpUtil.get(Url.searchImages, (callback) async { HttpUtil.get(Url.searchImages, (callback) async {

View File

@ -163,7 +163,7 @@ class SearchImageView extends GetView<SearchImageController> {
Widget _buildTags(context) { Widget _buildTags(context) {
return Container( return Container(
width: double.infinity, width: double.infinity,
padding: const EdgeInsets.only(bottom: 10).w, margin: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom).w,
child: Column( child: Column(
children: [ children: [
Row( Row(
@ -173,15 +173,15 @@ class SearchImageView extends GetView<SearchImageController> {
child: Container( child: Container(
margin: EdgeInsets.only(bottom: 15.w), margin: EdgeInsets.only(bottom: 15.w),
child: labelOptionColourItem( child: labelOptionColourItem(
"Anime Characters", angle: 12.0 * (math.pi / 180.0),
"Landscape",
Text( Text(
"Anime Characters", "Landscape",
style: TextStyle( style: TextStyle(
fontSize: 32.sp, fontSize: 32.sp,
color: const Color.fromRGBO(255, 255, 255, 0.85), color: const Color.fromRGBO(255, 255, 255, 0.85),
), ),
), ),
angle: 12.0 * (math.pi / 180.0),
), ),
), ),
), ),
@ -201,27 +201,18 @@ class SearchImageView extends GetView<SearchImageController> {
Row( Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
labelOptionItem(
"",
SizedBox(
width: 40.w,
height: 40.w,
),
angle: 0.0 * (math.pi / 180.0),
padding: const EdgeInsets.all(13).w,
),
15.horizontalSpace,
Expanded( Expanded(
child: Container( child: Container(
child: labelOptionColourItem( child: labelOptionColourItem(
"Landscape", "Anime Characters",
Text( Text(
"Landscape", "Anime Characters",
style: TextStyle( style: TextStyle(
fontSize: 32.sp, fontSize: 32.sp,
color: const Color.fromRGBO(255, 255, 255, 0.85), color: const Color.fromRGBO(255, 255, 255, 0.85),
), ),
), ),
angle: 0.0 * (math.pi / 180.0),
), ),
), ),
), ),

View File

@ -0,0 +1,9 @@
import 'package:get/get.dart';
import 'package:wallpaperx/page/splash/splash_controller.dart';
class SplashBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut(() => SplashController());
}
}

View File

@ -0,0 +1,41 @@
import 'dart:async';
import 'package:get/get.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/routes/app_pages.dart';
class SplashController extends GetxController {
Timer? _timer;
@override
void onInit() {
super.onInit();
ApplovinUtil().initializeInterstitialAds(onGoHomeTap: toIndex);
_startTimer();
}
@override
void onClose() {
_stopTimer();
super.onClose();
}
///
void _startTimer() {
_timer = Timer.periodic(const Duration(seconds: 10), (Timer t) {
toIndex();
});
}
///
void _stopTimer() {
_timer?.cancel();
_timer = null;
}
///
void toIndex() {
_stopTimer();
Get.offAndToNamed(AppPages.home);
}
}

View File

@ -0,0 +1,56 @@
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:wallpaperx/generated/assets.dart';
import 'package:wallpaperx/page/splash/splash_controller.dart';
class SplashView extends StatelessWidget {
const SplashView({super.key});
@override
Widget build(BuildContext context) {
Get.put(SplashController());
return Scaffold(
body: Container(
decoration: const BoxDecoration(
color: Colors.black,
image: DecorationImage(
image: AssetImage(Assets.imagesSplashBackground),
fit: BoxFit.cover,
),
),
child: SafeArea(
child: _buildProgress(),
),
),
);
}
Widget _buildProgress() {
return Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(bottom: 40).h,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SizedBox(
width: 0.5.sw,
child: LinearProgressIndicator(
backgroundColor: Colors.grey,
valueColor: const AlwaysStoppedAnimation<Color>(Colors.white),
borderRadius: BorderRadius.circular(8).r,
),
),
14.verticalSpace,
Text(
'Resource Loading...',
style: TextStyle(
color: Colors.white,
fontSize: 12.sp,
),
),
],
),
);
}
}

View File

@ -12,6 +12,7 @@ import 'package:wallpaperx/common/storage/history_data.dart';
import 'package:wallpaperx/common/utils/download_util.dart'; import 'package:wallpaperx/common/utils/download_util.dart';
import 'package:wallpaperx/common/utils/log_print.dart'; import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/permission_util.dart'; import 'package:wallpaperx/common/utils/permission_util.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/generate_info_model.dart'; import 'package:wallpaperx/entity/generate_info_model.dart';
import 'package:wallpaperx/entity/image_model.dart'; import 'package:wallpaperx/entity/image_model.dart';
import 'package:wallpaperx/page/browse_history/browse_history_controller.dart'; import 'package:wallpaperx/page/browse_history/browse_history_controller.dart';
@ -46,6 +47,7 @@ class WallpaperDetailController extends GetxController {
@override @override
void onClose() { void onClose() {
ApplovinUtil().showAdIfReady();
pageController.dispose(); pageController.dispose();
super.onClose(); super.onClose();
} }
@ -137,6 +139,10 @@ class WallpaperDetailController extends GetxController {
/// ///
void addHistory(index, {ImageModel? imageModel}) { void addHistory(index, {ImageModel? imageModel}) {
ImageModel imageModel = wallpaperList[index]; ImageModel imageModel = wallpaperList[index];
int indexOf = HistoryData().getWallpaperData().indexWhere(
(element) => element.imageUrl == wallpaperList[index].imageUrl,
);
if (indexOf != -1) HistoryData().delete(indexOf);
HistoryData().setWallpaperData(imageModel); HistoryData().setWallpaperData(imageModel);
// //
if (Get.isRegistered<BrowseHistoryController>()) { if (Get.isRegistered<BrowseHistoryController>()) {
@ -149,11 +155,6 @@ class WallpaperDetailController extends GetxController {
Get.toNamed(AppPages.categoryItem, arguments: title); Get.toNamed(AppPages.categoryItem, arguments: title);
} }
///
void flipCard() {
flipCardController.toggleCard();
}
/// ///
void copyPrompt(GenerateInfoModel? generateInfo) { void copyPrompt(GenerateInfoModel? generateInfo) {
Map textMap = { Map textMap = {
@ -164,8 +165,16 @@ class WallpaperDetailController extends GetxController {
toast("Copied"); toast("Copied");
} }
/// 广 /// 广
void showAd() { void flipCardAndShowAd() {
Get.back(); ApplovinUtil().showAdIfReady().then((e) {
flipCardController.toggleCard();
});
} }
///
void flipCard() {
flipCardController.toggleCard();
}
} }

View File

@ -55,11 +55,11 @@ class WallpaperDetailView extends GetView<WallpaperDetailController> {
builder: (context, index) { builder: (context, index) {
return PhotoViewGalleryPageOptions.customChild( return PhotoViewGalleryPageOptions.customChild(
child: PhotoView( child: PhotoView(
enableRotation: true, enableRotation: false,
imageProvider: CachedNetworkImageProvider( imageProvider: CachedNetworkImageProvider(
controller.wallpaperList[index].imageUrl, controller.wallpaperList[index].imageUrl,
), ),
initialScale: PhotoViewComputedScale.covered, initialScale: PhotoViewComputedScale.contained,
minScale: PhotoViewComputedScale.contained * 0.5, minScale: PhotoViewComputedScale.contained * 0.5,
maxScale: PhotoViewComputedScale.covered * 3, maxScale: PhotoViewComputedScale.covered * 3,
loadingBuilder: (context, event) => loadingView(), loadingBuilder: (context, event) => loadingView(),
@ -101,7 +101,7 @@ class WallpaperDetailView extends GetView<WallpaperDetailController> {
_buildOptionItem( _buildOptionItem(
Assets.iconBackBig, Assets.iconBackBig,
'', '',
controller.showAd, Get.back,
), ),
Expanded(child: Container()), Expanded(child: Container()),
Obx(() => _buildOptionItem( Obx(() => _buildOptionItem(
@ -121,7 +121,7 @@ class WallpaperDetailView extends GetView<WallpaperDetailController> {
_buildOptionItem( _buildOptionItem(
Assets.iconImgInfo, Assets.iconImgInfo,
'', '',
controller.flipCard, controller.flipCardAndShowAd,
), ),
16.horizontalSpace, 16.horizontalSpace,
], ],
@ -301,7 +301,7 @@ class WallpaperDetailView extends GetView<WallpaperDetailController> {
_buildOptionItem( _buildOptionItem(
Assets.iconBackBig, Assets.iconBackBig,
'', '',
controller.showAd, Get.back,
), ),
GestureDetector( GestureDetector(
onTap: () => onTap: () =>

View File

@ -12,6 +12,7 @@ import 'package:wallpaperx/common/storage/history_data.dart';
import 'package:wallpaperx/common/utils/download_util.dart'; import 'package:wallpaperx/common/utils/download_util.dart';
import 'package:wallpaperx/common/utils/log_print.dart'; import 'package:wallpaperx/common/utils/log_print.dart';
import 'package:wallpaperx/common/utils/permission_util.dart'; import 'package:wallpaperx/common/utils/permission_util.dart';
import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/generate_info_model.dart'; import 'package:wallpaperx/entity/generate_info_model.dart';
import 'package:wallpaperx/entity/image_model.dart'; import 'package:wallpaperx/entity/image_model.dart';
import 'package:wallpaperx/page/browse_history/browse_history_controller.dart'; import 'package:wallpaperx/page/browse_history/browse_history_controller.dart';
@ -47,6 +48,7 @@ class WallpaperDetailV2Controller extends GetxController {
@override @override
void onClose() { void onClose() {
ApplovinUtil().showAdIfReady();
pageController.dispose(); pageController.dispose();
super.onClose(); super.onClose();
} }
@ -137,6 +139,10 @@ class WallpaperDetailV2Controller extends GetxController {
/// ///
void addHistory(index, {ImageModel? imageModel}) { void addHistory(index, {ImageModel? imageModel}) {
ImageModel imageModel = wallpaperList[index]; ImageModel imageModel = wallpaperList[index];
int indexOf = HistoryData().getWallpaperData().indexWhere(
(element) => element.imageUrl == wallpaperList[index].imageUrl,
);
if (indexOf != -1) HistoryData().delete(indexOf);
HistoryData().setWallpaperData(imageModel); HistoryData().setWallpaperData(imageModel);
// //
if (Get.isRegistered<BrowseHistoryController>()) { if (Get.isRegistered<BrowseHistoryController>()) {
@ -149,11 +155,6 @@ class WallpaperDetailV2Controller extends GetxController {
Get.toNamed(AppPages.categoryItem, arguments: title); Get.toNamed(AppPages.categoryItem, arguments: title);
} }
///
void flipCard() {
flipCardController.toggleCard();
}
/// ///
void copyPrompt(GenerateInfoModel? generateInfo) { void copyPrompt(GenerateInfoModel? generateInfo) {
Map textMap = { Map textMap = {
@ -164,8 +165,16 @@ class WallpaperDetailV2Controller extends GetxController {
toast("Copied"); toast("Copied");
} }
/// 广 /// 广
void showAd() { void flipCardAndShowAd() {
Get.back(); ApplovinUtil().showAdIfReady().then((e) {
flipCardController.toggleCard();
});
} }
///
void flipCard() {
flipCardController.toggleCard();
}
} }

View File

@ -59,7 +59,7 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
imageProvider: CachedNetworkImageProvider( imageProvider: CachedNetworkImageProvider(
controller.wallpaperList[index].imageUrl, controller.wallpaperList[index].imageUrl,
), ),
initialScale: PhotoViewComputedScale.covered, initialScale: PhotoViewComputedScale.contained,
minScale: PhotoViewComputedScale.contained * 0.5, minScale: PhotoViewComputedScale.contained * 0.5,
maxScale: PhotoViewComputedScale.covered * 3, maxScale: PhotoViewComputedScale.covered * 3,
loadingBuilder: (context, event) => loadingView(), loadingBuilder: (context, event) => loadingView(),
@ -100,28 +100,28 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
16.horizontalSpace, 16.horizontalSpace,
_buildOptionItem( _buildOptionItem(
Assets.iconBackBig, Assets.iconBackBig,
'Blur', '',
controller.showAd, Get.back,
), ),
Expanded(child: Container()), Expanded(child: Container()),
Obx(() => _buildOptionItem( Obx(() => _buildOptionItem(
controller.isFavorite.value controller.isFavorite.value
? Assets.iconFavorite ? Assets.iconFavorite
: Assets.iconUnFavorite, : Assets.iconUnFavorite,
'Favorite', '',
controller.collectionImage, controller.collectionImage,
)), )),
24.horizontalSpace, 24.horizontalSpace,
_buildOptionItem( _buildOptionItem(
Assets.iconDownload, Assets.iconDownload,
'Download', '',
controller.downloadImg, controller.downloadImg,
), ),
24.horizontalSpace, 24.horizontalSpace,
_buildOptionItem( _buildOptionItem(
Assets.iconImgInfo, Assets.iconImgInfo,
'Blur', '',
controller.flipCard, controller.flipCardAndShowAd,
), ),
16.horizontalSpace, 16.horizontalSpace,
], ],
@ -154,12 +154,6 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
child: BackdropFilter( child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0), filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container( child: Container(
padding: EdgeInsets.fromLTRB(
30,
0,
30,
MediaQuery.of(context).padding.bottom + 55,
).w,
width: double.infinity, width: double.infinity,
decoration: BoxDecoration( decoration: BoxDecoration(
color: const Color(0xff000000).withOpacity(.8), color: const Color(0xff000000).withOpacity(.8),
@ -169,15 +163,15 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
children: [ children: [
63.verticalSpace, 63.verticalSpace,
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
24.horizontalSpace,
Stack( Stack(
clipBehavior: Clip.none, clipBehavior: Clip.none,
children: [ children: [
Image.asset( Image.asset(
Assets.iconImgDelTip, Assets.iconImgDelTip,
color: Colors.white,
width: 52.w, width: 52.w,
height: 52.w, height: 52.w,
), ),
@ -207,20 +201,12 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
), ),
], ],
), ),
GestureDetector(
onTap: controller.flipCard,
child: Icon(
Icons.close,
color: Colors.white,
size: 24.w,
),
),
], ],
), ),
37.verticalSpace, 37.verticalSpace,
Expanded( Expanded(
child: ListView( child: ListView(
padding: EdgeInsets.zero, padding: const EdgeInsets.symmetric(horizontal: 30).w,
children: [ children: [
Wrap( Wrap(
spacing: 8.w, spacing: 8.w,
@ -233,6 +219,7 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
genInfo( genInfo(
Image.asset( Image.asset(
Assets.iconSampler, Assets.iconSampler,
color: Colors.white,
width: 28.w, width: 28.w,
), ),
"Sampler", "Sampler",
@ -242,6 +229,7 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
genInfo( genInfo(
Image.asset( Image.asset(
Assets.iconCfgScale, Assets.iconCfgScale,
color: Colors.white,
width: 28.w, width: 28.w,
), ),
"CFG scale", "CFG scale",
@ -251,6 +239,7 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
genInfo( genInfo(
Image.asset( Image.asset(
Assets.iconSteps, Assets.iconSteps,
color: Colors.white,
width: 28.w, width: 28.w,
), ),
"Steps", "Steps",
@ -260,6 +249,7 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
genInfo( genInfo(
Image.asset( Image.asset(
Assets.iconSeed, Assets.iconSeed,
color: Colors.white,
width: 28.w, width: 28.w,
), ),
"Seed", "Seed",
@ -297,24 +287,49 @@ class WallpaperDetailV2View extends GetView<WallpaperDetailV2Controller> {
), ),
), ),
24.verticalSpace, 24.verticalSpace,
GestureDetector( Container(
onTap: () => controller.copyPrompt(model.generateInfo), height: 70.h,
child: Container(
width: double.infinity, width: double.infinity,
padding: const EdgeInsets.symmetric( padding: EdgeInsets.only(
vertical: 15, horizontal: 8) left: 16,
.w, right: 16,
bottom: MediaQuery.of(context).padding.bottom,
).w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildOptionItem(
Assets.iconBackBig,
'',
Get.back,
),
GestureDetector(
onTap: () =>
controller.copyPrompt(model.generateInfo),
child: Container(
width: 200.w,
height: 40.h,
alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: const Color(0xff322E31), color: Colors.white.withOpacity(.2),
borderRadius: BorderRadius.circular(30).r, borderRadius: BorderRadius.circular(50).r,
), ),
child: Text( child: Text(
"copy", "Copy Prompt",
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle(color: Colors.white, fontSize: 14.sp), style: TextStyle(
color: Colors.white, fontSize: 14.sp),
), ),
), ),
), ),
_buildOptionItem(
Assets.iconImgInfo,
'',
controller.flipCard,
),
],
),
),
], ],
), ),
), ),

View File

@ -17,6 +17,8 @@ import 'package:wallpaperx/page/login/login_binding.dart';
import 'package:wallpaperx/page/login/login_view.dart'; import 'package:wallpaperx/page/login/login_view.dart';
import 'package:wallpaperx/page/search_image/search_image_binding.dart'; import 'package:wallpaperx/page/search_image/search_image_binding.dart';
import 'package:wallpaperx/page/search_image/search_image_view.dart'; import 'package:wallpaperx/page/search_image/search_image_view.dart';
import 'package:wallpaperx/page/splash/splash_binding.dart';
import 'package:wallpaperx/page/splash/splash_view.dart';
import 'package:wallpaperx/page/wallpaper_detail/wallpaper_detail_binding.dart'; import 'package:wallpaperx/page/wallpaper_detail/wallpaper_detail_binding.dart';
import 'package:wallpaperx/page/wallpaper_detail/wallpaper_detail_view.dart'; import 'package:wallpaperx/page/wallpaper_detail/wallpaper_detail_view.dart';
import 'package:wallpaperx/page/wallpaper_detail_v2/wallpaper_detail_v2_binding.dart'; import 'package:wallpaperx/page/wallpaper_detail_v2/wallpaper_detail_v2_binding.dart';
@ -27,6 +29,9 @@ import 'package:wallpaperx/page/web/web_view_binding.dart';
class AppPages { class AppPages {
AppPages._(); AppPages._();
///
static const splash = '/splash';
/// ///
static const home = '/home'; static const home = '/home';
@ -67,6 +72,11 @@ class AppPages {
static const feedBack = '/feed_back'; static const feedBack = '/feed_back';
static final routes = [ static final routes = [
GetPage(
name: splash,
page: () => const SplashView(),
binding: SplashBinding(),
),
GetPage( GetPage(
name: home, name: home,
page: () => const HomeView(), page: () => const HomeView(),