blob: f359fb78e6c481006c5cb404bb5f5aa872731ac4 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:meta/meta.dart';
const MethodChannel _kChannel =
MethodChannel('plugins.flutter.io/quick_actions');
/// Handler for a quick action launch event.
///
/// The argument [type] corresponds to the [ShortcutItem]'s field.
typedef void QuickActionHandler(String type);
/// Home screen quick-action shortcut item.
class ShortcutItem {
const ShortcutItem({
@required this.type,
@required this.localizedTitle,
this.icon,
});
/// The identifier of this item; should be unique within the app.
final String type;
/// Localized title of the item.
final String localizedTitle;
/// Name of native resource (xcassets etc; NOT a Flutter asset) to be
/// displayed as the icon for this item.
final String icon;
}
/// Quick actions plugin.
class QuickActions {
const QuickActions();
/// Initializes this plugin.
///
/// Call this once before any further interaction with the the plugin.
void initialize(QuickActionHandler handler) {
_kChannel.setMethodCallHandler((MethodCall call) async {
assert(call.method == 'launch');
handler(call.arguments);
});
}
/// Sets the [ShortcutItem]s to become the app's quick actions.
Future<void> setShortcutItems(List<ShortcutItem> items) async {
final List<Map<String, String>> itemsList =
items.map(_serializeItem).toList();
// TODO(amirh): remove this on when the invokeMethod update makes it to stable Flutter.
// https://github.com/flutter/flutter/issues/26431
// ignore: strong_mode_implicit_dynamic_method
await _kChannel.invokeMethod('setShortcutItems', itemsList);
}
/// Removes all [ShortcutItem]s registered for the app.
Future<void> clearShortcutItems() =>
// TODO(amirh): remove this on when the invokeMethod update makes it to stable Flutter.
// https://github.com/flutter/flutter/issues/26431
// ignore: strong_mode_implicit_dynamic_method
_kChannel.invokeMethod('clearShortcutItems');
Map<String, String> _serializeItem(ShortcutItem item) {
return <String, String>{
'type': item.type,
'localizedTitle': item.localizedTitle,
'icon': item.icon,
};
}
}