Cette section décrit l'API System Channels pour utiliser les fonctions spécifiques à la plate-forme de Flutter.
Tout d'abord, je ne recommande pas d'utiliser cette API </ font>. Cette API est beaucoup utilisée dans Flutter Framework, mais comme il s'agit d'une API de couche intermédiaire comme indiqué ci-dessous, il est fort probable qu'elle changera dans les futures mises à niveau de version.
En regardant le [code source] de SystemChannels (https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/services/system_channels.dart), le contenu utilise MethodChannel, EventChannel, etc. Tu peux voir ça. Veuillez vous référer à ici pour le canal de méthode et le canal d'événement.
Plusieurs types sont disponibles pour chaque application. La liste est présentée ci-dessous.
type | une fonction | Service de scintillement supérieur |
---|---|---|
lifecycle | cycle de la vie | widget |
navigation | la navigation | widget, system_chrome |
system | inconnue….iciUtilisé dans, mais pratiquement rien | widget |
accessibility | Accessibilité(Lecture de texte, etc.) | PlatformViews, Semantics |
platform | Paramètres système(Rotation de l'écran,Fin etc.) | SemanticsService,RouteNotificationMessages etc. |
platform_views | Opérations de vue spécifiques à la plate-forme | AndroidView, UiKitView |
skia | Graphique | - |
keyEvent | Entrée clé | RawKeyEvent |
textInput | Saisie de texte | TextInput, AndroidView, UiKitView |
lifecycle
Auditeur du cycle de vie
SystemChannels.lifecycle.setMessageHandler((message){
print('<SystemChannels.lifecycle> $message');
/*
AppLifecycleState.paused
AppLifecycleState.inactive
AppLifecycleState.resumed
AppLifecycleState.suspending
AppLifecycleState.detached
*/
return Future<String>.value();
});
navigation
Écouteur d'opération de navigation
SystemChannels.navigation.setMethodCallHandler((call) {
print('<SystemChannels.navigation> ${call.method} (${call.arguments})');
/*
popRoute
pushRoute
*/
return Future<dynamic>.value();
});
system Il ne peut être utilisé pour rien, il n'est pas utilisé et vous pouvez l'ignorer.
Pour le moment, définissez uniquement le rappel
SystemChannels.system.setMessageHandler((message) {
print('<SystemChannels.system> $message');
return Future<dynamic>.value();
});
accessibility
Exemple de synthèse vocale
SemanticsService.announce('Hello world', TextDirection.ltr)
La mise en œuvre interne de Flutter Framework est ci-dessous.
Dart
final AnnounceSemanticsEvent event = AnnounceSemanticsEvent('Hello world', TextDirection.ltr);
SystemChannels.accessibility.send(event.toMap());
platform
Quittez l'appli
SystemNavigator.pop()
La mise en œuvre interne de Flutter Framework est ci-dessous.
Quittez l'appli
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
platform_views
Veuillez vous y référer car il est utilisé dans flutter_web.
Créez une vue comme celle-ci
final Map<String, dynamic> args = <String, dynamic>{
'id': 1,
'viewType': 'Create WebView',
};
SystemChannels.platform_views.invokeMethod('create', args);
skia
Réglage de la taille du cache Skia. Il n'y a pas d'autre fonction, et maintenant je ne peux que faire ça ...
const maxBytes = 4 * 1024 * 1024;
SystemChannels.skia.invokeMethod('setResourceCacheMaxBytes', maxBytes);
keyEvent
Auditeur d'entrée clé
SystemChannels.keyEvent.setMessageHandler((message) {
print('<SystemChannels.keyEvent> $message');
return Future<dynamic>.value();
});
textInput
Affichage du clavier activé/OFF
SystemChannels.textInput.invokeMethod('TextInput.show');
SystemChannels.textInput.invokeMethod('TextInput.hide');