live_activities 1.2.1
live_activities: ^1.2.1 copied to clipboard
A Flutter plugin to use iOS 16.1+ Live Activities & iPhone 14 Pro Dynamic Island features
![flutter ios 16 live activities](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/logo.png)
Live Activities #
A Flutter plugin to use iOS 16.1+ Live Activities & iPhone 14 Pro Dynamic Island features.
๐ง What is it ? #
This plugin use iOS ActivityKit API.
live_activities can be used to show dynamic live notification & implement dynamic island feature on the iPhone 14 Pro / Max โซ๏ธ
โ ๏ธ live_activities is only intended to use with iOS 16.1+ ! It will simply do nothing on other platform & < iOS 16.1
![flutter ios 16 live activities preview dynamic island](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/preview_live_activities.gif)
![flutter ios 16 live activities preview action](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/preview_action.gif)
๐ป Getting started #
Due to some technical restriction, it's not currently possible to only use Flutter ๐ซฃ.
You need to implement in your Flutter iOS project a Widget Extension & develop in Swift/Objective-C your own Live Activity / Dynamic Island design.
โน๏ธ You can check into the example repository for a full example app using Live Activities & Dynamic Island
๐งต Native #
-
๐ฑ Create natively your Live Activity view tutorial
- โซ๏ธ (Opt.) Create natively a Dynamic Island tutorial
-
๐ Enable push notification capabilities.
![enable push notification capabilities](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/tutorial/push_capability.png)
- โน๏ธ Enable live activities for both your app & widget extension.
![enable live activity](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/tutorial/live_activity.png)
๐ Flutter #
- ๐ Import the plugin.
import 'package:live_activities/live_activities.dart';
- ๐ฃ Create your dynamic activity.
final Map<String, String> activityModel = {
'name': 'Margherita',
'ingredient': 'tomato, mozzarella, basil',
'quantity': '1',
};
_liveActivitiesPlugin.createActivity(activityModel.toMap());
โ ๏ธ For now you can only pass values as
String
.
Communicate over Native ๐งต and Flutter ๐ #
In order to pass some useful data between your native live activity / dynamic island with your Flutter app you just need to setup URL scheme.
- ๐ Add a custom url scheme in Xcode by navigating to Runner > Runner > URL Types > URL Schemes
![add url scheme xcode](https://raw.githubusercontent.com/istornz/live_activities/main/.github/images/tutorial/url_scheme.png)
- ๐ In your Swift code, just create a new link and open to your custom URL Scheme
Link(destination: URL(string: "la://my.app/order?=123")!) { // Replace "la" with your scheme
Text("See order")
}
โ ๏ธ Don't forget to put the URL Scheme you have typed in the previous step.
- ๐ In your Flutter App, you just need to listen on the url scheme Scheme
_liveActivitiesPlugin.urlSchemeStream().listen((schemeData) {
// do what do you want here ๐ค
});
๐ Documentation #
Name | Description | Returned value |
---|---|---|
.createActivity() |
Create an iOS live activity, | String The activity identifier |
.updateActivity() |
Update the live activity data by using the activityId provided |
Future When the activity was updated |
.endActivity() |
End the live activity by using the activityId provided |
Future When the activity was ended |
.getAllActivitiesIds() |
Get all activities ids created | Future<List<String>> List of all activities ids |
.endAllActivities() |
End all live activities of the app | Future When all activities was ended |
.areActivitiesEnabled() |
Check if live activities feature are supported & enabled | Future<bool> Live activities supported or not |
.getActivityState() |
Get the activity current state | Future<LiveActivityState> An enum to know the status of the activity (active , dismissed or ended ) |
.urlSchemeStream() |
Subscription to handle every url scheme (ex: when the app is opened from a live activity / dynamic island button, you can pass data) | Future<UrlSchemeData> Url scheme data which handle scheme url host path queryItems |
๐ฏ Roadmap #
- Support multiple type instead of
String
(Date, Number etc.). - Inject a Widget inside the notification with Flutter Engine ?
- Pass data across native dynamic island and Flutter app.
- Pass data across native live activity notification and Flutter app.
- Cancel all activities.
- Get all activities ids.
- Check if live activities are supported.