In diesem Abschnitt wird die API System Channels für die Verwendung plattformspezifischer Funktionen von Flutter beschrieben.
Zunächst einmal empfehle ich grundsätzlich nicht, diese API </ font> zu verwenden. Diese API wird häufig im Flutter Framework verwendet. Da es sich jedoch um eine Zwischenschicht-API handelt, wie unten gezeigt, ist es sehr wahrscheinlich, dass sie sich in zukünftigen Versions-Upgrades ändert.
Beim Betrachten des [Quellcodes] von SystemChannels (https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/services/system_channels.dart) verwenden die Inhalte MethodChannel, EventChannel usw. Sie können sehen, dass. Informationen zu Methodenkanal und Ereigniskanal finden Sie unter hier.
Für jede Anwendung stehen mehrere Typen zur Verfügung. Die Liste wird unten angezeigt.
Art | Funktion | Höherer Flatter-Service |
---|---|---|
lifecycle | Lebenszyklus | widget |
navigation | Navigation | widget, system_chrome |
system | Unbekannt….HierVerwendet in, aber praktisch nichts | widget |
accessibility | Barrierefreiheit(Text lesen etc.) | PlatformViews, Semantics |
platform | Systemeinstellung(Bildschirm Rotation,Ende etc.) | SemanticsService,RouteNotificationMessages etc. |
platform_views | Plattformspezifische Ansichtsvorgänge | AndroidView, UiKitView |
skia | Grafik | - |
keyEvent | Tasteneingabe | RawKeyEvent |
textInput | Text Eingabe | TextInput, AndroidView, UiKitView |
lifecycle
Lebenszyklus-Hörer
SystemChannels.lifecycle.setMessageHandler((message){
print('<SystemChannels.lifecycle> $message');
/*
AppLifecycleState.paused
AppLifecycleState.inactive
AppLifecycleState.resumed
AppLifecycleState.suspending
AppLifecycleState.detached
*/
return Future<String>.value();
});
navigation
Listener für Navigationsvorgänge
SystemChannels.navigation.setMethodCallHandler((call) {
print('<SystemChannels.navigation> ${call.method} (${call.arguments})');
/*
popRoute
pushRoute
*/
return Future<dynamic>.value();
});
system Es kann für nichts verwendet werden, es wird nicht verwendet und Sie können es ignorieren.
Stellen Sie vorerst nur den Rückruf ein
SystemChannels.system.setMessageHandler((message) {
print('<SystemChannels.system> $message');
return Future<dynamic>.value();
});
accessibility
Text-zu-Sprache-Beispiel
SemanticsService.announce('Hello world', TextDirection.ltr)
Die interne Implementierung von Flutter Framework von ist unten.
Dart
final AnnounceSemanticsEvent event = AnnounceSemanticsEvent('Hello world', TextDirection.ltr);
SystemChannels.accessibility.send(event.toMap());
platform
Beenden Sie die App
SystemNavigator.pop()
Die interne Implementierung von Flutter Framework von ist unten.
Beenden Sie die App
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
platform_views
Bitte beziehen Sie sich darauf, wie es in [flutter_web] verwendet wird (https://github.com/flutter/flutter_web/blob/master/packages/flutter_web/lib/src/widgets/platform_view.dart).
Erstellen Sie eine Ansicht wie diese
final Map<String, dynamic> args = <String, dynamic>{
'id': 1,
'viewType': 'Create WebView',
};
SystemChannels.platform_views.invokeMethod('create', args);
skia
Einstellung der Skia-Cache-Größe. Es gibt keine andere Funktion, und jetzt kann ich das nur noch tun ...
const maxBytes = 4 * 1024 * 1024;
SystemChannels.skia.invokeMethod('setResourceCacheMaxBytes', maxBytes);
keyEvent
Key Input Listener
SystemChannels.keyEvent.setMessageHandler((message) {
print('<SystemChannels.keyEvent> $message');
return Future<dynamic>.value();
});
textInput
Tastaturanzeige EIN/OFF
SystemChannels.textInput.invokeMethod('TextInput.show');
SystemChannels.textInput.invokeMethod('TextInput.hide');
Recommended Posts