files formatted

This commit is contained in:
Furkan 2022-12-30 05:18:18 +03:00
parent e3a77d7c6a
commit fff9219bea
35 changed files with 178 additions and 157 deletions

View File

@ -1 +1 @@
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"permission_handler_apple","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_apple-9.0.7\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_avfoundation-2.3.8\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"permission_handler_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_android-10.2.0\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_android-2.3.10\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[{"name":"permission_handler_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_windows-0.1.2\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"video_player_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_web-2.0.13\\\\","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":"2022-12-29 12:11:29.448664","version":"3.3.9"} {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"permission_handler_apple","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_apple-9.0.7\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_avfoundation-2.3.8\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"permission_handler_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_android-10.2.0\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_android-2.3.10\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[{"name":"permission_handler_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_windows-0.1.2\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"video_player_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_web-2.0.13\\\\","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":"2022-12-30 05:16:13.636734","version":"3.3.9"}

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart'; // ignore: depend_on_referenced_packages
import 'package:flutter/src/widgets/framework.dart';
import 'package:gallery_picker/gallery_picker.dart'; import 'package:gallery_picker/gallery_picker.dart';
class BottomSheetExample extends StatefulWidget { class BottomSheetExample extends StatefulWidget {
@ -23,7 +22,7 @@ class _BottomSheetExampleState extends State<BottomSheetExample> {
this.selectedMedias = selectedMedias; this.selectedMedias = selectedMedias;
pageIndex = 0; pageIndex = 0;
if (this.selectedMedias.isNotEmpty) { if (this.selectedMedias.isNotEmpty) {
Future.delayed(Duration(milliseconds: 500)).then((value) { Future.delayed(const Duration(milliseconds: 500)).then((value) {
controller.animateToPage(0, controller.animateToPage(0,
duration: const Duration(milliseconds: 500), duration: const Duration(milliseconds: 500),
curve: Curves.easeIn); curve: Curves.easeIn);
@ -129,7 +128,7 @@ class _BottomSheetExampleState extends State<BottomSheetExample> {
], ],
), ),
), ),
Spacer( const Spacer(
flex: 1, flex: 1,
), ),
TextButton( TextButton(
@ -141,7 +140,7 @@ class _BottomSheetExampleState extends State<BottomSheetExample> {
size: 40, size: 40,
), ),
), ),
Spacer( const Spacer(
flex: 1, flex: 1,
), ),
], ],

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
// ignore: depend_on_referenced_packages
import 'package:gallery_picker/gallery_picker.dart'; import 'package:gallery_picker/gallery_picker.dart';
class GalleryPickerExample extends StatefulWidget { class GalleryPickerExample extends StatefulWidget {
@ -16,7 +17,7 @@ class _GalleryPickerExampleState extends State<GalleryPickerExample> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Pick medias"), title: const Text("Pick medias"),
), ),
body: Center( body: Center(
child: Column( child: Column(

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart'; // ignore: depend_on_referenced_packages
import 'package:flutter/src/widgets/framework.dart';
import 'package:gallery_picker/gallery_picker.dart'; import 'package:gallery_picker/gallery_picker.dart';
import '../main.dart'; import '../main.dart';
@ -20,12 +19,12 @@ class _MultipleMediasViewState extends State<MultipleMediasView> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Destination Page"), title: const Text("Destination Page"),
), ),
body: Column(children: [ body: Column(children: [
const Spacer(), const Spacer(),
Text("These are your selected medias"), const Text("These are your selected medias"),
Divider(), const Divider(),
Expanded( Expanded(
flex: 5, flex: 5,
child: Stack(children: [ child: Stack(children: [
@ -85,7 +84,7 @@ class _MultipleMediasViewState extends State<MultipleMediasView> {
for (int i = 0; i < widget.medias.length; i++) for (int i = 0; i < widget.medias.length; i++)
TextButton( TextButton(
onPressed: () { onPressed: () {
pageIndex=i; pageIndex = i;
controller.animateToPage(i, controller.animateToPage(i,
duration: const Duration(milliseconds: 500), duration: const Duration(milliseconds: 500),
curve: Curves.easeIn); curve: Curves.easeIn);
@ -100,7 +99,7 @@ class _MultipleMediasViewState extends State<MultipleMediasView> {
color: i == pageIndex ? Colors.red : Colors.grey), color: i == pageIndex ? Colors.red : Colors.grey),
child: Text( child: Text(
(i + 1).toString(), (i + 1).toString(),
style: TextStyle(fontSize: 16, color: Colors.black), style: const TextStyle(fontSize: 16, color: Colors.black),
), ),
)) ))
]), ]),

View File

@ -1,6 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart'; // ignore: depend_on_referenced_packages
import 'package:flutter/src/widgets/framework.dart';
import 'package:gallery_picker/gallery_picker.dart'; import 'package:gallery_picker/gallery_picker.dart';
import '../main.dart'; import '../main.dart';
@ -18,7 +17,7 @@ class _PickMediasWithBuilderState extends State<PickMediasWithBuilder> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Pick Medias With Builder"), title: const Text("Pick Medias With Builder"),
), ),
body: Stack( body: Stack(
children: [ children: [
@ -36,7 +35,7 @@ class _PickMediasWithBuilderState extends State<PickMediasWithBuilder> {
color: Colors.blue, color: Colors.blue,
borderRadius: BorderRadius.circular(20)), borderRadius: BorderRadius.circular(20)),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: const Text(
'Pick Medias With Builder', 'Pick Medias With Builder',
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
), ),

View File

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart'; // ignore: depend_on_referenced_packages
import 'package:flutter/src/widgets/framework.dart';
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:camera/camera.dart';
import 'package:gallery_picker_example/examples/multiple_medias.dart'; import 'package:gallery_picker_example/examples/multiple_medias.dart';
@ -216,7 +216,7 @@ class _WhatsappPickPhotoState extends State<WhatsappPickPhoto> {
setState(() { setState(() {
anyProcess = true; anyProcess = true;
}); });
Future.delayed(Duration(milliseconds: 100)) Future.delayed(const Duration(milliseconds: 100))
.then((value) => setState(() { .then((value) => setState(() {
anyProcess = false; anyProcess = false;
})); }));

View File

@ -1,10 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; // ignore: depend_on_referenced_packages
import 'package:gallery_picker/gallery_picker.dart'; import 'package:gallery_picker/gallery_picker.dart';
import 'package:gallery_picker_example/examples/pick_medias_with_builder.dart';
import 'examples/gallery_picker_example.dart';
import 'examples/multiple_medias.dart'; import 'examples/multiple_medias.dart';
import 'examples/whatsapp_pick_photo.dart';
void main() { void main() {
runApp(const MyApp()); runApp(const MyApp());
@ -26,7 +23,9 @@ class MyApp extends StatelessWidget {
/* dark theme settings */ /* dark theme settings */
), ),
themeMode: ThemeMode.dark, themeMode: ThemeMode.dark,
home: const GalleryPickerExample(), home: const MyHomePage(
title: "Gallery Picker",
),
); );
} }
} }
@ -57,9 +56,8 @@ class _MyHomePageState extends State<MyHomePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text("Pick medias"), title: Text(widget.title),
), ),
body: Center( body: Center(
child: Column( child: Column(
@ -179,7 +177,7 @@ class _MyHomePageState extends State<MyHomePage> {
startWithRecent: true); startWithRecent: true);
if (medias != null) { if (medias != null) {
setState(() { setState(() {
this.selectedMedias += medias; selectedMedias += medias;
}); });
} }
} }
@ -227,6 +225,7 @@ class _MyHomePageState extends State<MyHomePage> {
} }
Future<void> getGalleryMedia() async { Future<void> getGalleryMedia() async {
// ignore: unused_local_variable
GalleryMedia? allmedia = await GalleryPicker.collectGallery; GalleryMedia? allmedia = await GalleryPicker.collectGallery;
} }
} }

View File

@ -5,8 +5,8 @@
// gestures. You can also use WidgetTester to find child widgets in the widget // gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct. // tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart'; //import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; //import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
//testWidgets('Counter increments smoke test', (WidgetTester tester) async { //testWidgets('Counter increments smoke test', (WidgetTester tester) async {

View File

@ -1,5 +1,6 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.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';
@ -43,8 +44,8 @@ class PhoneGalleryController extends GetxController {
void updateSelectedFiles(List<MediaFile> medias) { void updateSelectedFiles(List<MediaFile> medias) {
_selectedFiles = medias; _selectedFiles = medias;
if(selectedFiles.isNotEmpty){ if (selectedFiles.isNotEmpty) {
_pickerMode=true; _pickerMode = true;
} }
update(); update();
} }
@ -104,7 +105,7 @@ class PhoneGalleryController extends GetxController {
Future<void> initializeAlbums() async { Future<void> initializeAlbums() async {
GalleryMedia? media = await PhoneGalleryController.collectGallery; GalleryMedia? media = await PhoneGalleryController.collectGallery;
if (media != null) { if (media != null) {
this._galleryAlbums = media.albums; _galleryAlbums = media.albums;
} }
_isInitialized = true; _isInitialized = true;
update(); update();
@ -136,8 +137,10 @@ class PhoneGalleryController extends GetxController {
entireGalleryAlbum.thumbnail = entireGalleryAlbum.thumbnail =
await videoAlbum.getThumbnail(highQuality: true); await videoAlbum.getThumbnail(highQuality: true);
} catch (e) { } catch (e) {
if (kDebugMode) {
print(e); print(e);
} }
}
} else if (lastVideoDate == null) { } else if (lastVideoDate == null) {
} else { } else {
if (lastVideoDate.isAfter(lastPhotoDate)) { if (lastVideoDate.isAfter(lastPhotoDate)) {
@ -146,10 +149,12 @@ class PhoneGalleryController extends GetxController {
await videoAlbum.getThumbnail(highQuality: true); await videoAlbum.getThumbnail(highQuality: true);
} catch (e) { } catch (e) {
entireGalleryAlbum.thumbnail = null; entireGalleryAlbum.thumbnail = null;
if (kDebugMode) {
print(e); print(e);
} }
} }
} }
}
for (var file in videoGalleryAlbum.files) { for (var file in videoGalleryAlbum.files) {
entireGalleryAlbum.addFile(file); entireGalleryAlbum.addFile(file);
} }

View File

@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.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';
@ -57,9 +58,11 @@ class GalleryAlbum {
try { try {
thumbnail = await album.getThumbnail(highQuality: true); thumbnail = await album.getThumbnail(highQuality: true);
} catch (e) { } catch (e) {
if (kDebugMode) {
print(e); print(e);
} }
} }
}
DateTime? get lastDate { DateTime? get lastDate {
if (dateCategories.isNotEmpty) { if (dateCategories.isNotEmpty) {

View File

@ -1,3 +1,5 @@
import 'package:flutter/foundation.dart';
import 'gallery_album.dart'; import 'gallery_album.dart';
class GalleryMedia { class GalleryMedia {
@ -10,7 +12,9 @@ class GalleryMedia {
try { try {
return albums.singleWhere((element) => element.album.name == name); return albums.singleWhere((element) => element.album.name == name);
} catch (e) { } catch (e) {
if (kDebugMode) {
print(e); print(e);
}
return null; return null;
} }
} }

View File

@ -1,5 +1,5 @@
import 'package:photo_gallery/photo_gallery.dart'; import 'package:photo_gallery/photo_gallery.dart';
extension MediumExtension on Medium { extension MediumExtension on Medium {
DateTime? get lastDate => this.modifiedDate ?? this.modifiedDate; DateTime? get lastDate => modifiedDate ?? modifiedDate;
} }

View File

@ -1,2 +1 @@
enum Mode { dark, light } enum Mode { dark, light }

View File

@ -4,14 +4,14 @@ import 'thumbnail_album.dart';
import '../models/mode.dart'; import '../models/mode.dart';
class AlbumCategoriesView extends StatelessWidget { class AlbumCategoriesView extends StatelessWidget {
List<GalleryAlbum> albums; final List<GalleryAlbum> albums;
Function(GalleryAlbum album)? onPressed; final Function(GalleryAlbum album)? onPressed;
Function(GalleryAlbum album, bool)? onHover; final Function(GalleryAlbum album, bool)? onHover;
Function(GalleryAlbum album)? onLongPress; final Function(GalleryAlbum album)? onLongPress;
Function(GalleryAlbum album, bool)? onFocusChange; final Function(GalleryAlbum album, bool)? onFocusChange;
final Color categoryFailIconColor, categoryBackgroundColor; final Color categoryFailIconColor, categoryBackgroundColor;
final Mode mode; final Mode mode;
AlbumCategoriesView( const AlbumCategoriesView(
{super.key, {super.key,
required this.albums, required this.albums,
required this.categoryBackgroundColor, required this.categoryBackgroundColor,

View File

@ -4,11 +4,10 @@ import 'date_category_view.dart';
// ignore: must_be_immutable // ignore: must_be_immutable
class AlbumMediasView extends StatelessWidget { class AlbumMediasView extends StatelessWidget {
TextStyle? textStyle; final TextStyle? textStyle;
Widget Function(BuildContext)? onFileErrorBuilder; const AlbumMediasView(
AlbumMediasView( {super.key, required this.galleryAlbum, this.textStyle});
{super.key, required this.galleryAlbum,this.textStyle}); final GalleryAlbum galleryAlbum;
GalleryAlbum galleryAlbum;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Stack( return Stack(

View File

@ -5,15 +5,15 @@ import '/models/gallery_album.dart';
import 'thumbnail_media.dart'; import 'thumbnail_media.dart';
class DateCategoryWiew extends StatelessWidget { class DateCategoryWiew extends StatelessWidget {
TextStyle? textStyle; final TextStyle? textStyle;
final Widget Function(MediaFile media, BuildContext context)? final Widget Function(MediaFile media, BuildContext context)?
onMediaErrorBuilder; onMediaErrorBuilder;
DateCategoryWiew( final DateCategory category;
const DateCategoryWiew(
{super.key, {super.key,
required this.category, required this.category,
this.textStyle, this.textStyle,
this.onMediaErrorBuilder}); this.onMediaErrorBuilder});
DateCategory category;
int getRowCount() { int getRowCount() {
if (category.files.length % 4 != 0) { if (category.files.length % 4 != 0) {

View File

@ -1,5 +1,4 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import '../models/media_file.dart'; import '../models/media_file.dart';
class PhotoProvider extends StatefulWidget { class PhotoProvider extends StatefulWidget {
@ -16,15 +15,14 @@ class PhotoProvider extends StatefulWidget {
}); });
@override @override
_PhotoProviderState createState() => _PhotoProviderState(); State<PhotoProvider> createState() => _PhotoProviderState();
} }
class _PhotoProviderState extends State<PhotoProvider> { class _PhotoProviderState extends State<PhotoProvider> {
VideoPlayerController? _controller; late MediaFile _media;
late MediaFile media;
@override @override
void initState() { void initState() {
media = widget.media; _media = widget.media;
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
initMedia(); initMedia();
}); });
@ -32,28 +30,27 @@ class _PhotoProviderState extends State<PhotoProvider> {
} }
Future<void> initMedia() async { Future<void> initMedia() async {
await media.getData(); await _media.getData();
if (mounted) { if (mounted) {
setState(() {}); setState(() {});
} }
} }
bool anyProcess = false;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (media != widget.media) { if (_media != widget.media) {
media = widget.media; _media = widget.media;
if (media.data == null) { if (_media.data == null) {
initMedia(); initMedia();
} }
} }
return media.data == null return _media.data == null
? Container( ? SizedBox(
width: widget.width, width: widget.width,
height: widget.height, height: widget.height,
) )
: Image.memory( : Image.memory(
media.data!, _media.data!,
width: widget.width, width: widget.width,
height: widget.height, height: widget.height,
fit: widget.fit, fit: widget.fit,

View File

@ -8,7 +8,12 @@ class ThumbnailAlbum extends StatelessWidget {
final GalleryAlbum album; final GalleryAlbum album;
final Color failIconColor, backgroundColor; final Color failIconColor, backgroundColor;
final Mode mode; final Mode mode;
ThumbnailAlbum({super.key, required this.album, required this.failIconColor,required this.mode,required this.backgroundColor}); const ThumbnailAlbum(
{super.key,
required this.album,
required this.failIconColor,
required this.mode,
required this.backgroundColor});
Color adjustFailedBgColor() { Color adjustFailedBgColor() {
if (mode == Mode.dark) { if (mode == Mode.dark) {

View File

@ -6,8 +6,12 @@ import 'package:transparent_image/transparent_image.dart';
class ThumbnailMedia extends StatelessWidget { class ThumbnailMedia extends StatelessWidget {
final MediaFile media; final MediaFile media;
final bool noIcon; final bool noIcon;
final Widget Function(MediaFile media,BuildContext context)? onErrorBuilder; final Widget Function(MediaFile media, BuildContext context)? onErrorBuilder;
const ThumbnailMedia({super.key, required this.media, this.onErrorBuilder,this.noIcon=false}); const ThumbnailMedia(
{super.key,
required this.media,
this.onErrorBuilder,
this.noIcon = false});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -25,7 +29,7 @@ class ThumbnailMedia extends StatelessWidget {
color: Colors.grey, color: Colors.grey,
) )
else if (media.thumbnailFailed && onErrorBuilder == null) else if (media.thumbnailFailed && onErrorBuilder == null)
onErrorBuilder!(media,context) onErrorBuilder!(media, context)
else if (media.thumbnail != null) else if (media.thumbnail != null)
FadeInImage( FadeInImage(
fadeInDuration: const Duration(milliseconds: 200), fadeInDuration: const Duration(milliseconds: 200),

View File

@ -1,4 +1,5 @@
import 'dart:io'; import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart'; import 'package:video_player/video_player.dart';
import '../models/media_file.dart'; import '../models/media_file.dart';
@ -8,19 +9,20 @@ class VideoProvider extends StatefulWidget {
final double? width, height; final double? width, height;
const VideoProvider({ const VideoProvider({
super.key,
required this.media, required this.media,
this.width, this.width,
this.height, this.height,
}); });
@override @override
_VideoProviderState createState() => _VideoProviderState(); State<VideoProvider> createState() => _VideoProviderState();
} }
class _VideoProviderState extends State<VideoProvider> { class _VideoProviderState extends State<VideoProvider> {
VideoPlayerController? _controller; VideoPlayerController? _controller;
File? _file; File? _file;
late MediaFile media; late MediaFile media;
@override @override
void initState() { void initState() {
media = widget.media; media = widget.media;
@ -42,9 +44,11 @@ class _VideoProviderState extends State<VideoProvider> {
setState(() {}); setState(() {});
}); });
} catch (e) { } catch (e) {
if (kDebugMode) {
print("Failed : $e"); print("Failed : $e");
} }
} }
}
@override @override
void dispose() { void dispose() {
@ -68,7 +72,7 @@ class _VideoProviderState extends State<VideoProvider> {
initMedia(); initMedia();
} }
return _controller == null || !_controller!.value.isInitialized return _controller == null || !_controller!.value.isInitialized
? Container( ? SizedBox(
width: widget.width, width: widget.width,
height: widget.height, height: widget.height,
) )

View File

@ -4,11 +4,10 @@ import '../../models/config.dart';
import '../../../controller/gallery_controller.dart'; import '../../../controller/gallery_controller.dart';
class AlbumCategoriesView extends StatelessWidget { class AlbumCategoriesView extends StatelessWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
late Config config; final Config config;
AlbumCategoriesView(this.controller, {super.key}) { AlbumCategoriesView(this.controller, {super.key})
config = controller.config; : config = controller.config;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return LayoutBuilder( return LayoutBuilder(

View File

@ -5,10 +5,10 @@ import '../../controller/gallery_controller.dart';
import '../gallery_picker_view/tappable_appbar.dart'; import '../gallery_picker_view/tappable_appbar.dart';
class AlbumAppBar extends StatelessWidget with PreferredSizeWidget { class AlbumAppBar extends StatelessWidget with PreferredSizeWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
BottomSheetController? bottomSheetController; final BottomSheetController? bottomSheetController;
GalleryAlbum album; final GalleryAlbum album;
AlbumAppBar( const AlbumAppBar(
{super.key, {super.key,
required this.bottomSheetController, required this.bottomSheetController,
required this.album, required this.album,
@ -69,5 +69,5 @@ class AlbumAppBar extends StatelessWidget with PreferredSizeWidget {
} }
@override @override
Size get preferredSize => Size.fromHeight(48); Size get preferredSize => const Size.fromHeight(48);
} }

View File

@ -4,16 +4,15 @@ import '../../../controller/gallery_controller.dart';
import 'date_category_view.dart'; import 'date_category_view.dart';
import 'selected_medias_view.dart'; import 'selected_medias_view.dart';
// ignore: must_be_immutable
class AlbumMediasView extends StatelessWidget { class AlbumMediasView extends StatelessWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
bool singleMedia; final bool singleMedia;
AlbumMediasView( const AlbumMediasView(
{super.key, {super.key,
required this.galleryAlbum, required this.galleryAlbum,
required this.controller, required this.controller,
required this.singleMedia}); required this.singleMedia});
GalleryAlbum galleryAlbum; final GalleryAlbum galleryAlbum;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Stack( return Stack(

View File

@ -7,16 +7,16 @@ import '../../models/config.dart';
import 'album_medias_view.dart'; import 'album_medias_view.dart';
class AlbumPage extends StatelessWidget { class AlbumPage extends StatelessWidget {
bool singleMedia; final bool singleMedia;
AlbumPage( final PhoneGalleryController controller;
final BottomSheetController? bottomSheetController;
final GalleryAlbum album;
const AlbumPage(
{super.key, {super.key,
required this.album, required this.album,
required this.controller, required this.controller,
required this.singleMedia, required this.singleMedia,
required this.bottomSheetController}); required this.bottomSheetController});
PhoneGalleryController controller;
BottomSheetController? bottomSheetController;
GalleryAlbum album;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Config config = controller.config; Config config = controller.config;

View File

@ -5,14 +5,15 @@ import '/models/gallery_album.dart';
import 'media_view.dart'; import 'media_view.dart';
class DateCategoryWiew extends StatelessWidget { class DateCategoryWiew extends StatelessWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
bool singleMedia; final bool singleMedia;
DateCategoryWiew( final DateCategory category;
const DateCategoryWiew(
{super.key, {super.key,
required this.category, required this.category,
required this.controller, required this.controller,
required this.singleMedia}); required this.singleMedia});
DateCategory category;
int getRowCount() { int getRowCount() {
if (category.files.length % 4 != 0) { if (category.files.length % 4 != 0) {

View File

@ -7,9 +7,9 @@ import '../thumbnail_media_file.dart';
class MediaView extends StatelessWidget { class MediaView extends StatelessWidget {
final MediaFile file; final MediaFile file;
PhoneGalleryController controller; final PhoneGalleryController controller;
bool singleMedia; final bool singleMedia;
MediaView(this.file, const MediaView(this.file,
{super.key, required this.controller, required this.singleMedia}); {super.key, required this.controller, required this.singleMedia});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -6,16 +6,14 @@ import '../../controller/gallery_controller.dart';
import '../../models/config.dart'; import '../../models/config.dart';
class SelectedMediasView extends StatelessWidget { class SelectedMediasView extends StatelessWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
late Config config; final Config config;
SelectedMediasView({super.key, required this.controller}) { SelectedMediasView({super.key, required this.controller})
config = controller.config; : config = controller.config;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width; double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height - 167;
return Container( return Container(
color: config.bottomSheetColor, color: config.bottomSheetColor,
width: width, width: width,
@ -41,11 +39,10 @@ class SelectedMediasView extends StatelessWidget {
fit: BoxFit.fill, fit: BoxFit.fill,
image: ThumbnailProvider( image: ThumbnailProvider(
mediumId: selectedMedia.medium.id, mediumId: selectedMedia.medium.id,
mediumType: mediumType: selectedMedia.medium.mediumType,
selectedMedia.medium.mediumType,
highQuality: true, highQuality: true,
))), ))),
child: SizedBox( child: const SizedBox(
width: 47, width: 47,
height: 47, height: 47,
), ),

View File

@ -23,9 +23,11 @@ class BottomSheetLayout extends StatefulWidget {
this.heroBuilder, this.heroBuilder,
this.initSelectedMedias, this.initSelectedMedias,
this.multipleMediasBuilder, this.multipleMediasBuilder,
this.startWithRecent = true}){ this.startWithRecent = true}) {
if(initSelectedMedias!=null&&GetInstance().isRegistered<PhoneGalleryController>()){ if (initSelectedMedias != null &&
Get.find<PhoneGalleryController>().updateSelectedFiles(initSelectedMedias!); GetInstance().isRegistered<PhoneGalleryController>()) {
Get.find<PhoneGalleryController>()
.updateSelectedFiles(initSelectedMedias!);
} }
} }
@ -54,7 +56,7 @@ class _BottomSheetLayoutState extends State<BottomSheetLayout> {
if (renderBox.size.height > 200 && if (renderBox.size.height > 200 &&
!sheetController.isExpanded && !sheetController.isExpanded &&
!viewCollapsedPicker) { !viewCollapsedPicker) {
await Future.delayed(Duration(milliseconds: 100)); await Future.delayed(const Duration(milliseconds: 100));
controller.appBarTapping = false; controller.appBarTapping = false;
setState(() { setState(() {
viewCollapsedPicker = true; viewCollapsedPicker = true;
@ -63,7 +65,7 @@ class _BottomSheetLayoutState extends State<BottomSheetLayout> {
if (viewCollapsedPicker) { if (viewCollapsedPicker) {
viewCollapsedPicker = false; viewCollapsedPicker = false;
controller.appBarTapping = false; controller.appBarTapping = false;
await Future.delayed(Duration(milliseconds: 10)); await Future.delayed(const Duration(milliseconds: 10));
setState(() {}); setState(() {});
} }
} }
@ -131,7 +133,7 @@ class ViewCollapsed extends StatelessWidget {
final GalleryPickerView picker; final GalleryPickerView picker;
final bool viewPicker; final bool viewPicker;
final Function(BuildContext context) onBuild; final Function(BuildContext context) onBuild;
ViewCollapsed({ const ViewCollapsed({
super.key, super.key,
required this.picker, required this.picker,
required this.onBuild, required this.onBuild,

View File

@ -12,22 +12,22 @@ import 'picker_appbar.dart';
import 'reload_gallery.dart'; import 'reload_gallery.dart';
class GalleryPickerView extends StatefulWidget { class GalleryPickerView extends StatefulWidget {
Config? config; final Config? config;
Function(List<MediaFile> selectedMedias) onSelect; final Function(List<MediaFile> selectedMedias) onSelect;
Widget Function(String tag, MediaFile media, BuildContext context)? final Widget Function(String tag, MediaFile media, BuildContext context)?
heroBuilder; heroBuilder;
Widget Function(List<MediaFile> medias, BuildContext context)? final Widget Function(List<MediaFile> medias, BuildContext context)?
multipleMediasBuilder; multipleMediasBuilder;
bool startWithRecent; final bool startWithRecent;
BottomSheetBarController? sheetController; final BottomSheetBarController? sheetController;
List<MediaFile>? initSelectedMedias; final List<MediaFile>? initSelectedMedias;
bool singleMedia; final bool singleMedia;
GalleryPickerView( const GalleryPickerView(
{super.key, {super.key,
this.config, this.config,
required this.onSelect, required this.onSelect,
this.initSelectedMedias, this.initSelectedMedias,
this.singleMedia=false, this.singleMedia = false,
this.sheetController, this.sheetController,
this.heroBuilder, this.heroBuilder,
this.multipleMediasBuilder, this.multipleMediasBuilder,
@ -55,7 +55,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
onSelect: widget.onSelect, onSelect: widget.onSelect,
heroBuilder: widget.heroBuilder, heroBuilder: widget.heroBuilder,
multipleMediasBuilder: widget.multipleMediasBuilder, multipleMediasBuilder: widget.multipleMediasBuilder,
initSelectedMedias:widget.initSelectedMedias, initSelectedMedias: widget.initSelectedMedias,
isRecent: widget.startWithRecent)); isRecent: widget.startWithRecent));
config = galleryController.config; config = galleryController.config;
} }
@ -181,8 +181,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
? AlbumMediasView( ? AlbumMediasView(
galleryAlbum: controller.recent!, galleryAlbum: controller.recent!,
controller: controller, controller: controller,
singleMedia:widget.singleMedia singleMedia: widget.singleMedia)
)
: const Center( : const Center(
child: CircularProgressIndicator( child: CircularProgressIndicator(
color: Colors.grey, color: Colors.grey,
@ -209,7 +208,7 @@ class _GalleryPickerState extends State<GalleryPickerView> {
galleryController = Get.put(PhoneGalleryController(config, galleryController = Get.put(PhoneGalleryController(config,
onSelect: widget.onSelect, onSelect: widget.onSelect,
heroBuilder: widget.heroBuilder, heroBuilder: widget.heroBuilder,
initSelectedMedias:widget.initSelectedMedias, initSelectedMedias: widget.initSelectedMedias,
multipleMediasBuilder: widget.multipleMediasBuilder, multipleMediasBuilder: widget.multipleMediasBuilder,
isRecent: widget.startWithRecent)); isRecent: widget.startWithRecent));
await controller.initializeAlbums(); await controller.initializeAlbums();

View File

@ -5,9 +5,9 @@ import '../../controller/gallery_controller.dart';
import 'tappable_appbar.dart'; import 'tappable_appbar.dart';
class PickerAppBar extends StatelessWidget with PreferredSizeWidget { class PickerAppBar extends StatelessWidget with PreferredSizeWidget {
PhoneGalleryController controller; final PhoneGalleryController controller;
BottomSheetController? bottomSheetController; final BottomSheetController? bottomSheetController;
PickerAppBar( const PickerAppBar(
{super.key, {super.key,
required this.bottomSheetController, required this.bottomSheetController,
required this.controller}); required this.controller});
@ -25,7 +25,7 @@ class PickerAppBar extends StatelessWidget with PreferredSizeWidget {
bottomSheetController!.close(); bottomSheetController!.close();
} else { } else {
Navigator.pop(context); Navigator.pop(context);
await Future.delayed(Duration(milliseconds: 500)); await Future.delayed(const Duration(milliseconds: 500));
controller.disposeController(); controller.disposeController();
} }
}, },
@ -67,5 +67,5 @@ class PickerAppBar extends StatelessWidget with PreferredSizeWidget {
} }
@override @override
Size get preferredSize => Size.fromHeight(48); Size get preferredSize => const Size.fromHeight(48);
} }

View File

@ -2,11 +2,10 @@ import 'package:flutter/material.dart';
import '/gallery_picker.dart'; import '/gallery_picker.dart';
class ReloadGallery extends StatelessWidget { class ReloadGallery extends StatelessWidget {
late Config config; final Config config;
Function() onpressed; final Function() onpressed;
ReloadGallery(Config? config, {super.key, required this.onpressed}) { ReloadGallery(Config? config, {super.key, required this.onpressed})
this.config = config ?? Config(); : config = config ?? Config();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -19,7 +18,7 @@ class ReloadGallery extends StatelessWidget {
), ),
child: Container( child: Container(
height: 50, height: 50,
padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10), padding: const EdgeInsets.symmetric(horizontal: 30, vertical: 10),
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.blue, borderRadius: BorderRadius.circular(10)), color: Colors.blue, borderRadius: BorderRadius.circular(10)),
child: const Center( child: const Center(

View File

@ -3,9 +3,10 @@ import 'package:get/get.dart';
import '../../controller/bottom_sheet_controller.dart'; import '../../controller/bottom_sheet_controller.dart';
class TappableAppbar extends StatelessWidget { class TappableAppbar extends StatelessWidget {
BottomSheetController? controller; final BottomSheetController? controller;
Widget child; final Widget child;
TappableAppbar({super.key, required this.controller,required this.child}); const TappableAppbar(
{super.key, required this.controller, required this.child});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

View File

@ -25,12 +25,13 @@ class GridViewStatic extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return verticalView(); return verticalView();
} }
Widget horizontalView() { Widget horizontalView() {
return SizedBox( return SizedBox(
height: size, height: size,
child: Column( child: Column(
children: [ children: [
for (int i = 0; i < crossAxisCount; i+=crossAxisCount) for (int i = 0; i < crossAxisCount; i += crossAxisCount)
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
bottom: i != children.length - 1 ? mainAxisSpacing : 0), bottom: i != children.length - 1 ? mainAxisSpacing : 0),
@ -38,7 +39,9 @@ class GridViewStatic extends StatelessWidget {
height: size / crossAxisCount, height: size / crossAxisCount,
child: Row( child: Row(
children: [ children: [
for (int j = i; j < i + (children.length~/crossAxisCount)+1; j++) for (int j = i;
j < i + (children.length ~/ crossAxisCount) + 1;
j++)
j < children.length j < children.length
? Expanded( ? Expanded(
child: Padding( child: Padding(
@ -48,7 +51,7 @@ class GridViewStatic extends StatelessWidget {
: 0), : 0),
child: children[j], child: children[j],
)) ))
: Spacer() : const Spacer()
], ],
), ),
), ),
@ -63,7 +66,7 @@ class GridViewStatic extends StatelessWidget {
width: size, width: size,
child: Column( child: Column(
children: [ children: [
for (int i = 0; i < children.length; i+=crossAxisCount) for (int i = 0; i < children.length; i += crossAxisCount)
SizedBox( SizedBox(
width: size, width: size,
height: (size / crossAxisCount) * childAspectRatio, height: (size / crossAxisCount) * childAspectRatio,
@ -82,7 +85,7 @@ class GridViewStatic extends StatelessWidget {
: 0), : 0),
child: children[j], child: children[j],
)) ))
: Spacer() : const Spacer()
], ],
), ),
), ),

View File

@ -9,7 +9,11 @@ class ThumbnailMediaFile extends StatelessWidget {
final MediaFile file; final MediaFile file;
final Color failIconColor; final Color failIconColor;
final Config config; final Config config;
const ThumbnailMediaFile({super.key, required this.file, required this.failIconColor,required this.config}); const ThumbnailMediaFile(
{super.key,
required this.file,
required this.failIconColor,
required this.config});
Color adjustFailedBgColor() { Color adjustFailedBgColor() {
if (config.mode == Mode.dark) { if (config.mode == Mode.dark) {

View File

@ -1,4 +1,4 @@
import 'package:flutter_test/flutter_test.dart'; //import 'package:flutter_test/flutter_test.dart';
void main() { void main() {
//test('adds one to input values', () { //test('adds one to input values', () {