easy_gallery_saver 1.0.1 copy "easy_gallery_saver: ^1.0.1" to clipboard
easy_gallery_saver: ^1.0.1 copied to clipboard

Simple Flutter package to save images to gallery with one function call. Supports assets, files, and network images. No external dependencies for saving images.

πŸ“Έ Easy Gallery Saver #

pub package License: MIT

Rasmlarni galereiyaga saqlash uchun eng oddiy va eng tez Flutter package!
Save images to gallery with just ONE line of code!

βœ… Hech qanday tashqi dependency yo'q - To'liq native implementation
βœ… Bitta funksiya chaqiruvi - EasyGallerySaver.saveImage()
βœ… Asset, File, Network - Barcha manbalarni qo'llab-quvvatlaydi
βœ… Avtomatik ruxsat - Permission handling ichida
βœ… Custom album - O'z albomingizni yarating
βœ… Android 13+ support - Eng yangi Android versiyalari
βœ… iOS 11+ - Barcha iOS qurilmalari

πŸ“¦ O'rnatish / Installation #

pubspec.yaml fayliga qo'shing:

dependencies:
  easy_gallery_saver: ^1.0.1

Keyin:

flutter pub get

πŸš€ Foydalanish / Usage #

Import qiling #

import 'package:easy_gallery_saver/easy_gallery_saver.dart';

Bitta qatorlik kod! #

bool saved = await EasyGallerySaver.saveImage('assets/images/photo.jpg');

Bu qadar! πŸŽ‰

πŸ“ Batafsil misollar / Detailed Examples #

1️⃣ Asset dan rasm saqlash #

bool result = await EasyGallerySaver.saveImage('assets/images/logo.png');

if (result) {
  print('βœ… Rasm saqlandi!');
} else {
  print('❌ Xatolik yuz berdi');
}

2️⃣ Internetdan rasm saqlash #

await EasyGallerySaver.saveImage(
  'https://picsum.photos/800/600'
);

3️⃣ File system dan rasm saqlash #

File imageFile = File('/path/to/image.jpg');
await EasyGallerySaver.saveImage(imageFile.path);

4️⃣ Custom albom nomi bilan #

await EasyGallerySaver.saveImage(
  'assets/images/photo.jpg',
  albumName: 'My Special Album',
);

5️⃣ Tugma bilan to'liq misol #

import 'package:flutter/material.dart';
import 'package:easy_gallery_saver/easy_gallery_saver.dart';

class SaveImageButton extends StatefulWidget {
  @override
  _SaveImageButtonState createState() => _SaveImageButtonState();
}

class _SaveImageButtonState extends State<SaveImageButton> {
  bool _isLoading = false;

  Future<void> _saveImage() async {
    setState(() => _isLoading = true);

    bool result = await EasyGallerySaver.saveImage(
      'https://picsum.photos/800/600',
      albumName: 'Downloaded Images',
    );

    setState(() => _isLoading = false);

    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(
        content: Text(result ? 'βœ… Saved!' : '❌ Failed'),
        backgroundColor: result ? Colors.green : Colors.red,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton.icon(
      onPressed: _isLoading ? null : _saveImage,
      icon: _isLoading 
          ? SizedBox(
              width: 20,
              height: 20,
              child: CircularProgressIndicator(strokeWidth: 2),
            )
          : Icon(Icons.download),
      label: Text(_isLoading ? 'Saving...' : 'Save Image'),
    );
  }
}

6️⃣ Ruxsatni tekshirish #

bool hasPermission = await EasyGallerySaver.checkPermission();

if (!hasPermission) {
  print('Galereiyaga kirish ruxsati yo\'q');
}

βš™οΈ Platformani sozlash / Platform Setup #

πŸ“± Android Setup #

android/app/src/main/AndroidManifest.xml fayliga qo'shing:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <!-- ... -->
    </application>
    
    <!-- Android 12 va pastroq uchun -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="32" />
    
    <!-- Android 13+ uchun -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
</manifest>

🍎 iOS Setup #

ios/Runner/Info.plist fayliga qo'shing:

<dict>
    <!-- ... boshqa sozlamalar ... -->
    
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>Rasmlarni galereiyaga saqlash uchun ruxsat kerak</string>
    
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Rasmlarni ko'rish uchun ruxsat kerak</string>
</dict>

πŸ“š API Reference #

saveImage() #

Rasmni galereiyaga saqlaydi.

static Future<bool> saveImage(
  String imagePath, {
  String? albumName,
})

Parametrlar:

  • imagePath (String, required) - Rasm manbasi:
    • Asset: 'assets/images/photo.jpg'
    • File: '/storage/emulated/0/Pictures/photo.jpg'
    • Network: 'https://example.com/image.jpg'
  • albumName (String, optional) - Albom nomi (default: "EasyGallerySaver")

Qaytaradi:

  • Future<bool> - true agar muvaffaqiyatli, false agar xatolik

Misol:

bool success = await EasyGallerySaver.saveImage(
  'https://example.com/photo.jpg',
  albumName: 'My Photos',
);

checkPermission() #

Galereiya ruxsati holatini tekshiradi.

static Future<bool> checkPermission()

Qaytaradi:

  • Future<bool> - true agar ruxsat berilgan, false agar yo'q

Misol:

bool hasPermission = await EasyGallerySaver.checkPermission();

πŸ’‘ Ko'p uchraydigan savollar / FAQ #

❓ Qanday formatlar qo'llab-quvvatlanadi? #

Barcha rasm formatlari: JPG, PNG, GIF, BMP, WebP va boshqalar.

❓ Rasmlar qayerga saqlanadi? #

Android: Pictures/[AlbumName]/ papkaga
iOS: Photo Library ga, belgilangan albomga

❓ Ruxsat avtomatik so'raladimi? #

Ha! Package avtomatik ravishda kerakli ruxsatlarni so'raydi.

❓ Internetdan yuklash vaqtini qanday boshqarish mumkin? #

Package avtomatik yuklaydi. Faqat loading indicator ko'rsatish kerak:

setState(() => isLoading = true);
await EasyGallerySaver.saveImage(url);
setState(() => isLoading = false);

❓ Bir nechta rasmni birgalikda saqlay olamanmi? #

Ha, loop dan foydalaning:

List<String> images = [
  'https://example.com/1.jpg',
  'https://example.com/2.jpg',
  'https://example.com/3.jpg',
];

for (String url in images) {
  await EasyGallerySaver.saveImage(url);
}

❓ Custom fayl nomini qo'yish mumkinmi? #

Rasmlar avtomatik IMG_YYYYMMDD_HHMMSS.jpg formatida nomlanadi.

πŸ”§ Texnik talablar / Requirements #

  • Flutter SDK: >=3.0.0
  • Dart SDK: >=3.10.0
  • Android: API level 21+ (Android 5.0+)
  • iOS: 11.0+

πŸ“¦ Dependencies #

Faqat bitta dependency:

  • permission_handler - Ruxsatlarni boshqarish uchun

Note: Biz image_gallery_saver ishlatmaymiz! To'liq native implementation.

🎯 Xususiyatlar / Features #

  • βœ… Native Android va iOS kodi
  • βœ… Scoped Storage (Android 10+) qo'llab-quvvatlash
  • βœ… Photo Library (iOS) to'liq qo'llab-quvvatlash
  • βœ… Avtomatik ruxsat so'rash
  • βœ… Custom album yaratish
  • βœ… Xatoliklarni boshqarish
  • βœ… Debugging support
  • βœ… Async/await qo'llab-quvvatlash

πŸ› Muammolar / Issues #

Muammo yuzaga kelsa:

  1. GitHub Issues ga xabar bering
  2. Muammoni batafsil tasvirlab bering
  3. Platforma va versiyani ko'rsating
  4. Error log ni qo'shing

🀝 Hissa qo'shish / Contributing #

Hissa qo'shmoqchimisiz? Juda yaxshi!

  1. Repository ni fork qiling
  2. Feature branch yarating: git checkout -b feature/NewFeature
  3. O'zgarishlaringizni commit qiling: git commit -m 'Add NewFeature'
  4. Branch ni push qiling: git push origin feature/NewFeature
  5. Pull Request oching

πŸ“„ License #

MIT License - LICENSE faylida batafsil.

πŸ‘¨β€πŸ’» Muallif / Author #

Abubakr - Flutter Developer

⭐ Yoqsa - yulduzcha bering! #

Agar bu package sizga yordam bergan bo'lsa, GitHub da ⭐ bosing!

πŸ™ Minnatdorchilik #

  • Flutter team
  • permission_handler package developers
  • Barcha contributors

Made with ❀️ in Uzbekistan πŸ‡ΊπŸ‡Ώ

Easy Gallery Saver - Rasmlarni saqlashning eng oson yo'li!

1
likes
140
points
184
downloads

Publisher

unverified uploader

Weekly Downloads

Simple Flutter package to save images to gallery with one function call. Supports assets, files, and network images. No external dependencies for saving images.

Repository (GitHub)
View/report issues

Topics

#gallery #image #save #permission #media

Documentation

API reference

License

MIT (license)

Dependencies

flutter, permission_handler

More

Packages that depend on easy_gallery_saver

Packages that implement easy_gallery_saver