Shorebird Code Push
A Dart package for communicating with the Shorebird Code Push Updater. Use this in your Shorebird app to:
- ✅ Get the currently installed patch version
- ✅ Check whether a new patch is available
- ✅ Download new patches
Getting Started
If your Flutter app does not already use Shorebird, follow our Getting Started Guide to add code push to your app.
Installation
flutter pub add shorebird_code_push
Usage
After adding the package to your pubspec.yaml
, you can use it in your app like
this:
// Import the library
import 'package:shorebird_code_push/shorebird_code_push.dart';
// Launch your app
void main() => runApp(const MyApp());
// [Other code here]
class _MyHomePageState extends State<MyHomePage> {
// Create an instance of the updater class
final updater = ShorebirdUpdater();
@override
void initState() {
super.initState();
// Get the current patch number and print it to the console.
// It will be `null` if no patches are installed.
updater.readCurrentPatch().then((currentPatch) {
print('The current patch number is: ${currentPatch?.number}');
});
}
Future<void> _checkForUpdates() async {
// Check whether a new update is available.
final status = await updater.checkForUpdate();
if (status == UpdateStatus.outdated) {
try {
// Perform the update
await updater.update();
} on UpdateException catch (error) {
// Handle any errors that occur while updating.
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
// [Other code here]
ElevatedButton(
child: Text('Check for update'),
onPressed: _checkForUpdates,
)
// [Other code here]
);
}
}
See the example for a complete working app.
Tracks
Shorebird also supports publishing patches to different tracks, which can be used to target different segments of your user base. See https://docs.shorebird.dev/code-push/guides/percentage-based-rollouts/ for a guide on using this functionality to implement percentage-based rollouts.
You must first publish a patch to a specific track (patches are published to the
stable
track by default). To publish a patch to a different track, update your
patch command to use the --track
argument:
shorebird patch android --track beta
(We're just using Android for this example. Tracks are supported on all platforms).
To check for updates on a given track, simply pass an UpdateTrack
to
checkForUpdate
and update
. For example, this:
final status = await updater.checkForUpdate();
if (status == UpdateStatus.outdated) {
await updater.update();
}
Becomes this:
final status = await updater.checkForUpdate(track: UpdateTrack.beta);
if (status == UpdateStatus.outdated) {
await updater.update(track: UpdateTrack.beta);
}
You can also use custom track names. When creating a patch, specify a track name like this:
shorebird patch android --track my-custom-track
And:
const track = UpdateTrack('my-custom-track');
final status = await updater.checkForUpdate(track: track);
if (status == UpdateStatus.outdated) {
await updater.update(track: track);
}
Join us on Discord!
We have an active Discord server where you can ask questions and get help.
Contributing
See CONTRIBUTING.md.