A Flutter plugin for changing the Home Screen, Lock Screen (or both) Wallpaper(s) on Android devices.
In the pubspec.yaml
of your flutter project, add the following dependency:
dependencies:
...
wallpaper_manager: "^1.0.10"
In your library add the following import:
import 'package:wallpaper_manager/wallpaper_manager.dart';
Since this is not a Widget, you have to create WallpaperManager constructors from inside an async function, which is a Future that returns a String output specifying success/failure.
String path = "/path/to/file/on/disk";
int location = WallpaperManager.HOME_SCREEN; // or location = WallpaperManager.LOCK_SCREEN;
final String result = await WallpaperManager.setWallpaperFromFile(path, location);
You might want to wrap it in a try/catch since platform messages (plug-ins like these) may fail
String path = "/path/to/file/on/disk";
int location = WallpaperManager.HOME_SCREEN; // or location = WallpaperManager.LOCK_SCREEN;
String result;
try {
result = await WallpaperManager.setWallpaperFromFile(path, location);
} on PlatformException {
result = 'Failed to get wallpaper.';
}
If you're loading a Wallpaper from a URL, you should save it to the disk first, then use the path of the saved image file. Add flutter_cache_manager or any other dependency you'd like:
dependencies:
...
flutter_cache_manager: "^1.1.3"
And in dart code
String url = "";
int location = WallpaperManager.HOME_SCREEN; // or location = WallpaperManager.LOCK_SCREEN;
String result;
var file = await DefaultCacheManager().getSingleFile(url);
final String result = await WallpaperManager.setWallpaperFromFile(file.path, location);
If you're loading a Wallpaper from an asset, you need to make sure it is indexed in the pubspec.yaml file first
dependencies:
...
flutter:
...
assets:
- assets/tmp1.jpeg
And in dart code
String assetPath = "assets/tmp1.jpg";
int location = WallpaperManager.HOME_SCREEN; // or location = WallpaperManager.LOCK_SCREEN;
String result;
final String result = await WallpaperManager.setWallpaperFromAsset(assetPath, location);
See the example
directory for a complete sample app using Wallpaper Manager.
For help getting started with Flutter, view the online documentation.
- iOS does not support changing Wallpapers from third-party apps (Source)
- Xiaomi/MIUI does not support changing Lock Screen Wallpapers directly from the Android API (Source). You might want to look at creating a Lock Screen Launcher app instead.
- Due to a change in Flutter's Embedding Engine, you might face an issue while building your project. To work around this, you can upgrade to the latest version of the plugin (which directly handles both v1 & v2 Embedding from v.1.0.6) or change the Flutter Embedding Engine version in your project.
- Write tests
- Add rect values for optionally cropping the image
- Add variable for re-using Wallpaper from phone's settings
- Write more tests
Please see the Changelog page to know what's recently changed.
Feel free to contribute to this project.
If you find a bug or want a feature, but don't know how to fix/implement it, please fill an issue.
If you fixed a bug or implemented a feature, please send a pull request.