πΈ Easy Gallery Saver
Rasmlarni galereiyaga saqlash uchun eng oddiy va eng tez Flutter package!
Save images to gallery with just ONE line of code!
β‘ Nima uchun Easy Gallery Saver?
β
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'
- Asset:
albumName(String, optional) - Albom nomi (default: "EasyGallerySaver")
Qaytaradi:
Future<bool>-trueagar muvaffaqiyatli,falseagar 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>-trueagar ruxsat berilgan,falseagar 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:
- GitHub Issues ga xabar bering
- Muammoni batafsil tasvirlab bering
- Platforma va versiyani ko'rsating
- Error log ni qo'shing
π€ Hissa qo'shish / Contributing
Hissa qo'shmoqchimisiz? Juda yaxshi!
- Repository ni fork qiling
- Feature branch yarating:
git checkout -b feature/NewFeature - O'zgarishlaringizni commit qiling:
git commit -m 'Add NewFeature' - Branch ni push qiling:
git push origin feature/NewFeature - Pull Request oching
π License
MIT License - LICENSE faylida batafsil.
π¨βπ» Muallif / Author
Abubakr - Flutter Developer
- GitHub: @AbubakrFlutter
- Email: your.email@example.com
β Yoqsa - yulduzcha bering!
Agar bu package sizga yordam bergan bo'lsa, GitHub da β bosing!
π Minnatdorchilik
- Flutter team
permission_handlerpackage developers- Barcha contributors
Made with β€οΈ in Uzbekistan πΊπΏ
Easy Gallery Saver - Rasmlarni saqlashning eng oson yo'li!