flutter_remote_asset_manager 0.2.0
flutter_remote_asset_manager: ^0.2.0 copied to clipboard
A lightweight Flutter/Dart asset management library for downloading, verifying, caching, and syncing files from a cdn or url
// example/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_remote_asset_manager/services/asset_management/asset_loader.dart';
import 'package:flutter_remote_asset_manager/services/asset_management/app_asset.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const ExampleApp());
}
class ExampleApp extends StatefulWidget {
const ExampleApp({super.key});
@override
State<ExampleApp> createState() => _ExampleAppState();
}
class _ExampleAppState extends State<ExampleApp> {
double progress = 0;
String status = "Starting...";
@override
void initState() {
super.initState();
_downloadExampleAssets();
}
Future<void> _downloadExampleAssets() async {
setState(() => status = "Preparing assets...");
final assets = [
AppAsset(
id: "flutter-logo",
path: "images/flutter_logo.png",
url: "https://flutter.dev/assets/images/shared/brand/flutter/logo/flutter-lockup.png",
),
AppAsset(
id: "dart-logo",
path: "images/dart_logo.png",
url: "https://dart.dev/assets/shared/dart/logo+text/horizontal/white.svg",
),
];
await AssetLoader.downloadAssetList(
assets: assets,
urlResolver: (a) => a.url,
concurrency: 2,
onFileProgress: (asset, p) {
setState(() {
progress = p;
status = "Downloading ${asset.path}";
});
},
onFileCompleted: (asset, msg) {
setState(() => status = "Completed ${asset.path}");
},
onFileFailed: (asset, err) {
setState(() => status = "Failed ${asset.path}: $err");
},
onOverallProgress: (done, total) {
setState(() => status = "Progress: $done / $total");
},
onAllCompleted: () {
setState(() => status = "✅ All downloads complete!");
},
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Asset Manager Example',
home: Scaffold(
appBar: AppBar(title: const Text('Asset Manager Example')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(status, textAlign: TextAlign.center),
const SizedBox(height: 20),
LinearProgressIndicator(value: progress.isNaN ? null : progress),
const SizedBox(height: 40),
ElevatedButton(
onPressed: _downloadExampleAssets,
child: const Text("Retry Download"),
),
],
),
),
),
);
}
}