最后准备收工

This commit is contained in:
bluesea 2024-05-16 10:52:02 +08:00
parent 63de94ac6b
commit 19ee6ffb6f
7 changed files with 215 additions and 1 deletions

View File

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:io';
import 'package:get/get.dart';
import 'package:wallpaper/routes/app_routes.dart';
import 'package:wallpaper/utils/dbmanager.dart';
import 'package:wallpaper/utils/downloadmanager.dart';
import 'package:wallpaper/utils/local_img_manager.dart';
@ -53,5 +54,9 @@ class DownloadPageController extends GetxController {
// dataItems.value = DBManager.allImgs();
}
void goLocalScanPage(int index) {
Get.toNamed(AppRoutes.localimgscanpage,arguments: {"index":index,"dataItems":dataItems});
}
}

View File

@ -51,7 +51,7 @@ class DownloadPageView extends GetView<DownloadPageController> {
child: InkWell(
onTap: () {
//
//.....
controller.goLocalScanPage(index);
},
child: Align(
alignment: Alignment.bottomCenter,

View File

@ -0,0 +1,11 @@
import 'package:get/get.dart';
import 'localimgscanpage_controller.dart';
class LocalImgScanPageBinding extends Bindings {
@override
void dependencies() {
Get.put(LocalImgScanPageController());
}
}

View File

@ -0,0 +1,69 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:wallpaper/models/imgnetodel.dart';
import 'package:wallpaper/utils/dbmanager.dart';
import 'package:wallpaper/utils/downloadmanager.dart';
import 'dart:async';
import 'dart:io';
import 'package:wallpaper/utils/local_img_manager.dart';
class LocalImgScanPageController extends GetxController {
// late LocalImageInfo dataModel;
var dataModel = <LocalImageInfo>[].obs;
RxInt currentIndex = RxInt(0);
RxInt showAppbar = RxInt(0);//appbar显示....
late final PageController pcontroller;
Timer? _timer;
var isAndroid = Platform.isAndroid;
var albumPermisonisDenied = false.obs;
var localDir = RxString(DBManager.localDir);
@override
void onInit() async {
super.onInit();
currentIndex.value = Get.arguments["index"];
dataModel.value = Get.arguments["dataItems"];
pcontroller = PageController(initialPage: currentIndex.value);
}
@override
void onClose() {
cancelTimer();
super.onClose();
}
void cancelTimer() {
if (_timer != null) {
_timer!.cancel();
_timer = null;
}
}
Future < void> saveImgToAlbum() async {
String imgUrl = '$localDir/${dataModel[currentIndex.value].localUrl!}';
await DownloadManager.saveNetworkImage(imgUrl);
//android,
//....
//
}
void showAppbarAction(){
showAppbar.value = 1;
cancelTimer();
const oneSec = Duration(seconds: 3);
_timer = Timer.periodic(oneSec, (Timer timer) {
timer.cancel();
_timer = null;
showAppbar.value = 0;
});
}
Future <void> setWallpaper() async {
String imgUrl = '$localDir/${dataModel[currentIndex.value].localUrl!}';
await DownloadManager.setWallpaperNative(imgUrl);
}
}

View File

@ -0,0 +1,117 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:wallpaper/models/imgnetodel.dart';
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart';
import 'package:wallpaper/pages/localimgscanpage/localimgscanpage_controller.dart';
class LocalImgScanPageView extends GetView<LocalImgScanPageController> {
// final NetImgCategory dataModel;
// final int currentIndex;
// const ImgScanPageView({super.key,required this.dataModel,required this.currentIndex});
@override
Widget build(BuildContext context) {
return Obx(() => Scaffold(
extendBodyBehindAppBar: true,
backgroundColor: Colors.black,
appBar:PreferredSize(
preferredSize: const Size.fromHeight(44),
child: Obx(() => controller.showAppbar.value == 0 ? Text("") :AppBar(
centerTitle: true,
title: const Text("查看大图"),
backgroundColor: Colors.transparent,
foregroundColor: Colors.white,
)),
),
body: Stack(
children: [
PhotoViewGallery.builder(
scrollPhysics: const BouncingScrollPhysics(),
builder: (BuildContext context, int index) {
return PhotoViewGalleryPageOptions(
imageProvider:FileImage(File('${controller.localDir}/${controller.dataModel[index].localUrl!}')),
initialScale: PhotoViewComputedScale.contained * 0.8,
minScale: PhotoViewComputedScale.contained*0.4,
maxScale: PhotoViewComputedScale.contained * 4,
onTapDown: (context, details, controllerValue) {
controller.showAppbarAction();
},
// heroAttributes: PhotoViewHeroAttributes(tag: galleryItems[index].id),
);
},
pageController: controller.pcontroller,
itemCount: controller.dataModel.length,
loadingBuilder: (context, event) => Center(
child: SizedBox(
width: 20.0,
height: 20.0,
child: CircularProgressIndicator(
value: event == null
? 0
: event.cumulativeBytesLoaded / event.expectedTotalBytes!,
),
),
),
// backgroundDecoration: widget.backgroundDecoration,
// pageController: widget.pageController,
onPageChanged: onPageChanged,
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
color: Colors.black.withAlpha(160),
height: 100,
width: double.infinity,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
// column来说就是水平方向的布局方式
crossAxisAlignment: CrossAxisAlignment.center,
children: getButtomWidge(),
),
),
),
],
),
));
}
void onPageChanged(int index){
print("切换了图片....");
controller.currentIndex.value = index;
}
List<Widget> getButtomWidge(){
List<Widget> wg = [
const Spacer(
),
IconButton(onPressed:() {
print("保存壁纸");
controller.saveImgToAlbum();
}, icon: const Icon(Icons.album),color: Colors.white,),
const Spacer(
),
];
if (controller.isAndroid) {
wg.add(IconButton(onPressed:() {
controller.setWallpaper();
}, icon: const Icon(Icons.wallpaper),color: Colors.white,));
wg.add(const Spacer(
));
}
return wg;
}
}

View File

@ -3,6 +3,8 @@ import 'package:wallpaper/pages/imgcategorypage/imgcategorypage_binding.dart';
import 'package:wallpaper/pages/imgcategorypage/imgcategorypage_view.dart';
import 'package:wallpaper/pages/imgscanpage/imgscanpage_binding.dart';
import 'package:wallpaper/pages/imgscanpage/imgscanpage_view.dart';
import 'package:wallpaper/pages/localimgscanpage/localimgscanpage_binding.dart';
import 'package:wallpaper/pages/localimgscanpage/localimgscanpage_view.dart';
import 'package:wallpaper/pages/mypage/mypage_view.dart';
import 'package:wallpaper/pages/tabarpage/tabarpage_binding.dart';
@ -25,6 +27,7 @@ class AppRoutes {
static const imgcategorypage = "/ImgCategoryPage";
static const imgscanpage = "/imgscanpage";
static const webviewpage = "/webviewpage";
static const localimgscanpage = "/localimgscanpage";
// static const mypage = "/mypage";
static final routes= [
GetPage(
@ -56,6 +59,12 @@ class AppRoutes {
bindings: [WebviewPageBinding()],
),
GetPage(
name: localimgscanpage,
page: ()=> LocalImgScanPageView(),
bindings: [LocalImgScanPageBinding()],
),
];
}

View File

@ -1,6 +1,7 @@
import 'dart:io';
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:wallpaper/utils/local_img_manager.dart';
part 'dbmanager.g.dart';
@HiveType(typeId: 0)
@ -17,8 +18,10 @@ class LocalImageInfo extends HiveObject {
class DBManager {
static late Box<LocalImageInfo> box;
static late String localDir;
static Future<void> initAdapter()async {
DBManager.localDir = await LocalImgManager.getImgLocalDir();
await Hive.initFlutter();
Hive.registerAdapter(LocalImageInfoAdapter());
var downloadAlbums = await Hive.openBox<LocalImageInfo>('DownloadAlbums');