197 lines
6.1 KiB
Dart
197 lines
6.1 KiB
Dart
import 'dart:io';
|
||
|
||
import 'package:flip_card/flip_card_controller.dart';
|
||
import 'package:flutter/material.dart';
|
||
import 'package:flutter/services.dart';
|
||
import 'package:get/get.dart';
|
||
import 'package:image_gallery_saver/image_gallery_saver.dart';
|
||
import 'package:permission_handler/permission_handler.dart';
|
||
import 'package:wallpaperx/applovin_max/applovin_manage.dart';
|
||
import 'package:wallpaperx/common/components/dialog/bottomsheet_dialog.dart';
|
||
import 'package:wallpaperx/common/components/easy_loading.dart';
|
||
import 'package:wallpaperx/common/storage/favorite_data.dart';
|
||
import 'package:wallpaperx/common/storage/history_data.dart';
|
||
import 'package:wallpaperx/common/utils/device_info_util.dart';
|
||
import 'package:wallpaperx/common/utils/download_util.dart';
|
||
import 'package:wallpaperx/common/utils/log_print.dart';
|
||
import 'package:wallpaperx/common/utils/obj_util.dart';
|
||
import 'package:wallpaperx/common/utils/permission_util.dart';
|
||
import 'package:wallpaperx/common/utils/wallpaper_manage.dart';
|
||
import 'package:wallpaperx/entity/generate_info_model.dart';
|
||
import 'package:wallpaperx/entity/image_model.dart';
|
||
import 'package:wallpaperx/page/favorite/favorite_controller.dart';
|
||
import 'package:wallpaperx/page/history/history_controller.dart';
|
||
|
||
class WallpaperDetV2Controller extends GetxController {
|
||
RxList wallpaperList = [].obs;
|
||
var position = 0;
|
||
var isSetHistory = true;
|
||
var filePath = '';
|
||
late final PageController pageController;
|
||
late final FlipCardController flipCardController;
|
||
RxBool isFavorite = false.obs;
|
||
RxBool showImgInfo = false.obs;
|
||
|
||
@override
|
||
void onInit() {
|
||
super.onInit();
|
||
Map<String, dynamic> arguments = Get.arguments ?? {};
|
||
position = arguments['position'] ?? 0;
|
||
isSetHistory = arguments['isSetHistory'] ?? true;
|
||
wallpaperList = arguments['wallpaperList'] ?? <ImageModel>[];
|
||
pageController = PageController(initialPage: position);
|
||
flipCardController = FlipCardController();
|
||
LogPrint.d(wallpaperList[position].imageUrl);
|
||
int index = FavoriteData().getWallpaperData().indexWhere(
|
||
(element) => element.imageUrl == wallpaperList[position].imageUrl);
|
||
if (index != -1) {
|
||
isFavorite.value = true;
|
||
}
|
||
}
|
||
|
||
@override
|
||
void onClose() {
|
||
pageController.dispose();
|
||
super.onClose();
|
||
}
|
||
|
||
@override
|
||
void onReady() {
|
||
super.onReady();
|
||
if (isSetHistory) {
|
||
setHistory(position);
|
||
}
|
||
}
|
||
|
||
/// 图片切换
|
||
void onPageChanged(int index) {
|
||
update(["background"]);
|
||
position = index;
|
||
filePath = '';
|
||
if (isSetHistory) {
|
||
setHistory(position);
|
||
}
|
||
update(["buildImageInfoV2"]);
|
||
int indexOf = FavoriteData().getWallpaperData().indexWhere(
|
||
(element) => element.imageUrl == wallpaperList[position].imageUrl);
|
||
if (indexOf != -1) {
|
||
isFavorite.value = true;
|
||
} else {
|
||
isFavorite.value = false;
|
||
}
|
||
}
|
||
|
||
/// 下载
|
||
void onTapDownload() {
|
||
if (Get.isSnackbarOpen) {
|
||
return;
|
||
}
|
||
DownloadUtil.downloadFile('${wallpaperList[position].imageUrl}',
|
||
(savePath) async {
|
||
filePath = savePath;
|
||
bool canSave = true;
|
||
if (Platform.isAndroid) {
|
||
// 在Android 10及以上版本,由于引入了分区存储(Scoped Storage)机制,如果应用只是需要访问媒体文件,而不是整个外部存储
|
||
// ImageGallerySaver使用MediaStore API来添加图片到相册,无需请求存储权限
|
||
// Android 10以下版本,需要申请存储权限
|
||
int sdkVersion = await DeviceInfoUtil.getAndroidSystemVersion();
|
||
if (sdkVersion < 29) {
|
||
canSave = await PermissionUtil.checkPermission([Permission.storage]);
|
||
}
|
||
}
|
||
if (canSave) {
|
||
final result = await ImageGallerySaver.saveFile(savePath);
|
||
if (result['isSuccess']) {
|
||
toast('Saved to album');
|
||
} else {
|
||
toast('Unable to save to album');
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/// 收藏
|
||
void onTapFavorite() {
|
||
ImageModel imageModel = wallpaperList[position];
|
||
// 未收藏过的才保存
|
||
int index = FavoriteData()
|
||
.getWallpaperData()
|
||
.indexWhere((element) => element.imageUrl == imageModel.imageUrl);
|
||
LogPrint.d(index);
|
||
if (index == -1) {
|
||
FavoriteData().setWallpaperData(imageModel);
|
||
isFavorite.value = true;
|
||
} else {
|
||
FavoriteData().delete(index);
|
||
isFavorite.value = false;
|
||
}
|
||
// 刷新收藏列表
|
||
if (Get.isRegistered<FavoriteController>()) {
|
||
FavoriteController.to.getData();
|
||
if (wallpaperList.isEmpty) {
|
||
Get.back();
|
||
} else {
|
||
int indexOf = FavoriteData().getWallpaperData().indexWhere(
|
||
(element) => element.imageUrl == wallpaperList[position].imageUrl);
|
||
if (indexOf != -1) {
|
||
isFavorite.value = true;
|
||
} else {
|
||
isFavorite.value = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 浏览记录
|
||
void setHistory(index) {
|
||
ImageModel imageModel = wallpaperList[index];
|
||
HistoryData().setWallpaperData(imageModel);
|
||
// 刷新浏览列表
|
||
if (Get.isRegistered<HistoryController>()) {
|
||
HistoryController.to.getData();
|
||
}
|
||
}
|
||
|
||
/// 设置壁纸
|
||
void onTapSetWallpaper() async {
|
||
// await ApplovinManage().showAdIfReady(ApplovinManage().adUnitId2);
|
||
BottomSheetDialog.show((location) async {
|
||
if (ObjUtil.isNotEmptyStr(filePath)) {
|
||
WallpaperManage.setWallpaper(filePath, location);
|
||
} else {
|
||
DownloadUtil.downloadFile('${wallpaperList[position].imageUrl}',
|
||
(savePath) async {
|
||
filePath = savePath;
|
||
WallpaperManage.setWallpaper(filePath, location);
|
||
});
|
||
}
|
||
});
|
||
}
|
||
|
||
/// 跳转分类明细
|
||
void onTapToClsDet(title) {
|
||
Get.back(result: title);
|
||
}
|
||
|
||
/// 翻转
|
||
void onTapToggleCard() {
|
||
flipCardController.toggleCard();
|
||
}
|
||
|
||
/// 复制
|
||
void clipboard(GenerateInfoModel? generateInfo) {
|
||
Map textMap = {
|
||
"Prompt": generateInfo!.prompt,
|
||
"Negative Prompt": generateInfo.negativePrompt,
|
||
};
|
||
Clipboard.setData(ClipboardData(text: textMap.toString()));
|
||
toast("Copied");
|
||
}
|
||
|
||
/// 显示广告
|
||
void showAd() {
|
||
Get.back();
|
||
// ApplovinManage().showAdIfReady(ApplovinManage().adUnitId3);
|
||
}
|
||
}
|