Siren
An easy way to listen for and react to Version updates for your Flutter Android and iOS apps.
Features
A Version number typically has the format x.y.z+b
where b is short for small bugfix updates. This version number as a String is handled by the Version class. It also overrides equality (by simply comparing the version String values) as well as methods like isHigherThan
and isLowerThan
to compare version instances.
Version {
final String version;
late final int x;
late final int y;
late final int z;
late final int bugfix;
...
}
The real magic happens in the Siren class. Wherever you want to use it, simply create an instance (you should not do this in your build method - DUH!) right then and there. You can then access the fields getCurrentVersion(...)
and getNewVersion(...)
or by calling the mapPolicy
function and handling every update case there. In case there is no update mapPolicy
simply returns null. Each callback provides a Future
const siren = Siren();
siren.mapPolicy(
onXUpdate: (openStore, oldV, newV) => showAlertDialog(...),
onYUpdate: (openStore, _, __) => showAlertDialog(...),
onZUpdate: (openStore, _, __) => showAlertDialog(...),
onBugfixUpdate: (_, __, ___) {},
);
Additional information
The issue I had with similar plugins is, that I wanted to display my custom Widgets for each individual case with different functionality. The policy I was looking to implement was the following:
x
part changes -> depricate older version and force user to update!y
part changes -> notify user of update but give them the option to update at a later point in time.z
part changes -> don't even tell the user about it. If they update (or have autoupdate active) nice otherwise we just wait for a bigger update.bugfix
part changes -> same asz
.