[LINUX] À propos de l'API SystemChannels pour tirer parti des fonctionnalités spécifiques à la plate-forme Flutter

introduction

Cette section décrit l'API System Channels pour utiliser les fonctions spécifiques à la plate-forme de Flutter.

Qu'est-ce que les canaux système

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.

スクリーンショット 2020-02-11 13.16.33.png

Types de canaux système

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

Exemple de code

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.

Référence

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');

Recommended Posts

À propos de l'API SystemChannels pour tirer parti des fonctionnalités spécifiques à la plate-forme Flutter
À propos des fonctionnalités de Python
À propos de l'événement de changement de caméra de l'API Google Maps Android
Je veux connaître la nature de Python et pip
Essayez d'extraire les caractéristiques des données de capteur avec CNN
À propos des composants de Luigi
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
Les débutants en Python utilisent l'API non officielle de Google Play Music pour jouer de la musique
À propos de la valeur de retour de pthread_mutex_init ()
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
À propos de la limite supérieure de threads-max
Maîtrisez les riches fonctionnalités d'IPython
Maîtriser les riches fonctionnalités d'IPython (2)
À propos du comportement de yield_per de SqlAlchemy
À propos de la taille des points dans matplotlib
À propos de la liste de base des bases de Python
Supplément à l'explication de vscode
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
Je voulais faire attention au comportement des arguments par défaut de Python
Accédez à l'API de classement Rakuten pour enregistrer le classement de n'importe quelle catégorie au format CSV
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python