diff --git a/.fvmrc b/.fvmrc new file mode 100644 index 0000000..03c3fb3 --- /dev/null +++ b/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.19.6" +} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 9972eb6..d551d97 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -54,7 +54,7 @@ android { // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // minSdkVersion flutter.minSdkVersion - minSdkVersion 19 + minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/assets/json/lux_wallpaper.json b/assets/json/lux_wallpaper.json index 5af6a6c..d56f49d 100644 --- a/assets/json/lux_wallpaper.json +++ b/assets/json/lux_wallpaper.json @@ -2908,11 +2908,6 @@ "previewThumb": "https://resource-sg-public.lux-ad.com/wallpaper/9f275c8eba3d137304a5f8de5d0a378a.jpg", "source": "https://resource-sg-public.lux-ad.com/wallpaper/45f776f83fa4cbd8ecb0663337a9bc1b.jpg" }, - { - "original": "https://resource-sg-public.lux-ad.com/wallpaper/cadf45fd51c10bd72be33dfb368b996c.jpg", - "previewThumb": "https://resource-sg-public.lux-ad.com/wallpaper/590c191d1cd869cef10e1b16a6b8ee85.jpg", - "source": "https://resource-sg-public.lux-ad.com/wallpaper/fd2aedaae00914150d382be1b28e2b20.jpg" - }, { "original": "https://resource-sg-public.lux-ad.com/wallpaper/8305a11b0e15251d5b3739a918240ecc.jpg", "previewThumb": "https://resource-sg-public.lux-ad.com/wallpaper/2a9207fe180aa469148ab08fd8d5b3ea.jpg", diff --git a/lib/common/components/navigation_bar/base_appbar.dart b/lib/common/components/navigation_bar/base_appbar.dart index 0a94ba4..19fdc83 100644 --- a/lib/common/components/navigation_bar/base_appbar.dart +++ b/lib/common/components/navigation_bar/base_appbar.dart @@ -38,9 +38,9 @@ class BaseAppBar extends StatelessWidget implements PreferredSizeWidget { child: Material( color: Colors.transparent, child: InkWell( - onTap: onBackTap ?? () async { - await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId3); + onTap: onBackTap ?? () { Get.back(); + ApplovinManage().showAdIfReady(ApplovinManage().adUnitId3); }, child: Padding( padding: const EdgeInsets.all(10).w, diff --git a/lib/main.dart b/lib/main.dart index d12f95e..5fb198f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -41,7 +41,7 @@ void main() async { }; // 初始化广告sdk - // await ApplovinManage().initApplovin(); + await ApplovinManage().initApplovin(); // 初始化Hive await initHive(); diff --git a/lib/modules/about/about_view.dart b/lib/modules/about/about_view.dart index 3d64955..95533a9 100644 --- a/lib/modules/about/about_view.dart +++ b/lib/modules/about/about_view.dart @@ -6,8 +6,10 @@ import 'package:hello_wallpaper/generated/assets.dart'; import 'package:hello_wallpaper/modules/about/about_controller.dart'; import 'package:hello_wallpaper/res/values/strings.dart'; -class AboutView extends GetView { - const AboutView({super.key}); +class AboutView extends StatelessWidget { + AboutView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { diff --git a/lib/modules/catalog/catalog_controller.dart b/lib/modules/catalog/catalog_controller.dart index 4623831..1549efc 100644 --- a/lib/modules/catalog/catalog_controller.dart +++ b/lib/modules/catalog/catalog_controller.dart @@ -41,13 +41,17 @@ class CatalogController extends GetxController { } } + /// 进入分类详情页面 void onTapSingleCls(WallpaperModel wallpaperModel) { - // 进入分类详情页面 Get.toNamed(AppPages.clsDet, arguments: wallpaperModel); } /// 点击壁纸 - void onTapItem(List wallpaperList, int index) { - Get.toNamed(AppPages.wallpaperDet, arguments: {'position': index, 'wallpaperList': wallpaperList}); + void onTapItem(String clsName, List wallpaperList, int index) { + Get.toNamed(AppPages.wallpaperDet, arguments: { + 'position': index, + 'wallpaperList': wallpaperList, + 'heroTag': 'Catalog-$clsName-$index', + }); } -} \ No newline at end of file +} diff --git a/lib/modules/catalog/catalog_view.dart b/lib/modules/catalog/catalog_view.dart index 0923052..a631b75 100644 --- a/lib/modules/catalog/catalog_view.dart +++ b/lib/modules/catalog/catalog_view.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:hello_wallpaper/common/components/image_network_widget.dart'; +import 'package:hello_wallpaper/common/components/keep_alive_wrapper.dart'; import 'package:hello_wallpaper/models/wallpaper_model.dart'; import 'package:hello_wallpaper/modules/catalog/catalog_controller.dart'; @@ -91,7 +92,7 @@ class CatalogView extends GetView { scrollDirection: Axis.horizontal, itemCount: wallpaperList.length, itemBuilder: (context, index) { - return _buildWallpaperItem(wallpaperList, wallpaperList[index], index); + return _buildWallpaperItem('${item.name}', wallpaperList, wallpaperList[index], index); }, separatorBuilder: (context, index) { return SizedBox(width: 8.w); @@ -103,16 +104,18 @@ class CatalogView extends GetView { ); } - Widget _buildWallpaperItem(List wallpaperList, WallpaperData item, int index) { + Widget _buildWallpaperItem(String clsName, List wallpaperList, WallpaperData item, int index) { return GestureDetector( - onTap: () => controller.onTapItem(wallpaperList, index), + onTap: () => controller.onTapItem(clsName, wallpaperList, index), child: Hero( - tag: '$index-${item.original}', - child: ImageNetworkWidget( - url: item.previewThumb, - width: 136.w, - height: double.infinity, - radius: 8.r, + tag: 'Catalog-$clsName-$index', + child: KeepAliveWrapper( + child: ImageNetworkWidget( + url: item.previewThumb, + width: 136.w, + height: double.infinity, + radius: 8.r, + ), ), ), ); diff --git a/lib/modules/cls_det/cls_det_controller.dart b/lib/modules/cls_det/cls_det_controller.dart index adef2d4..f1400cc 100644 --- a/lib/modules/cls_det/cls_det_controller.dart +++ b/lib/modules/cls_det/cls_det_controller.dart @@ -16,6 +16,10 @@ class ClsDetController extends GetxController { /// 点击壁纸 void onTapItem(int index) { - Get.toNamed(AppPages.wallpaperDet, arguments: {'position': index, 'wallpaperList': wallpaperDataList}); + Get.toNamed(AppPages.wallpaperDet, arguments: { + 'position': index, + 'wallpaperList': wallpaperDataList, + 'heroTag': 'ClsDet-$index', + }); } } diff --git a/lib/modules/cls_det/cls_det_view.dart b/lib/modules/cls_det/cls_det_view.dart index e5118c4..1b39058 100644 --- a/lib/modules/cls_det/cls_det_view.dart +++ b/lib/modules/cls_det/cls_det_view.dart @@ -7,8 +7,10 @@ import 'package:hello_wallpaper/common/components/navigation_bar/base_appbar.dar import 'package:hello_wallpaper/models/wallpaper_model.dart'; import 'package:hello_wallpaper/modules/cls_det/cls_det_controller.dart'; -class ClsDetView extends GetView { - const ClsDetView({super.key}); +class ClsDetView extends StatelessWidget { + ClsDetView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { @@ -30,11 +32,11 @@ class ClsDetView extends GetView { ); } - Widget _buildDiscoverItem(WallpaperData item, index) { + Widget _buildDiscoverItem(WallpaperData item, int index) { return GestureDetector( onTap: () => controller.onTapItem(index), child: Hero( - tag: '$index-${item.original}', + tag: 'ClsDet-$index', child: ImageNetworkWidget( url: item.previewThumb, radius: 8.r, diff --git a/lib/modules/discover/discover_controller.dart b/lib/modules/discover/discover_controller.dart index 646f1ae..7c2e223 100644 --- a/lib/modules/discover/discover_controller.dart +++ b/lib/modules/discover/discover_controller.dart @@ -14,8 +14,10 @@ class DiscoverController extends GetxController { var wallpaperDataList = []; var todayNewestList = []; WallpaperModel? todayNewestData; + /// 分类名称 var clsName = ''; + /// 页码、每页数量 int pageNum = 1; int pageSize = 10; @@ -29,14 +31,18 @@ class DiscoverController extends GetxController { void getData() { todayNewestData = HomeController.to.getRandomCls(); - if (todayNewestData != null && todayNewestData!.data != null && todayNewestData!.data!.length >= 3) { + if (todayNewestData != null && + todayNewestData!.data != null && + todayNewestData!.data!.length >= 3) { clsName = ObjUtil.getStr(todayNewestData!.name); var flatList = todayNewestData!.data!.map((e) => e).toList(); // 随机打乱此列表中的元素,再取前3个元素 todayNewestList = (flatList..shuffle()).take(3).toList(); } viewState = HomeController.to.viewState; - allWallpaper = HomeController.to.wallpaperModelList.expand((element) => element.data ?? []).toList(); + allWallpaper = HomeController.to.wallpaperModelList + .expand((element) => element.data ?? []) + .toList(); // 打乱List顺序 allWallpaper.shuffle(); _getDataToShow(); @@ -66,12 +72,15 @@ class DiscoverController extends GetxController { /// 点击今日最新 void onTapTodayNewest() { - // 进入分类详情页面 Get.toNamed(AppPages.clsDet, arguments: todayNewestData); } /// 点击壁纸 void onTapItem(int index) { - Get.toNamed(AppPages.wallpaperDet, arguments: {'position': index, 'wallpaperList': wallpaperDataList}); + Get.toNamed(AppPages.wallpaperDet, arguments: { + 'position': index, + 'wallpaperList': wallpaperDataList, + 'heroTag': 'Discover-$index', + }); } } diff --git a/lib/modules/discover/discover_view.dart b/lib/modules/discover/discover_view.dart index dbe8238..95f6946 100644 --- a/lib/modules/discover/discover_view.dart +++ b/lib/modules/discover/discover_view.dart @@ -53,11 +53,11 @@ class DiscoverView extends GetView { ); } - Widget _buildDiscoverItem(WallpaperData item, index) { + Widget _buildDiscoverItem(WallpaperData item, int index) { return GestureDetector( onTap: () => controller.onTapItem(index), child: Hero( - tag: '$index-${item.original}', + tag: 'Discover-$index', child: ImageNetworkWidget( url: item.previewThumb, radius: 8.r, diff --git a/lib/modules/favorite/favorite_controller.dart b/lib/modules/favorite/favorite_controller.dart index 75c460a..339f434 100644 --- a/lib/modules/favorite/favorite_controller.dart +++ b/lib/modules/favorite/favorite_controller.dart @@ -54,6 +54,7 @@ class FavoriteController extends GetxController { Get.toNamed(AppPages.wallpaperDet, arguments: { 'position': index, 'wallpaperList': isFavorite ? favoriteList : todayHottestList, + 'heroTag': '${isFavorite ? 'Favorite' : 'TodayHottest'}-$index', }); } @@ -89,8 +90,8 @@ class FavoriteController extends GetxController { ); } + /// 进入分类详情页面 void onTapViewMore() { - // 进入分类详情页面 Get.toNamed(AppPages.clsDet, arguments: todayHottestData); } } diff --git a/lib/modules/favorite/favorite_view.dart b/lib/modules/favorite/favorite_view.dart index d4cf63e..105f0fa 100644 --- a/lib/modules/favorite/favorite_view.dart +++ b/lib/modules/favorite/favorite_view.dart @@ -56,7 +56,7 @@ class FavoriteView extends GetView { onTap: () => controller.onTapItem(index, true), onLongPress: () => controller.onLongPress(index), child: Hero( - tag: '$index-${item.original}', + tag: 'Favorite-$index', child: ImageNetworkWidget( url: item.previewThumb, radius: 8.r, @@ -88,7 +88,7 @@ class FavoriteView extends GetView { child: GestureDetector( onTap: () => controller.onTapItem(e.key, false), child: Hero( - tag: '${e.key}-${e.value.original}', + tag: 'TodayHottest-${e.key}', child: ImageNetworkWidget( url: e.value.previewThumb, height: 183.h, diff --git a/lib/modules/home/home_controller.dart b/lib/modules/home/home_controller.dart index d4c353f..dc17b5f 100644 --- a/lib/modules/home/home_controller.dart +++ b/lib/modules/home/home_controller.dart @@ -70,9 +70,9 @@ class HomeController extends GetxController with WidgetsBindingObserver { } /// 点击BottomNavigationBar - void onTapNavigationBar(int index) async { + void onTapNavigationBar(int index) { pageController.jumpToPage(index); - await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId1); + ApplovinManage().showAdIfReady(ApplovinManage().adUnitId1); } /// 点击设置 diff --git a/lib/modules/home/home_view.dart b/lib/modules/home/home_view.dart index ea1b840..5c42392 100644 --- a/lib/modules/home/home_view.dart +++ b/lib/modules/home/home_view.dart @@ -5,8 +5,10 @@ import 'package:hello_wallpaper/common/components/keep_alive_wrapper.dart'; import 'package:hello_wallpaper/common/components/navigation_bar/title_bar_widget.dart'; import 'package:hello_wallpaper/modules/home/home_controller.dart'; -class HomeView extends GetView { - const HomeView({super.key}); +class HomeView extends StatelessWidget { + HomeView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { diff --git a/lib/modules/settings/settings_controller.dart b/lib/modules/settings/settings_controller.dart index ce8d0c7..c2b8dbe 100644 --- a/lib/modules/settings/settings_controller.dart +++ b/lib/modules/settings/settings_controller.dart @@ -23,13 +23,13 @@ class SettingsController extends GetxController { ); } if (index == 2) { - Get.toNamed(AppPages.webPage, arguments: { + Get.toNamed(AppPages.privacyPolicy, arguments: { 'title': options[index], 'url': 'https://nowwallpaperapp.mystrikingly.com/privacy', }); } if (index == 3) { - Get.toNamed(AppPages.webPage, arguments: { + Get.toNamed(AppPages.termsOfService, arguments: { 'title': options[index], 'url': 'https://nowwallpaperapp.mystrikingly.com/terms' }); diff --git a/lib/modules/settings/settings_view.dart b/lib/modules/settings/settings_view.dart index 6a3c048..978ce00 100644 --- a/lib/modules/settings/settings_view.dart +++ b/lib/modules/settings/settings_view.dart @@ -5,8 +5,10 @@ import 'package:hello_wallpaper/common/components/navigation_bar/base_appbar.dar import 'package:hello_wallpaper/generated/assets.dart'; import 'package:hello_wallpaper/modules/settings/settings_controller.dart'; -class SettingsView extends GetView { - const SettingsView({super.key}); +class SettingsView extends StatelessWidget{ + SettingsView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { diff --git a/lib/modules/splash_screen/splash_screen_controller.dart b/lib/modules/splash_screen/splash_screen_controller.dart index 20e5e9b..a9fc34f 100644 --- a/lib/modules/splash_screen/splash_screen_controller.dart +++ b/lib/modules/splash_screen/splash_screen_controller.dart @@ -6,7 +6,7 @@ import 'package:hello_wallpaper/routes/app_pages.dart'; class SplashScreenController extends GetxController { Timer? _timer; - int _timeCount = 1; + int _timeCount = 15; @override void onInit() { diff --git a/lib/modules/splash_screen/splash_screen_view.dart b/lib/modules/splash_screen/splash_screen_view.dart index 6a3a3c5..80b4cb5 100644 --- a/lib/modules/splash_screen/splash_screen_view.dart +++ b/lib/modules/splash_screen/splash_screen_view.dart @@ -5,8 +5,10 @@ import 'package:hello_wallpaper/generated/assets.dart'; import 'package:hello_wallpaper/modules/splash_screen/splash_screen_controller.dart'; import 'package:hello_wallpaper/res/values/strings.dart'; -class SplashScreenView extends GetView { - const SplashScreenView({super.key}); +class SplashScreenView extends StatelessWidget { + SplashScreenView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { diff --git a/lib/modules/wallpaper_det/wallpaper_det_controller.dart b/lib/modules/wallpaper_det/wallpaper_det_controller.dart index c34b546..f6f6f28 100644 --- a/lib/modules/wallpaper_det/wallpaper_det_controller.dart +++ b/lib/modules/wallpaper_det/wallpaper_det_controller.dart @@ -23,6 +23,7 @@ class WallpaperDetController extends GetxController { late final List globalKey; late final List wallpaperList; late final PageController pageController; + late final String heroTag; var blurs = [].obs; var position = 0; var filePath = ''; @@ -30,8 +31,10 @@ class WallpaperDetController extends GetxController { @override void onInit() { super.onInit(); - position = Get.arguments['position'] ?? 0; - wallpaperList = Get.arguments['wallpaperList'] ?? []; + Map arguments = Get.arguments ?? {}; + position = arguments['position'] ?? 0; + wallpaperList = arguments['wallpaperList'] ?? []; + heroTag = arguments['heroTag'] ?? ''; globalKey = List.generate(wallpaperList.length, (index) => GlobalKey()); blurs.value = List.generate(wallpaperList.length, (index) => false); pageController = PageController(initialPage: position); @@ -162,8 +165,8 @@ class WallpaperDetController extends GetxController { } /// 显示广告 - Future showAd() async { - await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId3); + void showAd() { Get.back(); + ApplovinManage().showAdIfReady(ApplovinManage().adUnitId3); } } diff --git a/lib/modules/wallpaper_det/wallpaper_det_view.dart b/lib/modules/wallpaper_det/wallpaper_det_view.dart index 55d3153..d14b25f 100644 --- a/lib/modules/wallpaper_det/wallpaper_det_view.dart +++ b/lib/modules/wallpaper_det/wallpaper_det_view.dart @@ -13,8 +13,10 @@ import 'package:hello_wallpaper/modules/wallpaper_det/wallpaper_det_controller.d import 'package:photo_view/photo_view.dart'; import 'package:photo_view/photo_view_gallery.dart'; -class WallpaperDetView extends GetView { - const WallpaperDetView({super.key}); +class WallpaperDetView extends StatelessWidget { + WallpaperDetView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { @@ -85,7 +87,7 @@ class WallpaperDetView extends GetView { maxScale: PhotoViewComputedScale.covered * 3, loadingBuilder: (context, event) => loadingView(), errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) => errorView, - heroAttributes: PhotoViewHeroAttributes(tag: '${controller.position}-${controller.wallpaperList[index].original}'), + heroAttributes: PhotoViewHeroAttributes(tag: controller.heroTag), ), ); }), diff --git a/lib/modules/web_page/web_page_view.dart b/lib/modules/web_page/web_page_view.dart index ac1f2c8..1261057 100644 --- a/lib/modules/web_page/web_page_view.dart +++ b/lib/modules/web_page/web_page_view.dart @@ -5,8 +5,10 @@ import 'package:hello_wallpaper/common/components/view_state_widget.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'web_page_controller.dart'; -class WebPageView extends GetView { - const WebPageView({super.key}); +class WebPageView extends StatelessWidget { + WebPageView({super.key}); + + final controller = Get.find(); @override Widget build(BuildContext context) { diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index 0a280f0..3f1dacc 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -39,44 +39,52 @@ class AppPages { /// 关于 static const about = '/about'; - /// WebView页面 - static const webPage = '/web_page'; + /// 隐私政策 + static const privacyPolicy = '/privacy_policy'; + + /// 服务条款 + static const termsOfService = '/terms_of_service'; static final routes = [ GetPage( name: splashScreen, - page: () => const SplashScreenView(), + page: () => SplashScreenView(), binding: SplashScreenBinding(), ), GetPage( name: home, - page: () => const HomeView(), + page: () => HomeView(), binding: HomeBinding(), ), GetPage( name: wallpaperDet, - page: () => const WallpaperDetView(), + page: () => WallpaperDetView(), binding: WallpaperDetBinding(), ), GetPage( name: clsDet, - page: () => const ClsDetView(), + page: () => ClsDetView(), binding: ClsDetBinding(), ), GetPage( name: settings, - page: () => const SettingsView(), + page: () => SettingsView(), binding: SettingsBinding(), ), GetPage( - name: webPage, - page: () => const WebPageView(), + name: about, + page: () => AboutView(), + binding: AboutBinding(), + ), + GetPage( + name: privacyPolicy, + page: () => WebPageView(), binding: WebPageBinding(), ), GetPage( - name: about, - page: () => const AboutView(), - binding: AboutBinding(), + name: termsOfService, + page: () => WebPageView(), + binding: WebPageBinding(), ), ]; } diff --git a/pubspec.yaml b/pubspec.yaml index b6dadcd..1f07c2e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.0+1 +version: 1.0.1+2 environment: sdk: '>=3.3.4 <4.0.0'