diff --git a/assets/images/splash_background.png b/assets/images/splash_background.png
new file mode 100755
index 0000000..895c4c1
Binary files /dev/null and b/assets/images/splash_background.png differ
diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist
index 3e383be..5006631 100644
--- a/ios/Runner/GoogleService-Info.plist
+++ b/ios/Runner/GoogleService-Info.plist
@@ -2,29 +2,29 @@
- API_KEY
- AIzaSyCtr6QK7ixiotqBo4BlzoyS1X6ABMWni9E
- GCM_SENDER_ID
- 154597733455
- PLIST_VERSION
- 1
- BUNDLE_ID
- com.ai.wallpaper.genie
- PROJECT_ID
- wallpaper-genie-ios
- STORAGE_BUCKET
- wallpaper-genie-ios.appspot.com
- IS_ADS_ENABLED
-
- IS_ANALYTICS_ENABLED
-
- IS_APPINVITE_ENABLED
-
- IS_GCM_ENABLED
-
- IS_SIGNIN_ENABLED
-
- GOOGLE_APP_ID
- 1:154597733455:ios:d1981e1a0bcc03dab6663a
+ API_KEY
+ AIzaSyDmSYZIcHWdrLIDDKUpO2SugOfkIPeQ2R0
+ GCM_SENDER_ID
+ 163289585689
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ com.zt.atpaper
+ PROJECT_ID
+ visualwallpaper-fdc23
+ STORAGE_BUCKET
+ visualwallpaper-fdc23.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:163289585689:ios:b85946b1bb0a9234abf288
\ No newline at end of file
diff --git a/lib/common/components/pin_code_verification_screen.dart b/lib/common/components/pin_code_verification_screen.dart
index 536406b..0035b63 100644
--- a/lib/common/components/pin_code_verification_screen.dart
+++ b/lib/common/components/pin_code_verification_screen.dart
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:wallpaperx/common/utils/shared_util.dart';
+import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/generated/assets.dart';
class PinCodeVerificationScreen extends StatefulWidget {
@@ -195,6 +196,7 @@ class _PinCodeVerificationScreenState extends State {
textEditingController.clear();
});
} else {
+ ApplovinUtil().showAdIfReady();
widget.callback();
setState(() {
hasError = false;
diff --git a/lib/common/http/http_util.dart b/lib/common/http/http_util.dart
index 03bf88f..f1be9a7 100644
--- a/lib/common/http/http_util.dart
+++ b/lib/common/http/http_util.dart
@@ -22,6 +22,7 @@ class HttpUtil {
ResponseType? responseType,
Function? errorCallback,
bool? isBackResponse = false, //是否返回Response类型数据
+ bool? showLoading, //是否返回Response类型数据
}) async {
try {
Map headers = {};
@@ -43,7 +44,7 @@ class HttpUtil {
errorCallback!(e);
dismiss(dismiss: true);
LogPrint.d("e: $e");
- showError("Server error");
+ showError("Server error", show: showLoading ?? true);
}
}
@@ -80,14 +81,14 @@ class HttpUtil {
}
static void postFileImg(
- String url,
- Function callback, {
- Map? headerMap,
- required File file,
- ResponseType? responseType,
- Function? errorCallback,
- bool? isBackResponse = false,
- }) async {
+ String url,
+ Function callback, {
+ Map? headerMap,
+ required File file,
+ ResponseType? responseType,
+ Function? errorCallback,
+ bool? isBackResponse = false,
+ }) async {
try {
Map headers = {};
Response response;
diff --git a/lib/common/http/url.dart b/lib/common/http/url.dart
index 70f0bdb..66b6f77 100644
--- a/lib/common/http/url.dart
+++ b/lib/common/http/url.dart
@@ -1,7 +1,7 @@
class 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";
diff --git a/lib/config/applovin.dart b/lib/config/applovin.dart
new file mode 100644
index 0000000..78d5ec7
--- /dev/null
+++ b/lib/config/applovin.dart
@@ -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 adUnitIds = [
+ 'e0ac389b7746be38',
+ 'a8ecc9c457dee7bf',
+ 'f4231f22c0314229',
+ ];
+
+ /// 是否已初始化
+ bool isInitialized = false;
+
+ /// 是否是启动屏幕
+ bool isSplashScreen = true;
+
+ /// 重试计数
+ final _maxExponentialRetryCount = 6;
+ var _interstitialRetryAttempt = 0;
+
+ /// 初始化
+ Future 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(
+ "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(
+ "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("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);
+ }
+ }
+}
diff --git a/lib/firebase/firebase_analytics_manager.dart b/lib/firebase/firebase_analytics_manager.dart
index 6e7bcc7..898e7e4 100644
--- a/lib/firebase/firebase_analytics_manager.dart
+++ b/lib/firebase/firebase_analytics_manager.dart
@@ -21,4 +21,18 @@ class FirebaseAnalyticsManager {
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,
+ },
+ );
+ }
}
diff --git a/lib/firebase/firebase_options.dart b/lib/firebase/firebase_options.dart
index 35c21cb..2c35623 100644
--- a/lib/firebase/firebase_options.dart
+++ b/lib/firebase/firebase_options.dart
@@ -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(
- apiKey: 'AIzaSyCtr6QK7ixiotqBo4BlzoyS1X6ABMWni9E',
- appId: '1:154597733455:ios:d1981e1a0bcc03dab6663a',
- messagingSenderId: '154597733455',
- projectId: 'wallpaper-genie-ios',
- storageBucket: 'wallpaper-genie-ios.appspot.com',
- iosBundleId: 'com.ai.wallpaper.genie',
+ apiKey: 'AIzaSyDmSYZIcHWdrLIDDKUpO2SugOfkIPeQ2R0',
+ appId: '1:163289585689:ios:b85946b1bb0a9234abf288',
+ messagingSenderId: '163289585689',
+ projectId: 'visualwallpaper-fdc23',
+ storageBucket: 'visualwallpaper-fdc23.appspot.com',
+ iosBundleId: 'com.zt.atpaper',
);
}
\ No newline at end of file
diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart
index 1da0d31..36d63c3 100644
--- a/lib/generated/assets.dart
+++ b/lib/generated/assets.dart
@@ -53,5 +53,6 @@ class Assets {
static const String imagesRecommendTopBackground = 'assets/images/recommend_top_background.png';
static const String imagesSettingBackground = 'assets/images/setting_background.png';
static const String imagesSettingSelected = 'assets/images/setting_selected.png';
+ static const String imagesSplashBackground = 'assets/images/splash_background.png';
}
diff --git a/lib/main.dart b/lib/main.dart
index 297f177..e117aa4 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -13,6 +13,7 @@ import 'package:wallpaperx/common/components/easy_loading.dart';
import 'package:wallpaperx/common/storage/hive_storage.dart';
import 'package:wallpaperx/common/utils/log_print.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/res/themes/app_themes.dart';
import 'package:wallpaperx/res/values/strings.dart';
@@ -48,6 +49,9 @@ void main() async {
DeviceOrientation.portraitDown,
]);
+ // 初始化广告sdk
+ await ApplovinUtil().initApplovin();
+
// 初始化Hive
await initHive();
@@ -85,14 +89,13 @@ class MyApp extends StatelessWidget {
builder: (context, child) {
final botToastBuilder = BotToastInit();
return GetMaterialApp(
- // defaultTransition:Transition.cupertino,
- navigatorObservers: [BotToastNavigatorObserver()],
title: appName,
debugShowCheckedModeBanner: false,
theme: lightTheme,
themeMode: ThemeMode.dark,
getPages: AppPages.routes,
- initialRoute: AppPages.home,
+ initialRoute: AppPages.splash,
+ navigatorObservers: [BotToastNavigatorObserver()],
builder: (context, widget) {
widget = easyLoading(context, widget);
child = botToastBuilder(context,widget);
diff --git a/lib/page/category/category_controller.dart b/lib/page/category/category_controller.dart
index 03b0b70..6e1609e 100644
--- a/lib/page/category/category_controller.dart
+++ b/lib/page/category/category_controller.dart
@@ -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/http/http_util.dart';
import 'package:wallpaperx/common/http/url.dart';
+import 'package:wallpaperx/config/applovin.dart';
import 'package:wallpaperx/entity/image_model.dart';
import 'package:wallpaperx/res/values/strings.dart';
import 'package:wallpaperx/routes/app_pages.dart';
@@ -28,6 +29,7 @@ class CategoryController extends GetxController {
@override
void onClose() {
+ ApplovinUtil().showAdIfReady();
scrollController.dispose();
super.onClose();
}
diff --git a/lib/page/home/home_controller.dart b/lib/page/home/home_controller.dart
index af58f76..a70cf02 100644
--- a/lib/page/home/home_controller.dart
+++ b/lib/page/home/home_controller.dart
@@ -3,6 +3,7 @@ import 'package:get/get.dart';
import 'package:wallpaperx/common/components/view_state_widget.dart';
import 'package:wallpaperx/common/utils/shared_util.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/generated/assets.dart';
import 'package:wallpaperx/page/custom/custom_view.dart';
@@ -103,8 +104,10 @@ class HomeController extends GetxController with WidgetsBindingObserver {
/// 跳转分类
void toCategory(title, {String? jumpType}) {
scaffoldKey.currentState?.openEndDrawer();
- Get.toNamed(AppPages.category, arguments: {
- 'title': title,
+ ApplovinUtil().showAdIfReady().then((e) {
+ Get.toNamed(AppPages.category, arguments: {
+ 'title': title,
+ });
});
}
}
diff --git a/lib/page/recommend/recommend_controller.dart b/lib/page/recommend/recommend_controller.dart
index 7466193..3740ac3 100644
--- a/lib/page/recommend/recommend_controller.dart
+++ b/lib/page/recommend/recommend_controller.dart
@@ -36,7 +36,7 @@ class RecommendController extends GetxController {
super.onInit();
scrollController = ScrollController();
refreshController = EasyRefreshController(controlFinishLoad: true);
- getImages();
+ getImages(showLoading: false);
}
/// 停止定时器
@@ -57,7 +57,7 @@ class RecommendController extends GetxController {
update(["discover_background"]);
}
- void getImages() {
+ void getImages({bool? showLoading}) {
List tags = UPCache.getInstance().getStringList("labelSettingList");
HttpUtil.get(
Url.getImages,
@@ -78,9 +78,10 @@ class RecommendController extends GetxController {
_stopTimer();
}
},
+ showLoading: showLoading,
errorCallback: (e) {
_timer ??= Timer.periodic(const Duration(seconds: 2), (Timer t) {
- getImages();
+ getImages(showLoading: false);
});
},
params: {"limit": limit, "skip": skip, "tags": tags.join(",")},
diff --git a/lib/page/search_image/search_image_controller.dart b/lib/page/search_image/search_image_controller.dart
index 3af1ba8..3230395 100644
--- a/lib/page/search_image/search_image_controller.dart
+++ b/lib/page/search_image/search_image_controller.dart
@@ -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/url.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/routes/app_pages.dart';
@@ -34,11 +35,13 @@ class SearchImageController extends GetxController {
@override
void onClose() {
- super.onClose();
+ ApplovinUtil().showAdIfReady();
refreshController.dispose();
+ super.onClose();
}
void searchImages({int? imageType}) {
+ ApplovinUtil().showAdIfReady();
if (searchController.text.isNotEmpty) {
loading(show: true);
HttpUtil.get(Url.searchImages, (callback) async {
diff --git a/lib/page/search_image/search_image_view.dart b/lib/page/search_image/search_image_view.dart
index ba4bb69..ecb1c76 100644
--- a/lib/page/search_image/search_image_view.dart
+++ b/lib/page/search_image/search_image_view.dart
@@ -163,7 +163,7 @@ class SearchImageView extends GetView {
Widget _buildTags(context) {
return Container(
width: double.infinity,
- padding: const EdgeInsets.only(bottom: 10).w,
+ margin: EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom).w,
child: Column(
children: [
Row(
@@ -173,15 +173,15 @@ class SearchImageView extends GetView {
child: Container(
margin: EdgeInsets.only(bottom: 15.w),
child: labelOptionColourItem(
- "Anime Characters",
+ angle: 12.0 * (math.pi / 180.0),
+ "Landscape",
Text(
- "Anime Characters",
+ "Landscape",
style: TextStyle(
fontSize: 32.sp,
color: const Color.fromRGBO(255, 255, 255, 0.85),
),
),
- angle: 12.0 * (math.pi / 180.0),
),
),
),
@@ -201,27 +201,18 @@ class SearchImageView extends GetView {
Row(
crossAxisAlignment: CrossAxisAlignment.end,
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(
child: Container(
child: labelOptionColourItem(
- "Landscape",
+ "Anime Characters",
Text(
- "Landscape",
+ "Anime Characters",
style: TextStyle(
fontSize: 32.sp,
color: const Color.fromRGBO(255, 255, 255, 0.85),
),
),
+ angle: 0.0 * (math.pi / 180.0),
),
),
),
diff --git a/lib/page/splash/splash_binding.dart b/lib/page/splash/splash_binding.dart
new file mode 100644
index 0000000..a21ee54
--- /dev/null
+++ b/lib/page/splash/splash_binding.dart
@@ -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());
+ }
+}
diff --git a/lib/page/splash/splash_controller.dart b/lib/page/splash/splash_controller.dart
new file mode 100644
index 0000000..f770978
--- /dev/null
+++ b/lib/page/splash/splash_controller.dart
@@ -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);
+ }
+}
diff --git a/lib/page/splash/splash_view.dart b/lib/page/splash/splash_view.dart
new file mode 100644
index 0000000..d58c01a
--- /dev/null
+++ b/lib/page/splash/splash_view.dart
@@ -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(Colors.white),
+ borderRadius: BorderRadius.circular(8).r,
+ ),
+ ),
+ 14.verticalSpace,
+ Text(
+ 'Resource Loading...',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 12.sp,
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/page/wallpaper_detail/wallpaper_detail_controller.dart b/lib/page/wallpaper_detail/wallpaper_detail_controller.dart
index e0ecf35..d405a55 100644
--- a/lib/page/wallpaper_detail/wallpaper_detail_controller.dart
+++ b/lib/page/wallpaper_detail/wallpaper_detail_controller.dart
@@ -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/log_print.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/image_model.dart';
import 'package:wallpaperx/page/browse_history/browse_history_controller.dart';
@@ -46,6 +47,7 @@ class WallpaperDetailController extends GetxController {
@override
void onClose() {
+ ApplovinUtil().showAdIfReady();
pageController.dispose();
super.onClose();
}
@@ -137,6 +139,10 @@ class WallpaperDetailController extends GetxController {
/// 浏览记录
void addHistory(index, {ImageModel? imageModel}) {
ImageModel imageModel = wallpaperList[index];
+ int indexOf = HistoryData().getWallpaperData().indexWhere(
+ (element) => element.imageUrl == wallpaperList[index].imageUrl,
+ );
+ if (indexOf != -1) HistoryData().delete(indexOf);
HistoryData().setWallpaperData(imageModel);
// 刷新浏览列表
if (Get.isRegistered()) {
@@ -149,11 +155,6 @@ class WallpaperDetailController extends GetxController {
Get.toNamed(AppPages.categoryItem, arguments: title);
}
- /// 翻转
- void flipCard() {
- flipCardController.toggleCard();
- }
-
/// 复制
void copyPrompt(GenerateInfoModel? generateInfo) {
Map textMap = {
@@ -164,8 +165,16 @@ class WallpaperDetailController extends GetxController {
toast("Copied");
}
- /// 显示广告
- void showAd() {
- Get.back();
+ /// 翻转并且播放广告
+ void flipCardAndShowAd() {
+ ApplovinUtil().showAdIfReady().then((e) {
+ flipCardController.toggleCard();
+ });
}
+
+ /// 翻转
+ void flipCard() {
+ flipCardController.toggleCard();
+ }
+
}
diff --git a/lib/page/wallpaper_detail/wallpaper_detail_view.dart b/lib/page/wallpaper_detail/wallpaper_detail_view.dart
index 9a9b8c0..9263722 100644
--- a/lib/page/wallpaper_detail/wallpaper_detail_view.dart
+++ b/lib/page/wallpaper_detail/wallpaper_detail_view.dart
@@ -55,11 +55,11 @@ class WallpaperDetailView extends GetView {
builder: (context, index) {
return PhotoViewGalleryPageOptions.customChild(
child: PhotoView(
- enableRotation: true,
+ enableRotation: false,
imageProvider: CachedNetworkImageProvider(
controller.wallpaperList[index].imageUrl,
),
- initialScale: PhotoViewComputedScale.covered,
+ initialScale: PhotoViewComputedScale.contained,
minScale: PhotoViewComputedScale.contained * 0.5,
maxScale: PhotoViewComputedScale.covered * 3,
loadingBuilder: (context, event) => loadingView(),
@@ -101,7 +101,7 @@ class WallpaperDetailView extends GetView {
_buildOptionItem(
Assets.iconBackBig,
'',
- controller.showAd,
+ Get.back,
),
Expanded(child: Container()),
Obx(() => _buildOptionItem(
@@ -121,7 +121,7 @@ class WallpaperDetailView extends GetView {
_buildOptionItem(
Assets.iconImgInfo,
'',
- controller.flipCard,
+ controller.flipCardAndShowAd,
),
16.horizontalSpace,
],
@@ -301,7 +301,7 @@ class WallpaperDetailView extends GetView {
_buildOptionItem(
Assets.iconBackBig,
'',
- controller.showAd,
+ Get.back,
),
GestureDetector(
onTap: () =>
diff --git a/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_controller.dart b/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_controller.dart
index 9ce0618..54b2530 100644
--- a/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_controller.dart
+++ b/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_controller.dart
@@ -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/log_print.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/image_model.dart';
import 'package:wallpaperx/page/browse_history/browse_history_controller.dart';
@@ -47,6 +48,7 @@ class WallpaperDetailV2Controller extends GetxController {
@override
void onClose() {
+ ApplovinUtil().showAdIfReady();
pageController.dispose();
super.onClose();
}
@@ -68,7 +70,7 @@ class WallpaperDetailV2Controller extends GetxController {
}
update(["buildImageInfo"]);
int indexOf = FavoriteData().getWallpaperData().indexWhere(
- (element) => element.imageUrl == wallpaperList[position].imageUrl);
+ (element) => element.imageUrl == wallpaperList[position].imageUrl);
if (indexOf != -1) {
isFavorite.value = true;
} else {
@@ -82,24 +84,24 @@ class WallpaperDetailV2Controller extends GetxController {
return;
}
DownloadUtil.downloadFile('${wallpaperList[position].imageUrl}',
- (savePath) async {
- filePath = savePath;
- bool canSave = true;
- if (Platform.isIOS) {
- canSave = await PermissionUtil.checkPermission(
- [Permission.photosAddOnly],
- );
- }
- if (canSave) {
- final result =
+ (savePath) async {
+ filePath = savePath;
+ bool canSave = true;
+ if (Platform.isIOS) {
+ canSave = await PermissionUtil.checkPermission(
+ [Permission.photosAddOnly],
+ );
+ }
+ if (canSave) {
+ final result =
await ImageGallerySaver.saveImage(File(filePath).readAsBytesSync());
- if (result['isSuccess']) {
- toast('Saved to album');
- } else {
- toast('Unable to save to album');
- }
- }
- });
+ if (result['isSuccess']) {
+ toast('Saved to album');
+ } else {
+ toast('Unable to save to album');
+ }
+ }
+ });
}
/// 收藏
@@ -137,6 +139,10 @@ class WallpaperDetailV2Controller extends GetxController {
/// 浏览记录
void addHistory(index, {ImageModel? imageModel}) {
ImageModel imageModel = wallpaperList[index];
+ int indexOf = HistoryData().getWallpaperData().indexWhere(
+ (element) => element.imageUrl == wallpaperList[index].imageUrl,
+ );
+ if (indexOf != -1) HistoryData().delete(indexOf);
HistoryData().setWallpaperData(imageModel);
// 刷新浏览列表
if (Get.isRegistered()) {
@@ -149,11 +155,6 @@ class WallpaperDetailV2Controller extends GetxController {
Get.toNamed(AppPages.categoryItem, arguments: title);
}
- /// 翻转
- void flipCard() {
- flipCardController.toggleCard();
- }
-
/// 复制
void copyPrompt(GenerateInfoModel? generateInfo) {
Map textMap = {
@@ -164,8 +165,16 @@ class WallpaperDetailV2Controller extends GetxController {
toast("Copied");
}
- /// 显示广告
- void showAd() {
- Get.back();
+ /// 翻转并且播放广告
+ void flipCardAndShowAd() {
+ ApplovinUtil().showAdIfReady().then((e) {
+ flipCardController.toggleCard();
+ });
}
+
+ /// 翻转
+ void flipCard() {
+ flipCardController.toggleCard();
+ }
+
}
diff --git a/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_view.dart b/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_view.dart
index 6950d9f..91bf3d1 100644
--- a/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_view.dart
+++ b/lib/page/wallpaper_detail_v2/wallpaper_detail_v2_view.dart
@@ -59,7 +59,7 @@ class WallpaperDetailV2View extends GetView {
imageProvider: CachedNetworkImageProvider(
controller.wallpaperList[index].imageUrl,
),
- initialScale: PhotoViewComputedScale.covered,
+ initialScale: PhotoViewComputedScale.contained,
minScale: PhotoViewComputedScale.contained * 0.5,
maxScale: PhotoViewComputedScale.covered * 3,
loadingBuilder: (context, event) => loadingView(),
@@ -100,28 +100,28 @@ class WallpaperDetailV2View extends GetView {
16.horizontalSpace,
_buildOptionItem(
Assets.iconBackBig,
- 'Blur',
- controller.showAd,
+ '',
+ Get.back,
),
Expanded(child: Container()),
Obx(() => _buildOptionItem(
controller.isFavorite.value
? Assets.iconFavorite
: Assets.iconUnFavorite,
- 'Favorite',
+ '',
controller.collectionImage,
)),
24.horizontalSpace,
_buildOptionItem(
Assets.iconDownload,
- 'Download',
+ '',
controller.downloadImg,
),
24.horizontalSpace,
_buildOptionItem(
Assets.iconImgInfo,
- 'Blur',
- controller.flipCard,
+ '',
+ controller.flipCardAndShowAd,
),
16.horizontalSpace,
],
@@ -154,12 +154,6 @@ class WallpaperDetailV2View extends GetView {
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
- padding: EdgeInsets.fromLTRB(
- 30,
- 0,
- 30,
- MediaQuery.of(context).padding.bottom + 55,
- ).w,
width: double.infinity,
decoration: BoxDecoration(
color: const Color(0xff000000).withOpacity(.8),
@@ -169,15 +163,15 @@ class WallpaperDetailV2View extends GetView {
children: [
63.verticalSpace,
Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- 24.horizontalSpace,
Stack(
clipBehavior: Clip.none,
children: [
Image.asset(
Assets.iconImgDelTip,
+ color: Colors.white,
width: 52.w,
height: 52.w,
),
@@ -207,20 +201,12 @@ class WallpaperDetailV2View extends GetView {
),
],
),
- GestureDetector(
- onTap: controller.flipCard,
- child: Icon(
- Icons.close,
- color: Colors.white,
- size: 24.w,
- ),
- ),
],
),
37.verticalSpace,
Expanded(
child: ListView(
- padding: EdgeInsets.zero,
+ padding: const EdgeInsets.symmetric(horizontal: 30).w,
children: [
Wrap(
spacing: 8.w,
@@ -233,6 +219,7 @@ class WallpaperDetailV2View extends GetView {
genInfo(
Image.asset(
Assets.iconSampler,
+ color: Colors.white,
width: 28.w,
),
"Sampler:",
@@ -242,6 +229,7 @@ class WallpaperDetailV2View extends GetView {
genInfo(
Image.asset(
Assets.iconCfgScale,
+ color: Colors.white,
width: 28.w,
),
"CFG scale:",
@@ -251,6 +239,7 @@ class WallpaperDetailV2View extends GetView {
genInfo(
Image.asset(
Assets.iconSteps,
+ color: Colors.white,
width: 28.w,
),
"Steps:",
@@ -260,6 +249,7 @@ class WallpaperDetailV2View extends GetView {
genInfo(
Image.asset(
Assets.iconSeed,
+ color: Colors.white,
width: 28.w,
),
"Seed:",
@@ -270,7 +260,7 @@ class WallpaperDetailV2View extends GetView {
"Prompt",
textAlign: TextAlign.start,
style:
- TextStyle(color: Colors.white, fontSize: 16.sp),
+ TextStyle(color: Colors.white, fontSize: 16.sp),
),
12.verticalSpace,
Text(
@@ -284,7 +274,7 @@ class WallpaperDetailV2View extends GetView {
"Negative Prompt",
textAlign: TextAlign.start,
style:
- TextStyle(color: Colors.white, fontSize: 16.sp),
+ TextStyle(color: Colors.white, fontSize: 16.sp),
),
12.verticalSpace,
Text(
@@ -297,22 +287,47 @@ class WallpaperDetailV2View extends GetView {
),
),
24.verticalSpace,
- GestureDetector(
- onTap: () => controller.copyPrompt(model.generateInfo),
- child: Container(
- width: double.infinity,
- padding: const EdgeInsets.symmetric(
- vertical: 15, horizontal: 8)
- .w,
- decoration: BoxDecoration(
- color: const Color(0xff322E31),
- borderRadius: BorderRadius.circular(30).r,
- ),
- child: Text(
- "copy",
- textAlign: TextAlign.center,
- style: TextStyle(color: Colors.white, fontSize: 14.sp),
- ),
+ Container(
+ height: 70.h,
+ width: double.infinity,
+ padding: EdgeInsets.only(
+ left: 16,
+ 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(
+ color: Colors.white.withOpacity(.2),
+ borderRadius: BorderRadius.circular(50).r,
+ ),
+ child: Text(
+ "Copy Prompt",
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ color: Colors.white, fontSize: 14.sp),
+ ),
+ ),
+ ),
+ _buildOptionItem(
+ Assets.iconImgInfo,
+ '',
+ controller.flipCard,
+ ),
+ ],
),
),
],
diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart
index 2b20ccd..8054e2e 100644
--- a/lib/routes/app_pages.dart
+++ b/lib/routes/app_pages.dart
@@ -17,6 +17,8 @@ import 'package:wallpaperx/page/login/login_binding.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_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_view.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 {
AppPages._();
+ /// 开屏页
+ static const splash = '/splash';
+
/// 首页
static const home = '/home';
@@ -67,6 +72,11 @@ class AppPages {
static const feedBack = '/feed_back';
static final routes = [
+ GetPage(
+ name: splash,
+ page: () => const SplashView(),
+ binding: SplashBinding(),
+ ),
GetPage(
name: home,
page: () => const HomeView(),