diff --git a/wallpaper/lib/pages/downloadpage/downloadpage_controller.dart b/wallpaper/lib/pages/downloadpage/downloadpage_controller.dart index 03cb5be..68cd24f 100644 --- a/wallpaper/lib/pages/downloadpage/downloadpage_controller.dart +++ b/wallpaper/lib/pages/downloadpage/downloadpage_controller.dart @@ -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}); + } + } \ No newline at end of file diff --git a/wallpaper/lib/pages/downloadpage/downloadpage_view.dart b/wallpaper/lib/pages/downloadpage/downloadpage_view.dart index 73c1782..5908202 100644 --- a/wallpaper/lib/pages/downloadpage/downloadpage_view.dart +++ b/wallpaper/lib/pages/downloadpage/downloadpage_view.dart @@ -51,7 +51,7 @@ class DownloadPageView extends GetView { child: InkWell( onTap: () { //前往看大图 - //..... + controller.goLocalScanPage(index); }, child: Align( alignment: Alignment.bottomCenter, diff --git a/wallpaper/lib/pages/localimgscanpage/localimgscanpage_binding.dart b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_binding.dart new file mode 100644 index 0000000..70179ee --- /dev/null +++ b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_binding.dart @@ -0,0 +1,11 @@ +import 'package:get/get.dart'; + +import 'localimgscanpage_controller.dart'; + +class LocalImgScanPageBinding extends Bindings { + @override + void dependencies() { + Get.put(LocalImgScanPageController()); + } + +} \ No newline at end of file diff --git a/wallpaper/lib/pages/localimgscanpage/localimgscanpage_controller.dart b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_controller.dart new file mode 100644 index 0000000..cac1526 --- /dev/null +++ b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_controller.dart @@ -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 = [].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 setWallpaper() async { + String imgUrl = '$localDir/${dataModel[currentIndex.value].localUrl!}'; + await DownloadManager.setWallpaperNative(imgUrl); + } +} \ No newline at end of file diff --git a/wallpaper/lib/pages/localimgscanpage/localimgscanpage_view.dart b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_view.dart new file mode 100644 index 0000000..0cd9c20 --- /dev/null +++ b/wallpaper/lib/pages/localimgscanpage/localimgscanpage_view.dart @@ -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 { + // 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 getButtomWidge(){ + List 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; + } +} \ No newline at end of file diff --git a/wallpaper/lib/routes/app_routes.dart b/wallpaper/lib/routes/app_routes.dart index 6318b15..a30c764 100644 --- a/wallpaper/lib/routes/app_routes.dart +++ b/wallpaper/lib/routes/app_routes.dart @@ -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()], + ), + ]; } \ No newline at end of file diff --git a/wallpaper/lib/utils/dbmanager.dart b/wallpaper/lib/utils/dbmanager.dart index 426866f..81a0298 100644 --- a/wallpaper/lib/utils/dbmanager.dart +++ b/wallpaper/lib/utils/dbmanager.dart @@ -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 box; + static late String localDir; static Future initAdapter()async { + DBManager.localDir = await LocalImgManager.getImgLocalDir(); await Hive.initFlutter(); Hive.registerAdapter(LocalImageInfoAdapter()); var downloadAlbums = await Hive.openBox('DownloadAlbums');