Compare commits
10 Commits
70914f22c3
...
1769177c2a
Author | SHA1 | Date | |
---|---|---|---|
|
1769177c2a | ||
|
78f7eedef4 | ||
|
28ac91d99b | ||
|
b4a1f5e10f | ||
|
64348adb3c | ||
464eebc0de | |||
|
6d52175798 | ||
|
34a7382193 | ||
|
340fdf0e41 | ||
|
a8f7405938 |
@ -1,11 +1,13 @@
|
|||||||
# This is a generated file; do not edit or check into version control.
|
# This is a generated file; do not edit or check into version control.
|
||||||
permission_handler=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler-10.2.0\\
|
device_info_plus=/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/
|
||||||
permission_handler_android=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_android-10.2.0\\
|
permission_handler=/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler-11.4.0/
|
||||||
permission_handler_apple=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_apple-9.0.8\\
|
permission_handler_android=/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_android-12.1.0/
|
||||||
permission_handler_windows=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_windows-0.1.2\\
|
permission_handler_apple=/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.7/
|
||||||
photo_gallery=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\photo_gallery-1.2.2\\
|
permission_handler_html=/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_html-0.1.3+5/
|
||||||
video_player=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\video_player-2.6.1\\
|
permission_handler_windows=/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_windows-0.2.1/
|
||||||
video_player_android=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\video_player_android-2.4.4\\
|
photo_gallery=/Users/steeve/Dev/packages/photo_gallery/
|
||||||
video_player_avfoundation=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\video_player_avfoundation-2.4.3\\
|
video_player=/Users/steeve/.pub-cache/hosted/pub.dev/video_player-2.9.5/
|
||||||
video_player_web=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\video_player_web-2.0.16\\
|
video_player_android=/Users/steeve/.pub-cache/hosted/pub.dev/video_player_android-2.8.2/
|
||||||
video_thumbnail=C:\\Users\\MrWorldWide\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\video_thumbnail-0.5.3\\
|
video_player_avfoundation=/Users/steeve/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.7.1/
|
||||||
|
video_player_web=/Users/steeve/.pub-cache/hosted/pub.dev/video_player_web-2.3.4/
|
||||||
|
video_thumbnail=/Users/steeve/.pub-cache/git/video_thumbnail-6c353ef859b2c44936e7179f9859bdf075ce9cac/
|
||||||
|
@ -1 +1 @@
|
|||||||
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"permission_handler_apple","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_apple-9.0.8\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\photo_gallery-1.2.2\\\\","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_avfoundation-2.4.3\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"permission_handler_android","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_android-10.2.0\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\photo_gallery-1.2.2\\\\","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_android-2.4.4\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[{"name":"permission_handler_windows","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_windows-0.1.2\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"video_player_web","path":"C:\\\\Users\\\\MrWorldWide\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\video_player_web-2.0.16\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"photo_gallery","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"video_thumbnail","dependencies":[]}],"date_created":"2023-05-16 15:46:42.053591","version":"3.10.0"}
|
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_apple","path":"/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_apple-9.4.7/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"photo_gallery","path":"/Users/steeve/Dev/packages/photo_gallery/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"/Users/steeve/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.7.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_thumbnail","path":"/Users/steeve/.pub-cache/git/video_thumbnail-6c353ef859b2c44936e7179f9859bdf075ce9cac/","native_build":true,"dependencies":[],"dev_dependency":false}],"android":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_android","path":"/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_android-12.1.0/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"photo_gallery","path":"/Users/steeve/Dev/packages/photo_gallery/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_android","path":"/Users/steeve/.pub-cache/hosted/pub.dev/video_player_android-2.8.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_thumbnail","path":"/Users/steeve/.pub-cache/git/video_thumbnail-6c353ef859b2c44936e7179f9859bdf075ce9cac/","native_build":true,"dependencies":[],"dev_dependency":false}],"macos":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","native_build":true,"dependencies":[],"dev_dependency":false},{"name":"video_player_avfoundation","path":"/Users/steeve/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.7.1/","shared_darwin_source":true,"native_build":true,"dependencies":[],"dev_dependency":false}],"linux":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","native_build":false,"dependencies":[],"dev_dependency":false}],"windows":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","native_build":false,"dependencies":[],"dev_dependency":false},{"name":"permission_handler_windows","path":"/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_windows-0.2.1/","native_build":true,"dependencies":[],"dev_dependency":false}],"web":[{"name":"device_info_plus","path":"/Users/steeve/.pub-cache/hosted/pub.dev/device_info_plus-9.1.2/","dependencies":[],"dev_dependency":false},{"name":"permission_handler_html","path":"/Users/steeve/.pub-cache/hosted/pub.dev/permission_handler_html-0.1.3+5/","dependencies":[],"dev_dependency":false},{"name":"video_player_web","path":"/Users/steeve/.pub-cache/hosted/pub.dev/video_player_web-2.3.4/","dependencies":[],"dev_dependency":false}]},"dependencyGraph":[{"name":"device_info_plus","dependencies":[]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_html","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_html","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"photo_gallery","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"video_thumbnail","dependencies":[]}],"date_created":"2025-04-21 14:57:11.366154","version":"3.29.0","swift_package_manager_enabled":{"ios":false,"macos":false}}
|
15
CHANGELOG.md
15
CHANGELOG.md
@ -171,5 +171,18 @@
|
|||||||
|
|
||||||
## 0.4.8
|
## 0.4.8
|
||||||
|
|
||||||
* Dart 3 & Flutter 3.10 compatibility
|
* Fixed permission issue for android sdk 33 and above.
|
||||||
|
* https://github.com/FlutterWay/gallery_picker/issues/1 is fix
|
||||||
|
|
||||||
|
## 0.5.0
|
||||||
|
|
||||||
|
* list named months has been removed from Config model because now it automatically adjusts itself according to the locale value. or you can give the locale yourself
|
||||||
|
* Locale parameter added to GalleryPicker's functions
|
||||||
|
* kotlin version upgraded
|
||||||
|
* version of packages upgraded
|
||||||
|
|
||||||
|
## 0.5.1
|
||||||
|
|
||||||
|
* readme changed
|
||||||
|
|
||||||
|
|
29
README.md
29
README.md
@ -16,6 +16,8 @@ Gallery Picker is a flutter package that will allow you to pick media file(s), m
|
|||||||
|
|
||||||
[✔] BottomSheet layout
|
[✔] BottomSheet layout
|
||||||
|
|
||||||
|
[✔] Auto localization for recent tabs
|
||||||
|
|
||||||
[✔] Fetch all media files from your phone
|
[✔] Fetch all media files from your phone
|
||||||
|
|
||||||
[✔] Comprehensively customizable design (desitination page, hero destination page...)
|
[✔] Comprehensively customizable design (desitination page, hero destination page...)
|
||||||
@ -64,9 +66,16 @@ You could find the code samples of the given gifs below in `/example/lib/example
|
|||||||
|
|
||||||
#### Android
|
#### Android
|
||||||
Add uses-permission `android/app/src/main/AndroidManifest.xml` file
|
Add uses-permission `android/app/src/main/AndroidManifest.xml` file
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
```
|
```
|
||||||
|
for android sdk 33 and above
|
||||||
|
```xml
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
|
||||||
|
```
|
||||||
|
|
||||||
#### Ios
|
#### Ios
|
||||||
Add these configurations to your `ios/Runner/info.plist` file
|
Add these configurations to your `ios/Runner/info.plist` file
|
||||||
```xml
|
```xml
|
||||||
@ -96,7 +105,7 @@ List<MediaFile>? media = await GalleryPicker.pickMedia(context: context);
|
|||||||
### Get All Media Files in Gallery
|
### Get All Media Files in Gallery
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
GalleryMedia? allmedia = await GalleryPicker.collectGallery;
|
GalleryMedia? allmedia = await GalleryPicker.collectGallery();
|
||||||
```
|
```
|
||||||
|
|
||||||
### Listen selected files inside gallery picker
|
### Listen selected files inside gallery picker
|
||||||
@ -245,20 +254,6 @@ List<MediaFile>? media = await GalleryPicker.pickMedia(
|
|||||||
lastWeek: "Last Week",
|
lastWeek: "Last Week",
|
||||||
tapPhotoSelect: "Tap photo to select",
|
tapPhotoSelect: "Tap photo to select",
|
||||||
selected: "Selected",
|
selected: "Selected",
|
||||||
months: [
|
|
||||||
"January",
|
|
||||||
"February",
|
|
||||||
"March",
|
|
||||||
"April",
|
|
||||||
"May",
|
|
||||||
"June",
|
|
||||||
"July",
|
|
||||||
"August",
|
|
||||||
"September",
|
|
||||||
"October",
|
|
||||||
"November",
|
|
||||||
"December"
|
|
||||||
],
|
|
||||||
selectIcon: Container(
|
selectIcon: Container(
|
||||||
width: 50,
|
width: 50,
|
||||||
height: 50,
|
height: 50,
|
||||||
@ -424,7 +419,7 @@ BottomSheetBuilder(
|
|||||||
View all media files in the album sorted by its creation date
|
View all media files in the album sorted by its creation date
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
GalleryMedia? allmedia = await GalleryPicker.collectGallery;
|
GalleryMedia? allmedia = await GalleryPicker.collectGallery();
|
||||||
```
|
```
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
@ -438,7 +433,7 @@ AlbumMediaView(
|
|||||||
View all album categories
|
View all album categories
|
||||||
|
|
||||||
```dart
|
```dart
|
||||||
GalleryMedia? allmedia = await GalleryPicker.collectGallery;
|
GalleryMedia? allmedia = await GalleryPicker.collectGallery();
|
||||||
```
|
```
|
||||||
```dart
|
```dart
|
||||||
AlbumCategoriesView(
|
AlbumCategoriesView(
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
package="com.example.gallery_picker_example">
|
package="com.example.gallery_picker_example">
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
<application
|
<application
|
||||||
android:label="gallery_picker_example"
|
android:label="gallery_picker_example"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.10'
|
ext.kotlin_version = '1.9.0'
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -1 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
|
@ -1 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
#include "Generated.xcconfig"
|
#include "Generated.xcconfig"
|
||||||
|
43
example/ios/Podfile
Normal file
43
example/ios/Podfile
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Uncomment this line to define a global platform for your project
|
||||||
|
# platform :ios, '12.0'
|
||||||
|
|
||||||
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|
||||||
|
project 'Runner', {
|
||||||
|
'Debug' => :debug,
|
||||||
|
'Profile' => :release,
|
||||||
|
'Release' => :release,
|
||||||
|
}
|
||||||
|
|
||||||
|
def flutter_root
|
||||||
|
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
|
||||||
|
unless File.exist?(generated_xcode_build_settings_path)
|
||||||
|
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
|
||||||
|
end
|
||||||
|
|
||||||
|
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||||
|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||||
|
return matches[1].strip if matches
|
||||||
|
end
|
||||||
|
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
|
||||||
|
end
|
||||||
|
|
||||||
|
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||||
|
|
||||||
|
flutter_ios_podfile_setup
|
||||||
|
|
||||||
|
target 'Runner' do
|
||||||
|
use_frameworks!
|
||||||
|
|
||||||
|
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
|
||||||
|
target 'RunnerTests' do
|
||||||
|
inherit! :search_paths
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
post_install do |installer|
|
||||||
|
installer.pods_project.targets.each do |target|
|
||||||
|
flutter_additional_ios_build_settings(target)
|
||||||
|
end
|
||||||
|
end
|
@ -1,8 +1,8 @@
|
|||||||
|
// ignore: depend_on_referenced_packages
|
||||||
|
import 'package:camera/camera.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
// ignore: depend_on_referenced_packages
|
||||||
import 'package:gallery_picker/gallery_picker.dart';
|
import 'package:gallery_picker/gallery_picker.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
|
||||||
import 'package:camera/camera.dart';
|
|
||||||
import 'package:gallery_picker_example/examples/multiple_medias.dart';
|
import 'package:gallery_picker_example/examples/multiple_medias.dart';
|
||||||
|
|
||||||
class WhatsappPickPhoto extends StatefulWidget {
|
class WhatsappPickPhoto extends StatefulWidget {
|
||||||
@ -32,7 +32,7 @@ class _WhatsappPickPhotoState extends State<WhatsappPickPhoto> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> fetchMedias() async {
|
Future<void> fetchMedias() async {
|
||||||
gallery = await GalleryPicker.initializeGallery;
|
gallery = await GalleryPicker.initializeGallery();
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
// ignore: depend_on_referenced_packages
|
// ignore: depend_on_referenced_packages
|
||||||
import 'package:gallery_picker/gallery_picker.dart';
|
import 'package:gallery_picker/gallery_picker.dart';
|
||||||
|
|
||||||
import 'examples/multiple_medias.dart';
|
import 'examples/multiple_medias.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
@ -227,6 +228,7 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
|
|
||||||
Future<void> getGalleryMedia() async {
|
Future<void> getGalleryMedia() async {
|
||||||
// ignore: unused_local_variable
|
// ignore: unused_local_variable
|
||||||
GalleryMedia? allmedia = await GalleryPicker.collectGallery;
|
GalleryMedia? allmedia =
|
||||||
|
await GalleryPicker.collectGallery(locale: const Locale("tr"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,26 +5,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: async
|
name: async
|
||||||
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.12.0"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: boolean_selector
|
name: boolean_selector
|
||||||
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.2"
|
||||||
bottom_sheet_scaffold:
|
bottom_sheet_scaffold:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: bottom_sheet_scaffold
|
name: bottom_sheet_scaffold
|
||||||
sha256: d34341831cf9ec8d42f28ca094a0362d7914f83e580d50405f340d24a1a37c9e
|
sha256: "9bb9d4c8d3854b6e22c47c819b6e119e50dc4fbbec89e03a357888c1ced7b5bf"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.6"
|
version: "0.1.9"
|
||||||
camera:
|
camera:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -69,26 +69,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: characters
|
name: characters
|
||||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.4.0"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: clock
|
name: clock
|
||||||
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.2"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
|
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.17.1"
|
version: "1.19.1"
|
||||||
cross_file:
|
cross_file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -109,18 +109,50 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: cupertino_icons
|
name: cupertino_icons
|
||||||
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
|
sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.6"
|
||||||
|
device_info_plus:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus
|
||||||
|
sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "9.1.2"
|
||||||
|
device_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus_platform_interface
|
||||||
|
sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: fake_async
|
name: fake_async
|
||||||
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.2"
|
||||||
|
ffi:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: ffi
|
||||||
|
sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.2"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.0"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -158,15 +190,15 @@ packages:
|
|||||||
path: ".."
|
path: ".."
|
||||||
relative: true
|
relative: true
|
||||||
source: path
|
source: path
|
||||||
version: "0.4.8"
|
version: "0.5.1"
|
||||||
get:
|
get:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: get
|
name: get
|
||||||
sha256: "2ba20a47c8f1f233bed775ba2dd0d3ac97b4cf32fc17731b3dfc672b06b0e92a"
|
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.6.5"
|
version: "4.6.6"
|
||||||
html:
|
html:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -179,10 +211,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: intl
|
name: intl
|
||||||
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91"
|
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.17.0"
|
version: "0.19.0"
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -191,6 +223,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.7"
|
version: "0.6.7"
|
||||||
|
leak_tracker:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: leak_tracker
|
||||||
|
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "10.0.8"
|
||||||
|
leak_tracker_flutter_testing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: leak_tracker_flutter_testing
|
||||||
|
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.9"
|
||||||
|
leak_tracker_testing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: leak_tracker_testing
|
||||||
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -203,90 +259,97 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: matcher
|
name: matcher
|
||||||
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
|
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.15"
|
version: "0.12.17"
|
||||||
material_color_utilities:
|
material_color_utilities:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
|
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.2.0"
|
version: "0.11.1"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
|
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.1"
|
version: "1.16.0"
|
||||||
page_transition:
|
page_transition:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: page_transition
|
name: page_transition
|
||||||
sha256: a7694bc120b7064a7f57c336914bb8885acf4f70bb3772c30c2fcfe6a85e43ff
|
sha256: dee976b1f23de9bbef5cd512fe567e9f6278caee11f5eaca9a2115c19dc49ef6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.9"
|
version: "2.1.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path
|
name: path
|
||||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.3"
|
version: "1.9.1"
|
||||||
permission_handler:
|
permission_handler:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler
|
name: permission_handler
|
||||||
sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8"
|
sha256: "74e962b7fad7ff75959161bb2c0ad8fe7f2568ee82621c9c2660b751146bfe44"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.2.0"
|
version: "11.3.0"
|
||||||
permission_handler_android:
|
permission_handler_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2"
|
sha256: "1acac6bae58144b442f11e66621c062aead9c99841093c38f5bcdcc24c1c3474"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.2.0"
|
version: "12.0.5"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_apple
|
name: permission_handler_apple
|
||||||
sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85
|
sha256: bdafc6db74253abb63907f4e357302e6bb786ab41465e8635f362ee71fd8707b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.0.8"
|
version: "9.4.0"
|
||||||
|
permission_handler_html:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: permission_handler_html
|
||||||
|
sha256: "54bf176b90f6eddd4ece307e2c06cf977fb3973719c35a93b85cc7093eb6070d"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.1"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84"
|
sha256: "23dfba8447c076ab5be3dee9ceb66aad345c4a648f0cac292c77b1eb0e800b78"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.9.0"
|
version: "4.2.0"
|
||||||
permission_handler_windows:
|
permission_handler_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_windows
|
name: permission_handler_windows
|
||||||
sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b
|
sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.2"
|
version: "0.2.1"
|
||||||
photo_gallery:
|
photo_gallery:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: photo_gallery
|
path: "../../photo_gallery"
|
||||||
sha256: f8daca29042710ba2836a0666f0d18b320e286b5843dcd68d6f1980a2de0c8b2
|
relative: true
|
||||||
url: "https://pub.dev"
|
source: path
|
||||||
source: hosted
|
version: "2.2.1"
|
||||||
version: "1.2.2"
|
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -307,31 +370,31 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.0"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: source_span
|
name: source_span
|
||||||
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
|
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.1"
|
version: "1.10.1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
|
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.12.1"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stream_channel
|
name: stream_channel
|
||||||
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
|
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.4"
|
||||||
stream_transform:
|
stream_transform:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -344,26 +407,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.4.1"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: term_glyph
|
name: term_glyph
|
||||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.1"
|
version: "1.2.2"
|
||||||
test_api:
|
test_api:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
|
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.1"
|
version: "0.7.4"
|
||||||
transparent_image:
|
transparent_image:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -384,10 +447,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: video_player
|
name: video_player
|
||||||
sha256: de95f0e9405f29b5582573d4166132e71f83b3158aac14e8ee5767a54f4f1fbd
|
sha256: fbf28ce8bcfe709ad91b5789166c832cb7a684d14f571a81891858fefb5bb1c2
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.6.1"
|
version: "2.8.2"
|
||||||
video_player_android:
|
video_player_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -400,10 +463,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: video_player_avfoundation
|
name: video_player_avfoundation
|
||||||
sha256: af308d08c672d5ff718c60127665249617c37a709cb8f0a18dd28a0360299b7c
|
sha256: "309e3962795e761be010869bae65c0b0e45b5230c5cee1bec72197ca7db040ed"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.4.3"
|
version: "2.5.6"
|
||||||
video_player_platform_interface:
|
video_player_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -423,11 +486,36 @@ packages:
|
|||||||
video_thumbnail:
|
video_thumbnail:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: video_thumbnail
|
path: "."
|
||||||
sha256: "3455c189d3f0bb4e3fc2236475aa84fe598b9b2d0e08f43b9761f5bc44210016"
|
ref: HEAD
|
||||||
|
resolved-ref: "6c353ef859b2c44936e7179f9859bdf075ce9cac"
|
||||||
|
url: "https://github.com/Shahidbangash/video_thumbnail.git"
|
||||||
|
source: git
|
||||||
|
version: "0.5.3"
|
||||||
|
vm_service:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vm_service
|
||||||
|
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.5.3"
|
version: "14.3.1"
|
||||||
|
win32:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32
|
||||||
|
sha256: dfdf0136e0aa7a1b474ea133e67cb0154a0acd2599c4f3ada3b49d38d38793ee
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.5"
|
||||||
|
win32_registry:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32_registry
|
||||||
|
sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.1"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.0.0-0 <4.0.0"
|
dart: ">=3.7.0-0 <4.0.0"
|
||||||
flutter: ">=3.3.0"
|
flutter: ">=3.18.0-18.0.pre.54"
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import 'package:photo_gallery/photo_gallery.dart';
|
import 'package:photo_gallery/photo_gallery.dart';
|
||||||
|
|
||||||
import '../models/config.dart';
|
import '../models/config.dart';
|
||||||
import '../models/gallery_media.dart';
|
import '../models/gallery_media.dart';
|
||||||
|
import '../models/media_file.dart';
|
||||||
import '/models/gallery_album.dart';
|
import '/models/gallery_album.dart';
|
||||||
import '/models/medium.dart';
|
import '/models/medium.dart';
|
||||||
import '../models/media_file.dart';
|
|
||||||
import 'picker_listener.dart';
|
import 'picker_listener.dart';
|
||||||
|
|
||||||
class PhoneGalleryController extends GetxController {
|
class PhoneGalleryController extends GetxController {
|
||||||
@ -168,32 +171,43 @@ class PhoneGalleryController extends GetxController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Future<bool> promptPermissionSetting() async {
|
static Future<bool> promptPermissionSetting() async {
|
||||||
await PhoneGalleryController.requestStatus(Permission.storage);
|
if (Platform.isAndroid) {
|
||||||
if (Platform.isIOS) {
|
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
|
||||||
await PhoneGalleryController.requestStatus(Permission.photos);
|
final AndroidDeviceInfo info = await deviceInfoPlugin.androidInfo;
|
||||||
|
if (info.version.sdkInt >= 33) {
|
||||||
|
if (await PhoneGalleryController.requestPermission(Permission.photos)) {
|
||||||
|
return await PhoneGalleryController.requestPermission(
|
||||||
|
Permission.videos);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (Platform.isIOS &&
|
} else {
|
||||||
await Permission.storage.isGranted &&
|
return await PhoneGalleryController.requestPermission(
|
||||||
await Permission.photos.isGranted ||
|
Permission.storage);
|
||||||
Platform.isAndroid && await Permission.storage.isGranted) {
|
}
|
||||||
return true;
|
}
|
||||||
|
bool statusStorage =
|
||||||
|
await PhoneGalleryController.requestPermission(Permission.storage);
|
||||||
|
if (statusStorage) {
|
||||||
|
return await PhoneGalleryController.requestPermission(Permission.photos);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<void> requestStatus(Permission permission) async {
|
static Future<bool> requestPermission(Permission permission) async {
|
||||||
while (true) {
|
if (await permission.isGranted) {
|
||||||
try {
|
return true;
|
||||||
await permission.request();
|
} else {
|
||||||
break;
|
var result = await permission.request();
|
||||||
} catch (e) {
|
if (result == PermissionStatus.granted) {
|
||||||
await Future.delayed(const Duration(milliseconds: 500), () {});
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> initializeAlbums() async {
|
Future<void> initializeAlbums({Locale? locale}) async {
|
||||||
_media = await PhoneGalleryController.collectGallery;
|
_media = await PhoneGalleryController.collectGallery(locale: locale);
|
||||||
if (_media != null) {
|
if (_media != null) {
|
||||||
if (_extraRecentMedia != null) {
|
if (_extraRecentMedia != null) {
|
||||||
GalleryAlbum? recentTmp = recent;
|
GalleryAlbum? recentTmp = recent;
|
||||||
@ -206,21 +220,39 @@ class PhoneGalleryController extends GetxController {
|
|||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
} else {
|
} else {
|
||||||
permissionGranted = false;
|
permissionGranted = false;
|
||||||
permissionListener();
|
permissionListener(locale: locale);
|
||||||
}
|
}
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void permissionListener() {
|
void permissionListener({Locale? locale}) {
|
||||||
Timer.periodic(const Duration(seconds: 1), (timer) async {
|
Timer.periodic(const Duration(seconds: 1), (timer) async {
|
||||||
if (await Permission.storage.isGranted) {
|
if (await isGranted()) {
|
||||||
initializeAlbums();
|
initializeAlbums(locale: locale);
|
||||||
timer.cancel();
|
timer.cancel();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<GalleryMedia?> get collectGallery async {
|
Future<bool> isGranted() async {
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
final DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
|
||||||
|
final AndroidDeviceInfo info = await deviceInfoPlugin.androidInfo;
|
||||||
|
if (info.version.sdkInt >= 33) {
|
||||||
|
if (await Permission.photos.isGranted) {
|
||||||
|
return await Permission.videos.isGranted;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return await Permission.storage.isGranted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (await Permission.storage.isGranted) &&
|
||||||
|
(await Permission.photos.isGranted);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<GalleryMedia?> collectGallery({Locale? locale}) async {
|
||||||
if (await promptPermissionSetting()) {
|
if (await promptPermissionSetting()) {
|
||||||
List<GalleryAlbum> tempGalleryAlbums = [];
|
List<GalleryAlbum> tempGalleryAlbums = [];
|
||||||
|
|
||||||
@ -228,16 +260,15 @@ class PhoneGalleryController extends GetxController {
|
|||||||
await PhotoGallery.listAlbums(mediumType: MediumType.image);
|
await PhotoGallery.listAlbums(mediumType: MediumType.image);
|
||||||
List<Album> videoAlbums =
|
List<Album> videoAlbums =
|
||||||
await PhotoGallery.listAlbums(mediumType: MediumType.video);
|
await PhotoGallery.listAlbums(mediumType: MediumType.video);
|
||||||
|
|
||||||
for (var photoAlbum in photoAlbums) {
|
for (var photoAlbum in photoAlbums) {
|
||||||
GalleryAlbum entireGalleryAlbum = GalleryAlbum.album(photoAlbum);
|
GalleryAlbum entireGalleryAlbum = GalleryAlbum.album(photoAlbum);
|
||||||
await entireGalleryAlbum.initialize();
|
await entireGalleryAlbum.initialize(locale: locale);
|
||||||
entireGalleryAlbum.setType = AlbumType.image;
|
entireGalleryAlbum.setType = AlbumType.image;
|
||||||
if (videoAlbums.any((element) => element.name == photoAlbum.name)) {
|
if (videoAlbums.any((element) => element.id == photoAlbum.id)) {
|
||||||
Album videoAlbum = videoAlbums
|
Album videoAlbum =
|
||||||
.singleWhere((element) => element.name == photoAlbum.name);
|
videoAlbums.singleWhere((element) => element.id == photoAlbum.id);
|
||||||
GalleryAlbum videoGalleryAlbum = GalleryAlbum.album(videoAlbum);
|
GalleryAlbum videoGalleryAlbum = GalleryAlbum.album(videoAlbum);
|
||||||
await videoGalleryAlbum.initialize();
|
await videoGalleryAlbum.initialize(locale: locale);
|
||||||
DateTime? lastPhotoDate = entireGalleryAlbum.lastDate;
|
DateTime? lastPhotoDate = entireGalleryAlbum.lastDate;
|
||||||
DateTime? lastVideoDate = videoGalleryAlbum.lastDate;
|
DateTime? lastVideoDate = videoGalleryAlbum.lastDate;
|
||||||
|
|
||||||
@ -265,7 +296,7 @@ class PhoneGalleryController extends GetxController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var file in videoGalleryAlbum.files) {
|
for (var file in videoGalleryAlbum.files) {
|
||||||
entireGalleryAlbum.addFile(file);
|
entireGalleryAlbum.addFile(file, locale: locale);
|
||||||
}
|
}
|
||||||
entireGalleryAlbum.sort();
|
entireGalleryAlbum.sort();
|
||||||
entireGalleryAlbum.setType = AlbumType.mixed;
|
entireGalleryAlbum.setType = AlbumType.mixed;
|
||||||
@ -275,7 +306,7 @@ class PhoneGalleryController extends GetxController {
|
|||||||
}
|
}
|
||||||
for (var videoAlbum in videoAlbums) {
|
for (var videoAlbum in videoAlbums) {
|
||||||
GalleryAlbum galleryVideoAlbum = GalleryAlbum.album(videoAlbum);
|
GalleryAlbum galleryVideoAlbum = GalleryAlbum.album(videoAlbum);
|
||||||
await galleryVideoAlbum.initialize();
|
await galleryVideoAlbum.initialize(locale: locale);
|
||||||
galleryVideoAlbum.setType = AlbumType.video;
|
galleryVideoAlbum.setType = AlbumType.video;
|
||||||
tempGalleryAlbums.add(galleryVideoAlbum);
|
tempGalleryAlbums.add(galleryVideoAlbum);
|
||||||
}
|
}
|
||||||
|
@ -1,36 +1,39 @@
|
|||||||
library gallery_picker;
|
library gallery_picker;
|
||||||
|
|
||||||
export 'models/config.dart';
|
|
||||||
export 'models/media_file.dart';
|
|
||||||
export 'models/mode.dart';
|
|
||||||
export 'models/medium.dart';
|
|
||||||
export 'models/gallery_media.dart';
|
|
||||||
export 'models/gallery_album.dart';
|
|
||||||
export 'package:page_transition/src/enum.dart';
|
|
||||||
export 'user_widgets/thumbnail_media.dart';
|
|
||||||
export 'user_widgets/album_categories_view.dart';
|
|
||||||
export 'user_widgets/album_media_view.dart';
|
|
||||||
export 'user_widgets/date_category_view.dart';
|
|
||||||
export 'user_widgets/thumbnail_album.dart';
|
|
||||||
export 'user_widgets/gallery_picker_builder.dart';
|
|
||||||
export 'user_widgets/photo_provider.dart';
|
|
||||||
export 'user_widgets/video_provider.dart';
|
|
||||||
export 'user_widgets/media_provider.dart';
|
|
||||||
export 'views/picker_scaffold.dart';
|
|
||||||
export 'package:bottom_sheet_scaffold/models/sheet_status.dart';
|
|
||||||
export 'package:bottom_sheet_scaffold/views/bottom_sheet_builder.dart';
|
|
||||||
export 'views/gallery_picker_view/gallery_picker_view.dart';
|
|
||||||
import 'package:bottom_sheet_scaffold/bottom_sheet_scaffold.dart';
|
import 'package:bottom_sheet_scaffold/bottom_sheet_scaffold.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gallery_picker/models/gallery_media.dart';
|
import 'package:gallery_picker/models/gallery_media.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:page_transition/page_transition.dart';
|
import 'package:page_transition/page_transition.dart';
|
||||||
|
|
||||||
import '../../controller/gallery_controller.dart';
|
import '../../controller/gallery_controller.dart';
|
||||||
import 'controller/picker_listener.dart';
|
import 'controller/picker_listener.dart';
|
||||||
import 'models/config.dart';
|
import 'models/config.dart';
|
||||||
import 'models/media_file.dart';
|
import 'models/media_file.dart';
|
||||||
import 'views/gallery_picker_view/gallery_picker_view.dart';
|
import 'views/gallery_picker_view/gallery_picker_view.dart';
|
||||||
|
|
||||||
|
export 'package:bottom_sheet_scaffold/models/sheet_status.dart';
|
||||||
|
export 'package:bottom_sheet_scaffold/views/bottom_sheet_builder.dart';
|
||||||
|
export 'package:page_transition/src/enum.dart';
|
||||||
|
|
||||||
|
export 'models/config.dart';
|
||||||
|
export 'models/gallery_album.dart';
|
||||||
|
export 'models/gallery_media.dart';
|
||||||
|
export 'models/media_file.dart';
|
||||||
|
export 'models/medium.dart';
|
||||||
|
export 'models/mode.dart';
|
||||||
|
export 'user_widgets/album_categories_view.dart';
|
||||||
|
export 'user_widgets/album_media_view.dart';
|
||||||
|
export 'user_widgets/date_category_view.dart';
|
||||||
|
export 'user_widgets/gallery_picker_builder.dart';
|
||||||
|
export 'user_widgets/media_provider.dart';
|
||||||
|
export 'user_widgets/photo_provider.dart';
|
||||||
|
export 'user_widgets/thumbnail_album.dart';
|
||||||
|
export 'user_widgets/thumbnail_media.dart';
|
||||||
|
export 'user_widgets/video_provider.dart';
|
||||||
|
export 'views/gallery_picker_view/gallery_picker_view.dart';
|
||||||
|
export 'views/picker_scaffold.dart';
|
||||||
|
|
||||||
class GalleryPicker {
|
class GalleryPicker {
|
||||||
static Stream<List<MediaFile>> get listenSelectedFiles {
|
static Stream<List<MediaFile>> get listenSelectedFiles {
|
||||||
var controller = Get.put(PickerListener());
|
var controller = Get.put(PickerListener());
|
||||||
@ -53,6 +56,7 @@ class GalleryPicker {
|
|||||||
{Config? config,
|
{Config? config,
|
||||||
bool startWithRecent = false,
|
bool startWithRecent = false,
|
||||||
bool singleMedia = false,
|
bool singleMedia = false,
|
||||||
|
Locale? locale,
|
||||||
PageTransitionType pageTransitionType = PageTransitionType.rightToLeft,
|
PageTransitionType pageTransitionType = PageTransitionType.rightToLeft,
|
||||||
List<MediaFile>? initSelectedMedia,
|
List<MediaFile>? initSelectedMedia,
|
||||||
List<MediaFile>? extraRecentMedia,
|
List<MediaFile>? extraRecentMedia,
|
||||||
@ -64,9 +68,10 @@ class GalleryPicker {
|
|||||||
type: pageTransitionType,
|
type: pageTransitionType,
|
||||||
child: GalleryPickerView(
|
child: GalleryPickerView(
|
||||||
onSelect: (mediaTmp) {
|
onSelect: (mediaTmp) {
|
||||||
media = mediaTmp;
|
media = List.from(mediaTmp);
|
||||||
},
|
},
|
||||||
config: config,
|
config: config,
|
||||||
|
locale: locale,
|
||||||
singleMedia: singleMedia,
|
singleMedia: singleMedia,
|
||||||
initSelectedMedia: initSelectedMedia,
|
initSelectedMedia: initSelectedMedia,
|
||||||
extraRecentMedia: extraRecentMedia,
|
extraRecentMedia: extraRecentMedia,
|
||||||
@ -81,6 +86,7 @@ class GalleryPicker {
|
|||||||
multipleMediaBuilder,
|
multipleMediaBuilder,
|
||||||
Widget Function(String tag, MediaFile media, BuildContext context)?
|
Widget Function(String tag, MediaFile media, BuildContext context)?
|
||||||
heroBuilder,
|
heroBuilder,
|
||||||
|
Locale? locale,
|
||||||
bool singleMedia = false,
|
bool singleMedia = false,
|
||||||
PageTransitionType pageTransitionType = PageTransitionType.rightToLeft,
|
PageTransitionType pageTransitionType = PageTransitionType.rightToLeft,
|
||||||
List<MediaFile>? initSelectedMedia,
|
List<MediaFile>? initSelectedMedia,
|
||||||
@ -93,6 +99,7 @@ class GalleryPicker {
|
|||||||
type: pageTransitionType,
|
type: pageTransitionType,
|
||||||
child: GalleryPickerView(
|
child: GalleryPickerView(
|
||||||
onSelect: (media) {},
|
onSelect: (media) {},
|
||||||
|
locale: locale,
|
||||||
multipleMediaBuilder: multipleMediaBuilder,
|
multipleMediaBuilder: multipleMediaBuilder,
|
||||||
heroBuilder: heroBuilder,
|
heroBuilder: heroBuilder,
|
||||||
singleMedia: singleMedia,
|
singleMedia: singleMedia,
|
||||||
@ -123,13 +130,13 @@ class GalleryPicker {
|
|||||||
return BottomSheetPanel.isCollapsed;
|
return BottomSheetPanel.isCollapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<GalleryMedia?> get collectGallery async {
|
static Future<GalleryMedia?> collectGallery({Locale? locale}) async {
|
||||||
return await PhoneGalleryController.collectGallery;
|
return await PhoneGalleryController.collectGallery(locale: locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Future<GalleryMedia?> get initializeGallery async {
|
static Future<GalleryMedia?> initializeGallery({Locale? locale}) async {
|
||||||
final controller = Get.put(PhoneGalleryController());
|
final controller = Get.put(PhoneGalleryController());
|
||||||
await controller.initializeAlbums();
|
await controller.initializeAlbums(locale: locale);
|
||||||
return controller.media;
|
return controller.media;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,6 @@ class Config {
|
|||||||
lastWeek,
|
lastWeek,
|
||||||
tapPhotoSelect,
|
tapPhotoSelect,
|
||||||
selected;
|
selected;
|
||||||
List<String> months;
|
|
||||||
Mode mode;
|
Mode mode;
|
||||||
|
|
||||||
Config(
|
Config(
|
||||||
@ -42,20 +41,6 @@ class Config {
|
|||||||
this.lastWeek = "Last Week",
|
this.lastWeek = "Last Week",
|
||||||
this.tapPhotoSelect = "Tap photo to select",
|
this.tapPhotoSelect = "Tap photo to select",
|
||||||
this.selected = "Selected",
|
this.selected = "Selected",
|
||||||
this.months = const [
|
|
||||||
"January",
|
|
||||||
"February",
|
|
||||||
"March",
|
|
||||||
"April",
|
|
||||||
"May",
|
|
||||||
"June",
|
|
||||||
"July",
|
|
||||||
"August",
|
|
||||||
"September",
|
|
||||||
"October",
|
|
||||||
"November",
|
|
||||||
"December"
|
|
||||||
],
|
|
||||||
this.mode = Mode.light,
|
this.mode = Mode.light,
|
||||||
Widget? selectIcon}) {
|
Widget? selectIcon}) {
|
||||||
if (backgroundColor == null) {
|
if (backgroundColor == null) {
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:intl/date_symbol_data_local.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
import 'package:photo_gallery/photo_gallery.dart';
|
import 'package:photo_gallery/photo_gallery.dart';
|
||||||
|
|
||||||
import '../controller/gallery_controller.dart';
|
import '../controller/gallery_controller.dart';
|
||||||
import '/models/media_file.dart';
|
import '/models/media_file.dart';
|
||||||
import '/models/medium.dart';
|
import '/models/medium.dart';
|
||||||
@ -46,18 +50,21 @@ class GalleryAlbum {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> initialize() async {
|
Future<void> initialize({Locale? locale}) async {
|
||||||
List<DateCategory> dateCategory = [];
|
List<DateCategory> dateCategory = [];
|
||||||
for (var medium in sortAlbumMediaDates((await album.listMedia()).items)) {
|
for (var medium in sortAlbumMediaDates((await album.listMedia()).items)) {
|
||||||
MediaFile mediaFile = MediaFile.medium(medium);
|
MediaFile mediaFile = MediaFile.medium(medium);
|
||||||
String name = getDateCategory(mediaFile);
|
String name = getDateCategory(mediaFile, locale: locale);
|
||||||
if (dateCategory.any((element) => element.name == name)) {
|
if (dateCategory.any((element) => element.name == name)) {
|
||||||
dateCategory
|
dateCategory
|
||||||
.singleWhere((element) => element.name == name)
|
.singleWhere((element) => element.name == name)
|
||||||
.files
|
.files
|
||||||
.add(mediaFile);
|
.add(mediaFile);
|
||||||
} else {
|
} else {
|
||||||
dateCategory.add(DateCategory(files: [mediaFile], name: name));
|
DateTime? lastDate = mediaFile.lastModified;
|
||||||
|
lastDate = lastDate ?? DateTime.now();
|
||||||
|
dateCategory.add(
|
||||||
|
DateCategory(files: [mediaFile], name: name, dateTime: lastDate));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dateCategories = dateCategory;
|
dateCategories = dateCategory;
|
||||||
@ -82,22 +89,28 @@ class GalleryAlbum {
|
|||||||
List<MediaFile> get files =>
|
List<MediaFile> get files =>
|
||||||
dateCategories.expand((element) => element.files).toList();
|
dateCategories.expand((element) => element.files).toList();
|
||||||
|
|
||||||
String getDateCategory(MediaFile media) {
|
String getDateCategory(MediaFile media, {Locale? locale}) {
|
||||||
Config config = GetInstance().isRegistered<PhoneGalleryController>()
|
Config config = GetInstance().isRegistered<PhoneGalleryController>()
|
||||||
? Get.find<PhoneGalleryController>().config
|
? Get.find<PhoneGalleryController>().config
|
||||||
: Config();
|
: Config();
|
||||||
DateTime? lastDate = media.lastModified;
|
DateTime? lastDate = media.lastModified;
|
||||||
lastDate = lastDate ?? DateTime.now();
|
lastDate = lastDate ?? DateTime.now();
|
||||||
|
initializeDateFormatting();
|
||||||
|
String languageCode = locale != null
|
||||||
|
? (locale).languageCode
|
||||||
|
: Platform.localeName.split('_')[0];
|
||||||
if (daysBetween(lastDate) <= 3) {
|
if (daysBetween(lastDate) <= 3) {
|
||||||
return config.recent;
|
return config.recent;
|
||||||
} else if (daysBetween(lastDate) > 3 && daysBetween(lastDate) <= 7) {
|
} else if (daysBetween(lastDate) > 3 && daysBetween(lastDate) <= 7) {
|
||||||
return config.lastWeek;
|
return config.lastWeek;
|
||||||
} else if (daysBetween(lastDate) > 7 && daysBetween(lastDate) <= 31) {
|
} else if (DateTime.now().month == lastDate.month) {
|
||||||
return config.lastMonth;
|
return config.lastMonth;
|
||||||
} else if (daysBetween(lastDate) > 31 && daysBetween(lastDate) <= 365) {
|
} else if (DateTime.now().year == lastDate.year) {
|
||||||
return DateFormat.MMMM().format(lastDate).toString();
|
String month = DateFormat.MMMM(languageCode).format(lastDate).toString();
|
||||||
|
return "$month ${lastDate.day}";
|
||||||
} else {
|
} else {
|
||||||
return DateFormat.y().format(lastDate).toString();
|
String month = DateFormat.MMMM(languageCode).format(lastDate).toString();
|
||||||
|
return "$month ${lastDate.day}, ${lastDate.year}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +133,7 @@ class GalleryAlbum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sort() {
|
sort() {
|
||||||
dateCategories.sort(
|
dateCategories.sort((a, b) => b.dateTime.compareTo(a.dateTime));
|
||||||
(a, b) => a.getIndexOfCategory().compareTo(b.getIndexOfCategory()));
|
|
||||||
|
|
||||||
for (var category in dateCategories) {
|
for (var category in dateCategories) {
|
||||||
category.files.sort((a, b) {
|
category.files.sort((a, b) {
|
||||||
@ -136,15 +148,18 @@ class GalleryAlbum {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void addFile(MediaFile file) {
|
void addFile(MediaFile file, {Locale? locale}) {
|
||||||
String name = getDateCategory(file);
|
String name = getDateCategory(file, locale: locale);
|
||||||
if (dateCategories.any((element) => element.name == name)) {
|
if (dateCategories.any((element) => element.name == name)) {
|
||||||
dateCategories
|
dateCategories
|
||||||
.singleWhere((element) => element.name == name)
|
.singleWhere((element) => element.name == name)
|
||||||
.files
|
.files
|
||||||
.add(file);
|
.add(file);
|
||||||
} else {
|
} else {
|
||||||
dateCategories.add(DateCategory(files: [file], name: name));
|
DateTime? lastDate = file.lastModified;
|
||||||
|
lastDate = lastDate ?? DateTime.now();
|
||||||
|
dateCategories
|
||||||
|
.add(DateCategory(files: [file], name: name, dateTime: lastDate));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -152,24 +167,9 @@ class GalleryAlbum {
|
|||||||
class DateCategory {
|
class DateCategory {
|
||||||
String name;
|
String name;
|
||||||
List<MediaFile> files;
|
List<MediaFile> files;
|
||||||
DateCategory({required this.files, required this.name});
|
DateTime dateTime;
|
||||||
|
DateCategory(
|
||||||
int getIndexOfCategory() {
|
{required this.files, required this.name, required this.dateTime});
|
||||||
Config config = GetInstance().isRegistered<PhoneGalleryController>()
|
|
||||||
? Get.find<PhoneGalleryController>().config
|
|
||||||
: Config();
|
|
||||||
int index = [
|
|
||||||
config.recent,
|
|
||||||
config.lastWeek,
|
|
||||||
config.lastMonth,
|
|
||||||
...config.months
|
|
||||||
].indexOf(name);
|
|
||||||
if (index == -1) {
|
|
||||||
return 3000 - int.parse(name);
|
|
||||||
} else {
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum AlbumType { video, image, mixed }
|
enum AlbumType { video, image, mixed }
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import '/models/gallery_album.dart';
|
|
||||||
import '../../../controller/gallery_controller.dart';
|
import '../../../controller/gallery_controller.dart';
|
||||||
|
import '/models/gallery_album.dart';
|
||||||
import 'date_category_view.dart';
|
import 'date_category_view.dart';
|
||||||
import 'selected_medias_view.dart';
|
import 'selected_medias_view.dart';
|
||||||
|
|
||||||
@ -50,16 +51,21 @@ class AlbumMediasView extends StatelessWidget {
|
|||||||
int index = categoriesTmp
|
int index = categoriesTmp
|
||||||
.indexWhere((element) => element.name == controller.config.recent);
|
.indexWhere((element) => element.name == controller.config.recent);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
DateCategory category = DateCategory(files: [
|
DateCategory category = DateCategory(
|
||||||
|
files: [
|
||||||
...controller.extraRecentMedia!,
|
...controller.extraRecentMedia!,
|
||||||
...categoriesTmp[index].files
|
...categoriesTmp[index].files,
|
||||||
], name: categoriesTmp[index].name);
|
],
|
||||||
|
name: categoriesTmp[index].name,
|
||||||
|
dateTime: categoriesTmp[index].dateTime);
|
||||||
categoriesTmp[index] = category;
|
categoriesTmp[index] = category;
|
||||||
return categoriesTmp;
|
return categoriesTmp;
|
||||||
} else {
|
} else {
|
||||||
return [
|
return [
|
||||||
DateCategory(
|
DateCategory(
|
||||||
files: controller.extraRecentMedia!,
|
files: controller.extraRecentMedia!,
|
||||||
|
dateTime: controller.extraRecentMedia!.first.lastModified ??
|
||||||
|
DateTime.now(),
|
||||||
name: controller.config.recent),
|
name: controller.config.recent),
|
||||||
...categoriesTmp
|
...categoriesTmp
|
||||||
];
|
];
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gallery_picker/views/album_view/album_appbar.dart';
|
import 'package:gallery_picker/views/album_view/album_appbar.dart';
|
||||||
|
|
||||||
import '../../../controller/gallery_controller.dart';
|
import '../../../controller/gallery_controller.dart';
|
||||||
import '../../../models/gallery_album.dart';
|
import '../../../models/gallery_album.dart';
|
||||||
import 'album_medias_view.dart';
|
import 'album_medias_view.dart';
|
||||||
@ -17,7 +18,11 @@ class AlbumPage extends StatelessWidget {
|
|||||||
required this.isBottomSheet});
|
required this.isBottomSheet});
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return WillPopScope(
|
return PopScope(
|
||||||
|
canPop: false,
|
||||||
|
onPopInvoked: (value) {
|
||||||
|
controller.backToPicker();
|
||||||
|
},
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: controller.config.backgroundColor,
|
backgroundColor: controller.config.backgroundColor,
|
||||||
appBar: album != null
|
appBar: album != null
|
||||||
@ -39,10 +44,6 @@ class AlbumPage extends StatelessWidget {
|
|||||||
"No Album Found",
|
"No Album Found",
|
||||||
style: controller.config.textStyle,
|
style: controller.config.textStyle,
|
||||||
)),
|
)),
|
||||||
),
|
));
|
||||||
onWillPop: () async {
|
|
||||||
controller.backToPicker();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
|
||||||
import '../../controller/gallery_controller.dart';
|
import '../../controller/gallery_controller.dart';
|
||||||
import '../../models/config.dart';
|
import '../../models/config.dart';
|
||||||
import '../../models/gallery_album.dart';
|
import '../../models/gallery_album.dart';
|
||||||
import '../../models/media_file.dart';
|
import '../../models/media_file.dart';
|
||||||
import '../album_categories_view/album_categories_view.dart';
|
import '../album_categories_view/album_categories_view.dart';
|
||||||
import '../album_view/album_page.dart';
|
|
||||||
import '../album_view/album_medias_view.dart';
|
import '../album_view/album_medias_view.dart';
|
||||||
|
import '../album_view/album_page.dart';
|
||||||
import 'permission_denied_view.dart';
|
import 'permission_denied_view.dart';
|
||||||
import 'picker_appbar.dart';
|
import 'picker_appbar.dart';
|
||||||
import 'reload_gallery.dart';
|
import 'reload_gallery.dart';
|
||||||
@ -20,6 +21,7 @@ class GalleryPickerView extends StatefulWidget {
|
|||||||
multipleMediaBuilder;
|
multipleMediaBuilder;
|
||||||
final bool startWithRecent;
|
final bool startWithRecent;
|
||||||
final bool isBottomSheet;
|
final bool isBottomSheet;
|
||||||
|
final Locale? locale;
|
||||||
final List<MediaFile>? initSelectedMedia;
|
final List<MediaFile>? initSelectedMedia;
|
||||||
final List<MediaFile>? extraRecentMedia;
|
final List<MediaFile>? extraRecentMedia;
|
||||||
final bool singleMedia;
|
final bool singleMedia;
|
||||||
@ -32,6 +34,7 @@ class GalleryPickerView extends StatefulWidget {
|
|||||||
this.singleMedia = false,
|
this.singleMedia = false,
|
||||||
this.isBottomSheet = false,
|
this.isBottomSheet = false,
|
||||||
this.heroBuilder,
|
this.heroBuilder,
|
||||||
|
this.locale,
|
||||||
this.multipleMediaBuilder,
|
this.multipleMediaBuilder,
|
||||||
this.startWithRecent = false});
|
this.startWithRecent = false});
|
||||||
|
|
||||||
@ -72,7 +75,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
|
|||||||
}
|
}
|
||||||
config = galleryController.config;
|
config = galleryController.config;
|
||||||
if (!galleryController.isInitialized) {
|
if (!galleryController.isInitialized) {
|
||||||
galleryController.initializeAlbums();
|
galleryController.initializeAlbums(locale: widget.locale);
|
||||||
}
|
}
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
@ -94,7 +97,13 @@ class _GalleryPickerState extends State<GalleryPickerView> {
|
|||||||
controller: controller.pageController,
|
controller: controller.pageController,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
children: [
|
children: [
|
||||||
WillPopScope(
|
PopScope(
|
||||||
|
canPop: true,
|
||||||
|
onPopInvoked: (value) {
|
||||||
|
if (!widget.isBottomSheet) {
|
||||||
|
controller.disposeController();
|
||||||
|
}
|
||||||
|
},
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
backgroundColor: config.backgroundColor,
|
backgroundColor: config.backgroundColor,
|
||||||
appBar: PickerAppBar(
|
appBar: PickerAppBar(
|
||||||
@ -209,13 +218,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
)),
|
||||||
onWillPop: () async {
|
|
||||||
if (!widget.isBottomSheet) {
|
|
||||||
controller.disposeController();
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}),
|
|
||||||
AlbumPage(
|
AlbumPage(
|
||||||
album: controller.selectedAlbum,
|
album: controller.selectedAlbum,
|
||||||
controller: controller,
|
controller: controller,
|
||||||
@ -242,7 +245,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
|
|||||||
extraRecentMedia: widget.extraRecentMedia,
|
extraRecentMedia: widget.extraRecentMedia,
|
||||||
isRecent: widget.startWithRecent);
|
isRecent: widget.startWithRecent);
|
||||||
if (!controller.isInitialized) {
|
if (!controller.isInitialized) {
|
||||||
await controller.initializeAlbums();
|
await controller.initializeAlbums(locale: widget.locale);
|
||||||
}
|
}
|
||||||
setState(() {});
|
setState(() {});
|
||||||
},
|
},
|
||||||
|
31
pubspec.yaml
31
pubspec.yaml
@ -1,25 +1,32 @@
|
|||||||
name: gallery_picker
|
name: gallery_picker
|
||||||
description: Gallery Picker is a flutter package that will allow you to pick media file(s), manage and navigate inside your gallery with modern tools and views.
|
description: Gallery Picker is a flutter package that will allow you to pick media file(s), manage and navigate inside your gallery with modern tools and views.
|
||||||
version: 0.4.8
|
version: 0.5.1
|
||||||
homepage: https://github.com/FlutterWay/gallery_picker
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=2.19.6 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
flutter: ">=1.17.0"
|
flutter: ">=1.17.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
cupertino_icons: ^1.0.5
|
cupertino_icons: ^1.0.6
|
||||||
photo_gallery: ^1.2.2
|
# photo_gallery:
|
||||||
permission_handler: ^10.2.0
|
# git: https://github.com/woogi-kang/photo_gallery.git
|
||||||
|
photo_gallery:
|
||||||
|
path: ../photo_gallery
|
||||||
|
permission_handler: ^11.3.0
|
||||||
transparent_image: ^2.0.1
|
transparent_image: ^2.0.1
|
||||||
video_player: ^2.6.1
|
video_player: ^2.8.2
|
||||||
get: ^4.6.5
|
device_info_plus: ^9.1.2
|
||||||
video_thumbnail: ^0.5.3
|
get: ^4.6.6
|
||||||
intl: ^0.17.0
|
video_thumbnail:
|
||||||
page_transition: ^2.0.9
|
git: https://github.com/Shahidbangash/video_thumbnail.git
|
||||||
bottom_sheet_scaffold: ^0.1.6
|
# url: git@github.com:ahmedzayan7920/video_thumbnail.git
|
||||||
|
# ref: fix/add-namespace
|
||||||
|
intl: ^0.19.0
|
||||||
|
page_transition: ^2.1.0
|
||||||
|
bottom_sheet_scaffold: ^0.1.9
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
Loading…
x
Reference in New Issue
Block a user