| // Copyright 2014 The Flutter 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:ui'; |
| |
| import 'message_codecs.dart'; |
| import 'platform_channel.dart'; |
| |
| /// Platform channels used by the Flutter system. |
| class SystemChannels { |
| // This class is not meant to be instatiated or extended; this constructor |
| // prevents instantiation and extension. |
| // ignore: unused_element |
| SystemChannels._(); |
| |
| /// A JSON [MethodChannel] for navigation. |
| /// |
| /// The following incoming methods are defined for this channel (registered |
| /// using [MethodChannel.setMethodCallHandler]): |
| /// |
| /// * `popRoute`, which is called when the system wants the current route to |
| /// be removed (e.g. if the user hits a system-level back button). |
| /// |
| /// * `pushRoute`, which is called with a single string argument when the |
| /// operating system instructs the application to open a particular page. |
| /// |
| /// The following methods are used for the opposite direction data flow. The |
| /// framework notifies the engine about the route changes. |
| /// |
| /// * `routePushed`, which is called when a route is pushed. (e.g. A modal |
| /// replaces the entire screen.) |
| /// |
| /// * `routePopped`, which is called when a route is popped. (e.g. A dialog, |
| /// such as time picker is closed.) |
| /// |
| /// * `routeReplaced`, which is called when a route is replaced. |
| /// |
| /// See also: |
| /// |
| /// * [WidgetsBindingObserver.didPopRoute] and |
| /// [WidgetsBindingObserver.didPushRoute], which expose this channel's |
| /// methods. |
| /// * [Navigator] which manages transitions from one page to another. |
| /// [Navigator.push], [Navigator.pushReplacement], [Navigator.pop] and |
| /// [Navigator.replace], utilize this channel's methods to send route |
| /// change information from framework to engine. |
| static const MethodChannel navigation = MethodChannel( |
| 'flutter/navigation', |
| JSONMethodCodec(), |
| ); |
| |
| /// A JSON [MethodChannel] for invoking miscellaneous platform methods. |
| /// |
| /// The following outgoing methods are defined for this channel (invoked using |
| /// [OptionalMethodChannel.invokeMethod]): |
| /// |
| /// * `Clipboard.setData`: Places the data from the `text` entry of the |
| /// argument, which must be a [Map], onto the system clipboard. See |
| /// [Clipboard.setData]. |
| /// |
| /// * `Clipboard.getData`: Returns the data that has the format specified in |
| /// the argument, a [String], from the system clipboard. The only format |
| /// currently supported is `text/plain` ([Clipboard.kTextPlain]). The |
| /// result is a [Map] with a single key, `text`. See [Clipboard.getData]. |
| /// |
| /// * `HapticFeedback.vibrate`: Triggers a system-default haptic response. |
| /// See [HapticFeedback.vibrate]. |
| /// |
| /// * `SystemSound.play`: Triggers a system audio effect. The argument must |
| /// be a [String] describing the desired effect; currently only `click` is |
| /// supported. See [SystemSound.play]. |
| /// |
| /// * `SystemChrome.setPreferredOrientations`: Informs the operating system |
| /// of the desired orientation of the display. The argument is a [List] of |
| /// values which are string representations of values of the |
| /// [DeviceOrientation] enum. See [SystemChrome.setPreferredOrientations]. |
| /// |
| /// * `SystemChrome.setApplicationSwitcherDescription`: Informs the operating |
| /// system of the desired label and color to be used to describe the |
| /// application in any system-level application lists (e.g. application |
| /// switchers). The argument is a [Map] with two keys, `label` giving a |
| /// [String] description, and `primaryColor` giving a 32 bit integer value |
| /// (the lower eight bits being the blue channel, the next eight bits being |
| /// the green channel, the next eight bits being the red channel, and the |
| /// high eight bits being set, as from [Color.value] for an opaque color). |
| /// The `primaryColor` can also be zero to indicate that the system default |
| /// should be used. See [SystemChrome.setPreferredOrientations]. |
| /// |
| /// * `SystemChrome.setEnabledSystemUIOverlays`: Specifies the set of system |
| /// overlays to have visible when the application is running. The argument |
| /// is a [List] of values which are string representations of values of the |
| /// [SystemUiOverlay] enum. See [SystemChrome.setEnabledSystemUIOverlays]. |
| /// |
| /// * `SystemChrome.setSystemUIOverlayStyle`: Specifies whether system |
| /// overlays (e.g. the status bar on Android or iOS) should be `light` or |
| /// `dark`. The argument is one of those two strings. See |
| /// [SystemChrome.setSystemUIOverlayStyle]. |
| /// |
| /// * `SystemNavigator.pop`: Tells the operating system to close the |
| /// application, or the closest equivalent. See [SystemNavigator.pop]. |
| /// |
| /// Calls to methods that are not implemented on the shell side are ignored |
| /// (so it is safe to call methods when the relevant plugin might be missing). |
| static const MethodChannel platform = OptionalMethodChannel( |
| 'flutter/platform', |
| JSONMethodCodec(), |
| ); |
| |
| /// A JSON [MethodChannel] for handling text input. |
| /// |
| /// This channel exposes a system text input control for interacting with IMEs |
| /// (input method editors, for example on-screen keyboards). There is one |
| /// control, and at any time it can have one active transaction. Transactions |
| /// are represented by an integer. New Transactions are started by |
| /// `TextInput.setClient`. Messages that are sent are assumed to be for the |
| /// current transaction (the last "client" set by `TextInput.setClient`). |
| /// Messages received from the shell side specify the transaction to which |
| /// they apply, so that stale messages referencing past transactions can be |
| /// ignored. |
| /// |
| /// The methods described below are wrapped in a more convenient form by the |
| /// [TextInput] and [TextInputConnection] class. |
| /// |
| /// The following outgoing methods are defined for this channel (invoked using |
| /// [OptionalMethodChannel.invokeMethod]): |
| /// |
| /// * `TextInput.setClient`: Establishes a new transaction. The arguments is |
| /// a [List] whose first value is an integer representing a previously |
| /// unused transaction identifier, and the second is a [String] with a |
| /// JSON-encoded object with five keys, as obtained from |
| /// [TextInputConfiguration.toJSON]. This method must be invoked before any |
| /// others (except `TextInput.hide`). See [TextInput.attach]. |
| /// |
| /// * `TextInput.show`: Show the keyboard. See [TextInputConnection.show]. |
| /// |
| /// * `TextInput.setEditingState`: Update the value in the text editing |
| /// control. The argument is a [String] with a JSON-encoded object with |
| /// seven keys, as obtained from [TextEditingValue.toJSON]. See |
| /// [TextInputConnection.setEditingState]. |
| /// |
| /// * `TextInput.clearClient`: End the current transaction. The next method |
| /// called must be `TextInput.setClient` (or `TextInput.hide`). See |
| /// [TextInputConnection.close]. |
| /// |
| /// * `TextInput.hide`: Hide the keyboard. Unlike the other methods, this can |
| /// be called at any time. See [TextInputConnection.close]. |
| /// |
| /// The following incoming methods are defined for this channel (registered |
| /// using [MethodChannel.setMethodCallHandler]). In each case, the first argument |
| /// is a transaction identifier. Calls for stale transactions should be ignored. |
| /// |
| /// * `TextInputClient.updateEditingState`: The user has changed the contents |
| /// of the text control. The second argument is a [String] containing a |
| /// JSON-encoded object with seven keys, in the form expected by [new |
| /// TextEditingValue.fromJSON]. |
| /// |
| /// * `TextInputClient.performAction`: The user has triggered an action. The |
| /// second argument is a [String] consisting of the stringification of one |
| /// of the values of the [TextInputAction] enum. |
| /// |
| /// * `TextInputClient.requestExistingInputState`: The embedding may have |
| /// lost its internal state about the current editing client, if there is |
| /// one. The framework should call `TextInput.setClient` and |
| /// `TextInput.setEditingState` again with its most recent information. If |
| /// there is no existing state on the framework side, the call should |
| /// fizzle. |
| /// |
| /// * `TextInputClient.onConnectionClosed`: The text input connection closed |
| /// on the platform side. For example the application is moved to |
| /// background or used closed the virtual keyboard. This method informs |
| /// [TextInputClient] to clear connection and finalize editing. |
| /// `TextInput.clearClient` and `TextInput.hide` is not called after |
| /// clearing the connection since on the platform side the connection is |
| /// already finalized. |
| /// |
| /// Calls to methods that are not implemented on the shell side are ignored |
| /// (so it is safe to call methods when the relevant plugin might be missing). |
| static const MethodChannel textInput = OptionalMethodChannel( |
| 'flutter/textinput', |
| JSONMethodCodec(), |
| ); |
| |
| /// A JSON [BasicMessageChannel] for keyboard events. |
| /// |
| /// Each incoming message received on this channel (registered using |
| /// [BasicMessageChannel.setMessageHandler]) consists of a [Map] with |
| /// platform-specific data, plus a `type` field which is either `keydown`, or |
| /// `keyup`. |
| /// |
| /// On Android, the available fields are those described by |
| /// [RawKeyEventDataAndroid]'s properties. |
| /// |
| /// On Fuchsia, the available fields are those described by |
| /// [RawKeyEventDataFuchsia]'s properties. |
| /// |
| /// No messages are sent on other platforms currently. |
| /// |
| /// See also: |
| /// |
| /// * [RawKeyboard], which uses this channel to expose key data. |
| /// * [new RawKeyEvent.fromMessage], which can decode this data into the [RawKeyEvent] |
| /// subclasses mentioned above. |
| static const BasicMessageChannel<dynamic> keyEvent = BasicMessageChannel<dynamic>( |
| 'flutter/keyevent', |
| JSONMessageCodec(), |
| ); |
| |
| /// A string [BasicMessageChannel] for lifecycle events. |
| /// |
| /// Valid messages are string representations of the values of the |
| /// [AppLifecycleState] enumeration. A handler can be registered using |
| /// [BasicMessageChannel.setMessageHandler]. |
| /// |
| /// See also: |
| /// |
| /// * [WidgetsBindingObserver.didChangeAppLifecycleState], which triggers |
| /// whenever a message is received on this channel. |
| static const BasicMessageChannel<String> lifecycle = BasicMessageChannel<String>( |
| 'flutter/lifecycle', |
| StringCodec(), |
| ); |
| |
| /// A JSON [BasicMessageChannel] for system events. |
| /// |
| /// Events are exposed as [Map]s with string keys. The `type` key specifies |
| /// the type of the event; the currently supported system event types are |
| /// those listed below. A handler can be registered using |
| /// [BasicMessageChannel.setMessageHandler]. |
| /// |
| /// * `memoryPressure`: Indicates that the operating system would like |
| /// applications to release caches to free up more memory. See |
| /// [WidgetsBindingObserver.didHaveMemoryPressure], which triggers whenever |
| /// a message is received on this channel. |
| static const BasicMessageChannel<dynamic> system = BasicMessageChannel<dynamic>( |
| 'flutter/system', |
| JSONMessageCodec(), |
| ); |
| |
| /// A [BasicMessageChannel] for accessibility events. |
| /// |
| /// See also: |
| /// |
| /// * [SemanticsEvent] and its subclasses for a list of valid accessibility |
| /// events that can be sent over this channel. |
| /// * [SemanticsNode.sendEvent], which uses this channel to dispatch events. |
| static const BasicMessageChannel<dynamic> accessibility = BasicMessageChannel<dynamic>( |
| 'flutter/accessibility', |
| StandardMessageCodec(), |
| ); |
| |
| /// A [MethodChannel] for controlling platform views. |
| /// |
| /// See also: |
| /// |
| /// * [PlatformViewsService] for the available operations on this channel. |
| static const MethodChannel platform_views = MethodChannel( |
| 'flutter/platform_views', |
| StandardMethodCodec(), |
| ); |
| |
| /// A [MethodChannel] for configuring the Skia graphics library. |
| /// |
| /// The following outgoing methods are defined for this channel (invoked using |
| /// [OptionalMethodChannel.invokeMethod]): |
| /// |
| /// * `Skia.setResourceCacheMaxBytes`: Set the maximum number of bytes that |
| /// can be held in the GPU resource cache. |
| static const MethodChannel skia = MethodChannel( |
| 'flutter/skia', |
| JSONMethodCodec(), |
| ); |
| } |