/flutter/media_backup/Active/v0.3.0

media_backup

iOS-Fotomediathek indexieren und in die eigene Cloud sichern: Supabase, S3, GCS, Azure, Firebase oder ein beliebiger HTTP-Endpunkt.

$flutter pub add media_backup
iosswiftflutter
flutter package

Snapshot

media_backup

flutter pub add media_backup

status

Active

version

v0.3.0

score

140/160

platforms

3
iosswiftflutter
Package öffnen
01

Features

features.md
  • →Fotomediathek in SQLite indexieren, Scan per Cursor wiederaufnehmbar, danach inkrementell
  • →Live-Deltas über PHPhotoLibraryChangeObserver
  • →Upload zu Supabase, S3, GCS, Azure, Firebase oder eigenem HTTP-Endpunkt
  • →Wiederaufnehmbare Uploads: TUS bei Supabase, Multipart bei S3
  • →Byte-Budget statt fester Aufgabenzahl, getrennte Pools für Extraktion und Upload
  • →Fortschritts-Stream je Asset ohne Polling, Steuerung zur Laufzeit
  • →iCloud-Download vor dem Upload, optional
02

Dokumentation

README.md

Ein Flutter-Plugin, das die iOS-Fotomediathek in eine lokale SQLite-Datenbank einliest und die Medien an einen Speicher der Wahl hochlädt: Supabase, S3, GCS, Azure, Firebase oder ein eigener HTTP-Endpunkt.

Der erste Scan ist per Cursor wiederaufnehmbar, danach holen Folgescans nur noch, was seit dem letzten Lauf neu oder geändert ist. Ein Beobachter auf der Fotomediathek meldet Aufnahmen, Änderungen und Löschungen live. Extraktion (iCloud-Download, Temp-Datei) und Upload laufen in getrennten Pools, damit ein langsamer iCloud-Download keinen Upload-Platz blockiert. Die Nebenläufigkeit wird über ein Byte-Budget gesteuert statt über eine feste Anzahl Aufgaben.

Große Dateien laufen wiederaufnehmbar über TUS (Supabase) oder S3-Multipart. Fehler werden mit Backoff und Jitter wiederholt, dauerhafte Fehler markiert. Ein Stream liefert Fortschritt, Abschluss und Fehler je Asset ohne Polling. Start, Pause, Wiederholen, Statuszähler und Datenbank-Reset sind zur Laufzeit steuerbar.

Bisher nur iOS (ab 13.0), Android ist geplant. MIT-Lizenz.

03

Code-Beispiele

Installation
dependencies:
  media_backup: ^0.3.0
Konfigurieren
await MediaBackup.configure(
  settings: MediaBackupSettings(
    enableDeltaObserver: true,
    startUploader: true,
    maxInFlightBytes: 300 * 1024 * 1024,
    remoteFolder: 'my_app/user_42',
    provider: const SupabaseUploadProvider(
      projectUrl: 'https://<project>.supabase.co',
      bucket: 'media-backup',
      accessToken: '<token>',
    ),
  ),
);
final init = await MediaBackup.instance.initialize();
if (init.permissionGranted) {
  await MediaBackup.instance.loadAssetsToDatabase();
}
Steuern
MediaBackup.instance.uploader.start();
MediaBackup.instance.uploader.pause();
await MediaBackup.instance.uploader.retryFailed();
final counts = await MediaBackup.instance.uploader.statusCounts();