image_viewer_controller.dart 2.7 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 '../../../data/bean/image_viewer_item.dart';
  8. import '../../../router/app_page_arguments.dart';
  9. import '../../../utils/atmob_log.dart';
  10. /// 图片预览控制器
  11. @injectable
  12. class ImageViewerController extends BaseController {
  13. final String _tag = "ImageViewerController";
  14. /// 要预览的图片列表
  15. RxList<ImageViewerItem> imageViewerItemList = <ImageViewerItem>[].obs;
  16. /// 当前的查看的图片的索引
  17. Rx<int> currentIndex = 0.obs;
  18. /// 是否显示标题栏
  19. RxBool isShowTitleBar = true.obs;
  20. late PageController pageController;
  21. @override
  22. void onInit() {
  23. super.onInit();
  24. _initArgs();
  25. }
  26. @override
  27. void onClose() {
  28. // 销毁每个PhotoViewController
  29. pageController.dispose();
  30. super.onClose();
  31. }
  32. /// 初始化参数
  33. void _initArgs() {
  34. final arguments = Get.arguments as Map<String, dynamic>?;
  35. // 图片预览列表
  36. if (arguments?[AppPageArguments.imageViewerItemList] == null) {
  37. AtmobLog.i(_tag, '没有传递 imageViewerItemList 参数');
  38. } else {
  39. final List<ImageViewerItem>? argumentList =
  40. arguments?[AppPageArguments.imageViewerItemList]
  41. as List<ImageViewerItem>?;
  42. if (argumentList != null) {
  43. imageViewerItemList.assignAll(argumentList);
  44. AtmobLog.i(_tag, "imageViewerItemList: $imageViewerItemList");
  45. }
  46. }
  47. // 当前索引
  48. if (arguments?[AppPageArguments.index] == null) {
  49. AtmobLog.i(_tag, '没有传递 index 参数');
  50. } else {
  51. final int? argumentIndex = arguments?[AppPageArguments.index] as int?;
  52. if (argumentIndex != null) {
  53. currentIndex.value = argumentIndex;
  54. AtmobLog.i(_tag, "index: $currentIndex");
  55. }
  56. }
  57. // 创建PageController,并设置当前页的索引
  58. pageController = PageController(initialPage: currentIndex.value);
  59. }
  60. /// 返回
  61. void clickBack() {
  62. Get.back();
  63. }
  64. /// 更新当前索引
  65. void updateCurrentIndex(int newIndex) {
  66. currentIndex.value = newIndex;
  67. }
  68. /// 切换标题栏的显示和隐藏
  69. void toggleShowTitleBar() {
  70. isShowTitleBar.value = !isShowTitleBar.value;
  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. }