versionarte 2.0.0
versionarte: ^2.0.0 copied to clipboard
Force update, show update indicator and disable the app for maintenance with total freedom over the UI.
versionarte #
Force update, show update indicator and disable the app for maintenance with total freedom over the UI.
π Benefits #
- β Force users to update to the latest version
- ππ»ββοΈ Have separate values for each platform
- π§ Disable app for maintenance with custom informative text
- π Inform users about an optional update availability
- π Launch the App Store on iOS and Play Store on Android
Forced update | New version indicator | Maintenance mode |
---|---|---|
![]() |
![]() |
![]() |
π Sponsors #
- UserOrient: Feature Voting Board for Flutter

π« Getting Started #
Add the package and import it:
dependencies:
versionarte: <latest_version>
import 'package:versionarte/versionarte.dart';
π‘ Checking Version Status #
Call Versionarte.check
with a provider to get the app's versioning status:
// Using Firebase Remote Config (most common)
final VersionarteResult result = await Versionarte.check(
versionarteProvider: RemoteConfigVersionarteProvider(),
);
Choose from three provider types based on your backend:
1. Using Firebase Remote Config #
Recommended for apps already using Firebase
final VersionarteResult result = await Versionarte.check(
versionarteProvider: RemoteConfigVersionarteProvider(),
);
Optional parameters:
keyName
: Firebase config key (default: "versionarte")initializeInternally
: Set tofalse
if your app already initializes FirebaseremoteConfigSettings
: Custom settings if needed
See Firebase Remote Config setup guide for configuration details.
2. Using RESTful API #
Recommended for apps with custom backends
final VersionarteResult result = await Versionarte.check(
versionarteProvider: RestfulVersionarteProvider(
url: 'https://myapi.com/getVersioning',
),
);
Optional parameters:
headers
: Custom HTTP headers if needed
Note: Your RESTful endpoint must return the same JSON structure as shown in the Configuration JSON section below.
3. Using Custom VersionarteProvider #
For advanced use cases with custom data sources
class MyCustomVersionarteProvider extends VersionarteProvider {
@override
Future<DistributionManifest> getDistributionManifest() async {
final String result = MyCustomService.fetchVersioning();
final Map<String, dynamic> decodedResult = jsonDecode(result);
return DistributionManifest.fromJson(decodedResult);
}
}
π― Handle the Status #
Use the status
value to determine what action to take:
if (result.status == VersionarteStatus.inactive) {
// App is in maintenance mode
final String message = result.getMessageForLanguage('en');
showMaintenanceDialog(message);
} else if (result.status == VersionarteStatus.forcedUpdate) {
// User must update to continue
showForceUpdateDialog(
onUpdate: () {
Versionarte.launchDownloadUrl(result.downloadUrls);
},
);
} else if (result.status == VersionarteStatus.outdated) {
// Update available but optional
showOptionalUpdateDialog(
onUpdate: () {
Versionarte.launchDownloadUrl(result.downloadUrls);
},
);
}
Tip: You can also show different widgets based on status. For example, when the app is outdated, you might want to show an update indicator anywhere in your app (for example in home page):
Widget build(BuildContext context) {
return Column(
children: [
// other widgets
if (result.status == VersionarteStatus.outdated)
// A custom widget to show "Update available"
NewVersionAvailableIndicator(
onUpdate: () {
Versionarte.launchDownloadUrl(result.storeVersioning!.downloadUrls);
}
),
// other widgets
],
);
}
π Launching the Store #
To open the appropriate store for the current platform:
await Versionarte.launchDownloadUrl(result.downloadUrls);
Note: Add "download_url" in your configuration JSON for each platform. The correct store opens automatically based on the current platform.
See the example directory for a complete sample app.
ποΈ Configuration JSON #
The configuration JSON contains versioning and status information for each platform. Only configure platforms that your app supports.
{
"android": {
"version": {
"minimum": "2.7.0", // Minimum required version
"latest": "2.8.0" // Latest available version
},
"download_url": "https://play.google.com/store/apps/details?id=app.example",
"status": {
"active": true, // Whether app is currently active
"message": { // Only needed if active is false
"en": "App is in maintenance mode, please come back later.",
"es": "La aplicaciΓ³n estΓ‘ en modo de mantenimiento, vuelva mΓ‘s tarde."
}
}
},
"iOS": {
// Same structure as Android
},
// Optional: Include other platforms if needed (macOS, windows, linux)
}
π Need help? #
If you encounter any problems or need a feature, please raise a ticket on GitHub.