2022-12-25 12:30:20 +03:00
|
|
|
library gallery_picker;
|
|
|
|
|
|
|
|
export 'models/config.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
export 'models/media_file.dart';
|
|
|
|
export 'models/mode.dart';
|
|
|
|
export 'models/medium.dart';
|
|
|
|
export 'models/gallery_media.dart';
|
|
|
|
export 'models/gallery_album.dart';
|
|
|
|
export 'user_widgets/thumbnail_media.dart';
|
|
|
|
export 'user_widgets/album_categories_view.dart';
|
2022-12-31 16:56:09 +03:00
|
|
|
export 'user_widgets/album_media_view.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
export 'user_widgets/date_category_view.dart';
|
2022-12-29 12:12:06 +03:00
|
|
|
export 'user_widgets/thumbnail_album.dart';
|
2022-12-31 16:43:05 +03:00
|
|
|
export 'user_widgets/gallery_picker_builder.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
export 'user_widgets/photo_provider.dart';
|
|
|
|
export 'user_widgets/video_provider.dart';
|
|
|
|
export 'user_widgets/media_provider.dart';
|
|
|
|
export 'views/bottom_sheet.dart';
|
|
|
|
export 'views/gallery_picker_view/gallery_picker_view.dart';
|
2022-12-25 12:30:20 +03:00
|
|
|
import 'package:flutter/material.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
import 'package:gallery_picker/models/gallery_media.dart';
|
2022-12-25 12:30:20 +03:00
|
|
|
import 'package:get/get.dart';
|
|
|
|
import '../../controller/gallery_controller.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
import 'controller/bottom_sheet_controller.dart';
|
|
|
|
import 'controller/picker_listener.dart';
|
2022-12-25 12:30:20 +03:00
|
|
|
import 'models/config.dart';
|
|
|
|
import 'models/media_file.dart';
|
2022-12-29 08:45:28 +03:00
|
|
|
import 'views/gallery_picker_view/gallery_picker_view.dart';
|
2022-12-25 12:30:20 +03:00
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
class GalleryPicker {
|
|
|
|
static Stream<List<MediaFile>> get listenSelectedFiles {
|
|
|
|
var controller = Get.put(PickerListener());
|
|
|
|
return controller.stream;
|
|
|
|
}
|
2022-12-25 12:30:20 +03:00
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
static void disposeSelectedFilesListener() {
|
|
|
|
if (GetInstance().isRegistered<PickerListener>()) {
|
|
|
|
Get.find<PickerListener>().dispose();
|
|
|
|
}
|
|
|
|
}
|
2022-12-25 12:30:20 +03:00
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
static void dispose() {
|
2022-12-25 12:30:20 +03:00
|
|
|
if (GetInstance().isRegistered<PhoneGalleryController>()) {
|
2022-12-29 08:45:28 +03:00
|
|
|
Get.find<PhoneGalleryController>().disposeController();
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
2022-12-29 08:45:28 +03:00
|
|
|
if (GetInstance().isRegistered<BottomSheetController>()) {
|
|
|
|
Get.find<BottomSheetController>().disposeController();
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-31 16:43:05 +03:00
|
|
|
static Future<List<MediaFile>?> pickMedia(
|
2022-12-29 08:45:28 +03:00
|
|
|
{Config? config,
|
|
|
|
bool startWithRecent = false,
|
2022-12-31 16:43:05 +03:00
|
|
|
bool singleMedia = false,
|
|
|
|
List<MediaFile>? initSelectedMedia,
|
|
|
|
List<MediaFile>? extraRecentMedia,
|
2022-12-29 08:45:28 +03:00
|
|
|
required BuildContext context}) async {
|
2022-12-31 16:43:05 +03:00
|
|
|
List<MediaFile>? media;
|
2022-12-29 08:45:28 +03:00
|
|
|
await Navigator.push(
|
|
|
|
context,
|
|
|
|
MaterialPageRoute(
|
|
|
|
builder: (context) => GalleryPickerView(
|
2022-12-31 16:43:05 +03:00
|
|
|
onSelect: (mediaTmp) {
|
|
|
|
media = mediaTmp;
|
2022-12-29 08:45:28 +03:00
|
|
|
},
|
|
|
|
config: config,
|
2022-12-31 16:43:05 +03:00
|
|
|
singleMedia: singleMedia,
|
|
|
|
initSelectedMedia: initSelectedMedia,
|
|
|
|
extraRecentMedia: extraRecentMedia,
|
2022-12-29 08:45:28 +03:00
|
|
|
startWithRecent: startWithRecent,
|
|
|
|
)),
|
|
|
|
);
|
2022-12-31 16:43:05 +03:00
|
|
|
return media;
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
|
2022-12-31 16:43:05 +03:00
|
|
|
static Future<void> pickMediaWithBuilder(
|
2022-12-29 08:45:28 +03:00
|
|
|
{Config? config,
|
2022-12-31 16:43:05 +03:00
|
|
|
required Widget Function(List<MediaFile> media, BuildContext context)?
|
|
|
|
multipleMediaBuilder,
|
2022-12-29 08:45:28 +03:00
|
|
|
Widget Function(String tag, MediaFile media, BuildContext context)?
|
|
|
|
heroBuilder,
|
2022-12-31 16:43:05 +03:00
|
|
|
bool singleMedia = false,
|
|
|
|
List<MediaFile>? initSelectedMedia,
|
|
|
|
List<MediaFile>? extraRecentMedia,
|
2022-12-29 08:45:28 +03:00
|
|
|
bool startWithRecent = false,
|
|
|
|
required BuildContext context}) async {
|
|
|
|
await Navigator.push(
|
|
|
|
context,
|
|
|
|
MaterialPageRoute(
|
|
|
|
builder: (context) => GalleryPickerView(
|
2022-12-31 16:43:05 +03:00
|
|
|
onSelect: (media) {},
|
|
|
|
multipleMediaBuilder: multipleMediaBuilder,
|
2022-12-29 08:45:28 +03:00
|
|
|
heroBuilder: heroBuilder,
|
2022-12-31 16:43:05 +03:00
|
|
|
singleMedia: singleMedia,
|
2022-12-29 08:45:28 +03:00
|
|
|
config: config,
|
2022-12-31 16:43:05 +03:00
|
|
|
initSelectedMedia: initSelectedMedia,
|
|
|
|
extraRecentMedia: extraRecentMedia,
|
2022-12-29 08:45:28 +03:00
|
|
|
startWithRecent: startWithRecent,
|
|
|
|
)),
|
|
|
|
);
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
static Future<void> openSheet() async {
|
|
|
|
if (GetInstance().isRegistered<BottomSheetController>()) {
|
|
|
|
await Get.find<BottomSheetController>().open();
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
static Future<void> closeSheet() async {
|
|
|
|
if (GetInstance().isRegistered<BottomSheetController>()) {
|
|
|
|
await Get.find<BottomSheetController>().close();
|
|
|
|
}
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
|
2022-12-29 08:45:28 +03:00
|
|
|
static bool get isSheetOpened {
|
|
|
|
if (GetInstance().isRegistered<BottomSheetController>()) {
|
|
|
|
return Get.find<BottomSheetController>().sheetController.isExpanded;
|
2022-12-25 12:30:20 +03:00
|
|
|
} else {
|
2022-12-29 08:45:28 +03:00
|
|
|
return false;
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|
|
|
|
}
|
2022-12-29 08:45:28 +03:00
|
|
|
|
|
|
|
static Future<GalleryMedia?> get collectGallery async {
|
|
|
|
return await PhoneGalleryController.collectGallery;
|
|
|
|
}
|
2022-12-25 12:30:20 +03:00
|
|
|
}
|