wallpaper 1.2.0
wallpaper: ^1.2.0 copied to clipboard
The Purpose of the plugin is to set wallpaper from url. Only supported to android. Internally using WallpaperManager to set wallpaper.
Wallpaper #
A Flutter plugin that allows you to download an image from a URL and set it as wallpaper on Android.
The plugin supports setting wallpapers for:
- Home screen
- Lock screen
- Both screens
- System wallpaper
Features #
- Download image from URL
- Track download progress
- Set wallpaper for home screen
- Set wallpaper for lock screen
- Set wallpaper for both screens
- Set system wallpaper
- Resize images before setting wallpaper
- Use modern opt-in fit modes for source-based wallpapers
- Read the platform-recommended wallpaper size
- Open the Android system wallpaper chooser
Installation #
Add the plugin to your pubspec.yaml:
dependencies:
wallpaper: ^1.2.0
Then run:
flutter pub get
Android Configuration #
The plugin manifest already declares the permissions it needs for downloading network images and setting wallpapers:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.SET_WALLPAPER"/>
Downloaded images are stored in app-private cache, files, or external files
directories depending on DownloadLocation. Apps using the default workflow do
not need READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE, and they do not
need to add their own file_paths.xml.
Usage #
Import the plugin:
import 'package:wallpaper/wallpaper.dart';
Recommended Wallpaper Size #
Use the recommended size when choosing, generating, cropping, or downloading an image for the current Android launcher:
final size = await Wallpaper.recommendedWallpaperSize();
print('${size.width} x ${size.height}');
Open Wallpaper Chooser #
Open Android's built-in wallpaper chooser without passing a specific image:
await Wallpaper.openWallpaperChooser();
Download Image #
final stream = Wallpaper.imageDownloadProgress(
imageUrl,
location: DownloadLocation.applicationDirectory,
);
stream.listen((progress) {
print(progress);
});
Typed Download Operation #
Use download when you need typed progress, headers, timeouts, cache reuse, or
cancellation:
final operation = Wallpaper.download(
imageUrl,
options: const WallpaperDownloadOptions(
imageName: 'daily_wallpaper',
headers: {'Authorization': 'Bearer token'},
connectTimeout: Duration(seconds: 15),
receiveTimeout: Duration(seconds: 30),
cachePolicy: WallpaperCachePolicy.reuse,
),
);
operation.progress.listen((progress) {
print(progress.percentage);
});
final file = await operation.completed;
await Wallpaper.homeScreen(
imageName: file.imageName,
fileExtension: file.fileExtension,
location: file.location,
);
Cancel an active operation:
await operation.cancel();
Clear plugin-managed temporary downloads created by the typed download API:
await Wallpaper.clearCache();
Set Home Screen Wallpaper #
await Wallpaper.homeScreen(
width: width,
height: height,
options: RequestSizeOptions.resizeFit,
location: DownloadLocation.applicationDirectory,
);
Set Lock Screen Wallpaper #
await Wallpaper.lockScreen(
location: DownloadLocation.applicationDirectory,
);
Set Both Wallpapers #
await Wallpaper.bothScreen(
location: DownloadLocation.applicationDirectory,
);
Set System Wallpaper #
await Wallpaper.systemScreen(
location: DownloadLocation.applicationDirectory,
);
Set Wallpaper From a Local File #
await Wallpaper.setFromFile(
file.path,
target: WallpaperTarget.home,
options: RequestSizeOptions.resizeFit,
fit: WallpaperFit.cover,
alignment: WallpaperAlignment.topCenter,
);
alignment is optional and defaults to center. It applies to WallpaperFit.cover
cropping and WallpaperFit.center placement.
Set Wallpaper From Bytes #
await Wallpaper.setFromBytes(
imageBytes,
target: WallpaperTarget.both,
fileExtension: ImageFormat.png,
);
Set Wallpaper From an Asset #
await Wallpaper.setFromAsset(
'assets/wallpaper.jpg',
target: WallpaperTarget.lock,
);
For assets bundled by another package:
await Wallpaper.setFromAsset(
'assets/wallpaper.jpg',
package: 'wallpaper_assets',
);
Unified Source API #
Use setWallpaperFromSource when you prefer a typed result instead of catching
PlatformException from the legacy methods:
final result = await Wallpaper.setWallpaperFromSource(
source: WallpaperSource.file(file.path),
options: const WallpaperOptions(
target: WallpaperTarget.home,
fit: WallpaperFit.cover,
alignment: WallpaperAlignment.topCenter,
),
);
switch (result) {
case WallpaperSuccess(:final message):
print(message);
case WallpaperFailure(:final exception):
print('${exception.code}: ${exception.message}');
}
Example #
final stream = Wallpaper.imageDownloadProgress(imageUrl);
stream.listen((progress) {
print("Downloading: $progress");
}, onDone: () async {
await Wallpaper.homeScreen(
width: 1080,
height: 1920,
options: RequestSizeOptions.resizeFit,
);
});
Supported Platform #
| Platform | Supported |
|---|---|
| Android | ✅ |
| iOS | ❌ |
Notes #
- Internet connection is required to download images.
- Lock screen wallpaper requires Android 7.0+ (API 24).
- Behavior may vary depending on device manufacturer.
- Starting multiple downloads with the same
imageNamewrites to the same file. Use unique names for concurrent downloads.
License #
MIT License