asset_delivery 1.1.0
asset_delivery: ^1.1.0 copied to clipboard
A Flutter plugin for managing on-demand asset delivery with Play Asset Delivery, supporting asset pack setup, progress tracking, and persistent storage.
Asset Delivery Plugin for Flutter #
Introduction #
The Asset Delivery Plugin simplifies managing on-demand asset delivery in Flutter applications. It integrates with Play Asset Delivery (Android) and On-Demand Resources (iOS), enabling dynamic asset downloads and seamless user experiences.
Key Features #
- On-Demand Asset Delivery: Download and access assets dynamically at runtime.
- Customizable Resource Management: Flexible naming patterns and ranges for asset files.
- Progress Tracking: Real-time download progress updates.
- Cross-Platform Support: Compatible with both Android and iOS.
Installation #
Add the following line to your pubspec.yaml
file:
dependencies:
asset_delivery:
git:
url: https://github.com/mohsen-motlagh/asset_delivery.git
ref: main
flutter:
generate: true
Setup #
Android #
Minimum SDK Version: 24
-
Add the Play Asset Delivery library to your Gradle file:
implementation "com.google.android.play:asset-delivery:2.2.2"
copied to clipboard -
Run the setup command in the terminal:
dart run asset_delivery:setup_asset_pack "YourAssetPackName"
copied to clipboard -
A folder named after your asset pack will be created, containing:
- A
build.gradle.kts
file. - A
manifest
folder with anAndroidManifest.xml
file.
- A
-
Add your assets in the following path:
ProjectDirectory/Android/YourAssetFolder/src/main/assets/"PUT YOUR ASSETS IN THIS DIRECTORY"
copied to clipboard -
Once published to the Play Store, you can retrieve assets dynamically. To test before publishing, follow the Testing steps below.
-
For multiple asset packs, repeat these steps for each asset pack.
Android Testing #
This method of testing is only available for Android versions below 12. Alternatively, you can publish your app to the Google Play Store for internal testing. #
-
Download the BundleTool.
-
Build your app bundle and use the following commands:
-
Generate the APKs:
java -jar bundletool.jar build-apks --bundle=<your_app_project_dir>/build/app/outputs/bundle/release/app-release.aab --output=<your_temp_dir>/app.apks --local-testing
copied to clipboard -
Install the APKs on your device:
java -jar bundletool.jar install-apks --apks=<your_temp_dir>/app.apks
copied to clipboard
-
-
To get the final APK size:
java -jar bundletool.jar get-size total --apks=<your_temp_dir>/app.apks --dimensions=SDK
copied to clipboard
iOS #
-
Open Xcode and navigate to your Runner project.
-
Add your assets to the Assets folder.
-
Configure the asset pack:
- Select the asset or folder.
- In the right panel, find On-Demand Resource Tags under the settings icon.
- Add your Asset Pack Name (this should match the name used for Android).
-
Ensure all assets are tagged appropriately.
iOS Testing #
You can test your iOS app by running it from Xcode on a real device or simulator, as well as using flutter run --release.
Usage #
-
Download Assets
On Android devices, download and install assets dynamically using:await assetDelivery.fetch("$assetpackName"); - If the assets already exist on the device, the download will be skipped automatically. - On iOS, this step is not necessary as assets are accessed directly.
copied to clipboard -
Track Download Progress During the download, track the status of the asset pack by calling:
await assetDelivery.getAssetPackStatus();
copied to clipboard
3. Retrieve Asset Path #
Get the local path to the downloaded assets using the following code:
final path = await assetDelivery.getAssetPackPath(
assetPackName: widget.assetPackName,
count: widget.assetsCount,
namingPattern: widget.namingPattern,
fileExtension: widget.fileExtension,
);
Parameters:
assetPackName: The name of the asset pack.
count: The number of assets in the pack.
namingPattern: The naming convention for the assets.
fileExtension: The file extension of the assets (e.g., 'mp3').
- Check for keyword "COMPLETED" from the status to be sure the assets completely downloaded
Example #
Suppor #
Please support the plugin by give a thumbs up in pub.dev and github
Contributions #
Contributions are welcome! Feel free to submit issues or pull requests on GitHub.
License #
This plugin is licensed under the MIT License. See the LICENSE file for details.