image_viewer_controller.dart 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import 'dart:io';
  2. import 'package:cached_network_image/cached_network_image.dart';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:get/get.dart';
  5. import 'package:injectable/injectable.dart';
  6. import 'package:keyboard/base/base_controller.dart';
  7. import 'package:photo_view/photo_view.dart';
  8. import '../../../data/bean/image_viewer_item.dart';
  9. import '../../../router/app_page_arguments.dart';
  10. import '../../../utils/atmob_log.dart';
  11. /// 图片预览控制器
  12. @injectable
  13. class ImageViewerController extends BaseController {
  14. final String _tag = "ImageViewerController";
  15. /// 要预览的图片列表
  16. RxList<ImageViewerItem> imageViewerItemList = <ImageViewerItem>[].obs;
  17. /// 当前的查看的图片的索引
  18. Rx<int> currentIndex = 0.obs;
  19. late PageController pageController;
  20. /// 缓存每一页的PhotoViewController
  21. final Map<int, PhotoViewController> photoViewControllers = {};
  22. @override
  23. void onInit() {
  24. super.onInit();
  25. _initArgs();
  26. }
  27. @override
  28. void onClose() {
  29. // 销毁每个PhotoViewController
  30. pageController.dispose();
  31. for (var controller in photoViewControllers.values) {
  32. controller.dispose();
  33. }
  34. super.onClose();
  35. }
  36. /// 初始化参数
  37. void _initArgs() {
  38. final arguments = Get.arguments as Map<String, dynamic>?;
  39. // 图片预览列表
  40. if (arguments?[AppPageArguments.imageViewerItemList] == null) {
  41. AtmobLog.i(_tag, '没有传递 imageViewerItemList 参数');
  42. } else {
  43. final List<ImageViewerItem>? argumentList =
  44. arguments?[AppPageArguments.imageViewerItemList]
  45. as List<ImageViewerItem>?;
  46. if (argumentList != null) {
  47. imageViewerItemList.assignAll(argumentList);
  48. AtmobLog.i(_tag, "imageViewerItemList: $imageViewerItemList");
  49. }
  50. }
  51. // 当前索引
  52. if (arguments?[AppPageArguments.index] == null) {
  53. AtmobLog.i(_tag, '没有传递 index 参数');
  54. } else {
  55. final int? argumentIndex = arguments?[AppPageArguments.index] as int?;
  56. if (argumentIndex != null) {
  57. currentIndex.value = argumentIndex;
  58. AtmobLog.i(_tag, "index: $currentIndex");
  59. }
  60. }
  61. // 创建PageController,并设置当前页的索引
  62. pageController = PageController(initialPage: currentIndex.value);
  63. }
  64. /// 返回
  65. void clickBack() {
  66. Get.back();
  67. }
  68. /// 更新当前索引
  69. void updateCurrentIndex(int newIndex) {
  70. currentIndex.value = newIndex;
  71. }
  72. /// 获取对应类型的图片ImageProvider
  73. ImageProvider getImageProvider(ImageViewerItem item) {
  74. switch (item.type) {
  75. case ImageType.asset:
  76. return AssetImage(item.path);
  77. case ImageType.network:
  78. return CachedNetworkImageProvider(item.path);
  79. case ImageType.file:
  80. return FileImage(File(item.path));
  81. }
  82. }
  83. }