123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import 'package:flutter/material.dart';
- import 'package:image_preview/preview.dart';
- import 'package:image_preview/preview_data.dart';
- import 'package:shared/utils/date_time_utils.dart';
- import 'package:shared/utils/util.dart';
- import '../directory/directory_util.dart';
- class ImagePreviewEngine {
-
- static void singleImagePreview(
- BuildContext context,
- String url, {
- String? heroTag,
- void Function(String? url)? onLongPressAction,
- Widget? Function(int index)? tipWidget,
- }) {
- String path;
-
- if (isNetworkUrl(url)) {
-
- String fileName = extractFileName(url);
-
- path = DirectoryUtil.getTempPath(category: 'Pictures', fileName: fileName) ?? "";
- } else {
-
- path = url;
- }
-
- openPreviewPage(
- Navigator.of(context),
- data: PreviewData(
- type: Type.image,
- heroTag: heroTag ?? '',
- image: ImageData(
- url: url,
- path: path,
- ),
- ),
- tipWidget: tipWidget,
- onLongPressHandler: (context, data) {
- onLongPressAction?.call(data.image?.url);
- },
- );
- }
-
- static void multipleImagePreview(
- BuildContext context,
- List<String?> urls, {
- List<String>? heroes,
- void Function(String? url)? onLongPressAction,
- void Function(int index)? onPageChanged,
- Widget? Function(int index)? tipWidget,
- }) {
-
- List<String> filteredUrls = urls.where((url) => url != null).cast<String>().toList();
- List<PreviewData> previewDataList = filteredUrls.asMap().entries.map((entry) {
- int index = entry.key;
- String url = entry.value;
- String path;
- if (isNetworkUrl(url)) {
- String fileName = extractFileName(url);
- path = DirectoryUtil.getTempPath(category: 'Pictures', fileName: fileName) ?? "";
- } else {
- path = url;
- }
- return PreviewData(
- type: Type.image,
- heroTag: heroes != null && heroes.length > index ? heroes[index] : index.toString(),
- image: ImageData(
- url: url,
- path: path,
- ),
- );
- }).toList();
-
- openPreviewPages(
- Navigator.of(context),
- data: previewDataList,
- tipWidget: tipWidget,
- onPageChanged: onPageChanged,
- onLongPressHandler: (context, data) {
- onLongPressAction?.call(data.image?.url);
- },
- );
- }
-
- static String extractFileName(String url) {
-
- if (!url.contains('/')) {
- return DateTimeUtils.getNowDateMs().toString();
- }
-
- String fileName = url.split('/').last;
-
- if (Utils.isEmpty(fileName)) {
- return DateTimeUtils.getNowDateMs().toString();
- }
- return fileName;
- }
-
- static bool isNetworkUrl(String url) {
- return url.startsWith('http://') || url.startsWith('https://');
- }
- }
|