最后准备收工
This commit is contained in:
parent
63de94ac6b
commit
19ee6ffb6f
@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:wallpaper/routes/app_routes.dart';
|
||||||
import 'package:wallpaper/utils/dbmanager.dart';
|
import 'package:wallpaper/utils/dbmanager.dart';
|
||||||
import 'package:wallpaper/utils/downloadmanager.dart';
|
import 'package:wallpaper/utils/downloadmanager.dart';
|
||||||
import 'package:wallpaper/utils/local_img_manager.dart';
|
import 'package:wallpaper/utils/local_img_manager.dart';
|
||||||
@ -53,5 +54,9 @@ class DownloadPageController extends GetxController {
|
|||||||
// dataItems.value = DBManager.allImgs();
|
// dataItems.value = DBManager.allImgs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void goLocalScanPage(int index) {
|
||||||
|
Get.toNamed(AppRoutes.localimgscanpage,arguments: {"index":index,"dataItems":dataItems});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -51,7 +51,7 @@ class DownloadPageView extends GetView<DownloadPageController> {
|
|||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () {
|
onTap: () {
|
||||||
//前往看大图
|
//前往看大图
|
||||||
//.....
|
controller.goLocalScanPage(index);
|
||||||
},
|
},
|
||||||
child: Align(
|
child: Align(
|
||||||
alignment: Alignment.bottomCenter,
|
alignment: Alignment.bottomCenter,
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
|
import 'localimgscanpage_controller.dart';
|
||||||
|
|
||||||
|
class LocalImgScanPageBinding extends Bindings {
|
||||||
|
@override
|
||||||
|
void dependencies() {
|
||||||
|
Get.put(LocalImgScanPageController());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
117
wallpaper/lib/pages/localimgscanpage/localimgscanpage_view.dart
Normal file
117
wallpaper/lib/pages/localimgscanpage/localimgscanpage_view.dart
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,6 +3,8 @@ import 'package:wallpaper/pages/imgcategorypage/imgcategorypage_binding.dart';
|
|||||||
import 'package:wallpaper/pages/imgcategorypage/imgcategorypage_view.dart';
|
import 'package:wallpaper/pages/imgcategorypage/imgcategorypage_view.dart';
|
||||||
import 'package:wallpaper/pages/imgscanpage/imgscanpage_binding.dart';
|
import 'package:wallpaper/pages/imgscanpage/imgscanpage_binding.dart';
|
||||||
import 'package:wallpaper/pages/imgscanpage/imgscanpage_view.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/mypage/mypage_view.dart';
|
||||||
|
|
||||||
import 'package:wallpaper/pages/tabarpage/tabarpage_binding.dart';
|
import 'package:wallpaper/pages/tabarpage/tabarpage_binding.dart';
|
||||||
@ -25,6 +27,7 @@ class AppRoutes {
|
|||||||
static const imgcategorypage = "/ImgCategoryPage";
|
static const imgcategorypage = "/ImgCategoryPage";
|
||||||
static const imgscanpage = "/imgscanpage";
|
static const imgscanpage = "/imgscanpage";
|
||||||
static const webviewpage = "/webviewpage";
|
static const webviewpage = "/webviewpage";
|
||||||
|
static const localimgscanpage = "/localimgscanpage";
|
||||||
// static const mypage = "/mypage";
|
// static const mypage = "/mypage";
|
||||||
static final routes= [
|
static final routes= [
|
||||||
GetPage(
|
GetPage(
|
||||||
@ -56,6 +59,12 @@ class AppRoutes {
|
|||||||
bindings: [WebviewPageBinding()],
|
bindings: [WebviewPageBinding()],
|
||||||
),
|
),
|
||||||
|
|
||||||
|
GetPage(
|
||||||
|
name: localimgscanpage,
|
||||||
|
page: ()=> LocalImgScanPageView(),
|
||||||
|
bindings: [LocalImgScanPageBinding()],
|
||||||
|
),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:hive_flutter/hive_flutter.dart';
|
import 'package:hive_flutter/hive_flutter.dart';
|
||||||
|
import 'package:wallpaper/utils/local_img_manager.dart';
|
||||||
part 'dbmanager.g.dart';
|
part 'dbmanager.g.dart';
|
||||||
|
|
||||||
@HiveType(typeId: 0)
|
@HiveType(typeId: 0)
|
||||||
@ -17,8 +18,10 @@ class LocalImageInfo extends HiveObject {
|
|||||||
|
|
||||||
class DBManager {
|
class DBManager {
|
||||||
static late Box<LocalImageInfo> box;
|
static late Box<LocalImageInfo> box;
|
||||||
|
static late String localDir;
|
||||||
|
|
||||||
static Future<void> initAdapter()async {
|
static Future<void> initAdapter()async {
|
||||||
|
DBManager.localDir = await LocalImgManager.getImgLocalDir();
|
||||||
await Hive.initFlutter();
|
await Hive.initFlutter();
|
||||||
Hive.registerAdapter(LocalImageInfoAdapter());
|
Hive.registerAdapter(LocalImageInfoAdapter());
|
||||||
var downloadAlbums = await Hive.openBox<LocalImageInfo>('DownloadAlbums');
|
var downloadAlbums = await Hive.openBox<LocalImageInfo>('DownloadAlbums');
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user