image_viewer_controller.dart 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. late PageController pageController;
  19. @override
  20. void onInit() {
  21. super.onInit();
  22. _initArgs();
  23. }
  24. @override
  25. void onClose() {
  26. // 销毁每个PhotoViewController
  27. pageController.dispose();
  28. super.onClose();
  29. }
  30. /// 初始化参数
  31. void _initArgs() {
  32. final arguments = Get.arguments as Map<String, dynamic>?;
  33. // 图片预览列表
  34. if (arguments?[AppPageArguments.imageViewerItemList] == null) {
  35. AtmobLog.i(_tag, '没有传递 imageViewerItemList 参数');
  36. } else {
  37. final List<ImageViewerItem>? argumentList =
  38. arguments?[AppPageArguments.imageViewerItemList]
  39. as List<ImageViewerItem>?;
  40. if (argumentList != null) {
  41. imageViewerItemList.assignAll(argumentList);
  42. AtmobLog.i(_tag, "imageViewerItemList: $imageViewerItemList");
  43. }
  44. }
  45. // 当前索引
  46. if (arguments?[AppPageArguments.index] == null) {
  47. AtmobLog.i(_tag, '没有传递 index 参数');
  48. } else {
  49. final int? argumentIndex = arguments?[AppPageArguments.index] as int?;
  50. if (argumentIndex != null) {
  51. currentIndex.value = argumentIndex;
  52. AtmobLog.i(_tag, "index: $currentIndex");
  53. }
  54. }
  55. // 创建PageController,并设置当前页的索引
  56. pageController = PageController(initialPage: currentIndex.value);
  57. }
  58. /// 返回
  59. void clickBack() {
  60. Get.back();
  61. }
  62. /// 更新当前索引
  63. void updateCurrentIndex(int newIndex) {
  64. currentIndex.value = newIndex;
  65. }
  66. /// 获取对应类型的图片ImageProvider
  67. ImageProvider getImageProvider(ImageViewerItem item) {
  68. switch (item.type) {
  69. case ImageType.asset:
  70. return AssetImage(item.path);
  71. case ImageType.network:
  72. return CachedNetworkImageProvider(item.path);
  73. case ImageType.file:
  74. return FileImage(File(item.path));
  75. }
  76. }
  77. }