WallPaper_FSX_Flutter/lib/modules/wallpaper_det/wallpaper_det_view.dart
2024-05-13 13:44:27 +08:00

96 lines
3.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:photo_view/photo_view.dart';
import 'package:photo_view/photo_view_gallery.dart';
import 'package:wallpaper/common/components/base_appbar.dart';
import 'package:wallpaper/common/components/view_state_widget.dart';
import 'package:wallpaper/modules/wallpaper_det/wallpaper_det_controller.dart';
class WallpaperDetView extends GetView<WallpaperDetController> {
const WallpaperDetView({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
extendBodyBehindAppBar: true,
appBar: const BaseAppBar('', backgroundColor: Colors.transparent, iconColor: Colors.white),
body: Stack(
alignment: Alignment.center,
children: [
_photoView(),
_bottomOption(),
],
),
);
}
/// 图片查看器
Widget _photoView() {
return PhotoViewGallery.builder(
itemCount: controller.wallpaperList.length,
builder: (BuildContext context, int index) {
return PhotoViewGalleryPageOptions(
imageProvider: NetworkImage('${controller.wallpaperList[index].original}'),
initialScale: PhotoViewComputedScale.contained,
minScale: PhotoViewComputedScale.contained * 0.5,
maxScale: PhotoViewComputedScale.covered * 3,
heroAttributes: PhotoViewHeroAttributes(tag: controller.wallpaperList[index]),
// onTapUp: (context, details, controllerValue) => Get.back(),
);
},
loadingBuilder: (context, event) => loadingView(
// value: event == null ? 0 : event.cumulativeBytesLoaded / (event.expectedTotalBytes ?? 1),
),
scrollPhysics: const BouncingScrollPhysics(),
backgroundDecoration: const BoxDecoration(color: Colors.black),
pageController: controller.pageController,
onPageChanged: (i) => controller.onPageChanged(i),
);
}
/// 底部选项
Widget _bottomOption() {
return Positioned(
bottom: ScreenUtil().bottomBarHeight + 20.h,
child: Container(
width: 0.94.sw,
height: kBottomNavigationBarHeight,
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.9),
borderRadius: BorderRadius.circular(8).r,
),
child: Row(
children: controller.options.asMap().entries.map((e) {
return Expanded(
child: Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(8).r,
onTap: () => controller.optionOnTap(e.key),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(e.value.icons, color: Colors.black),
Text(
e.value.option,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.black,
fontSize: 14.sp,
fontWeight: FontWeight.w500,
),
),
],
),
),
),
);
}).toList(),
),
),
);
}
}