mafulechka
mafulechka23. Juni 2020 06:09

Flutter- und Desktop-Apps

Kontinuierlicher Fortschritt in der Computertechnologie

Es ist kein Geheimnis, dass die Mission der Flutter-Entwickler darin besteht, eine breite Palette von Geräten, darunter iOS, Android, Windows, Linux, macOS und Websites, von einer einzigen Codebasis aus mit nativer Kompilierung und Rendering in Spielqualität anzusprechen. Google Flutter verwendet Projekte von Assistant bis Stadia, von Cloud Search bis Blogger. Außerhalb von Google wurde Flutter von Unternehmen wie ByteDance bis Grab, Nubank bis MGM Resorts übernommen, die von Flutters Leistung und Flexibilität profitieren.


Viele von Ihnen interessieren sich für Fortschritte bei Desktop-Betriebssystemen, einschließlich Windows, macOS und Linux. In Umfragen und auf GitHub gehört der Desktop durchweg zu den beliebtesten neuen Features. In den kommenden Wochen werden die Entwickler mehr von ihrer Arbeit zeigen und mit einem Überblick über einige der Arbeiten der verschiedenen Gruppen beginnen, die zum Gesamtprojekt beitragen. Während der Desktop-Support eine technische Vorschau ist, liegt noch viel Arbeit vor uns.

Release-Modus

Neben der bestehenden macOS-Unterstützung haben die Entwickler kürzlich auch den Profil- und Release-Modus für Windows und Linux getestet. Wenn Sie beispielsweise die neuesten Builds von Flutter verwenden, können Sie Ihre Flutter-App jetzt mit Flutter-Build-Fenstern in eine ausführbare Windows-Datei kompilieren. Es verwendet den AOT-Produktionscompiler, um nativen x64-nativen Code zu generieren, der auf eine Maschine verteilt werden kann, auf der Flutter nicht installiert ist.

Desktop

Unabhängig davon, ob Sie eigenständige ausführbare Dateien oder Webanwendungen erstellen, Sie verfügen über einzigartige Attribute zum Erstellen von Desktopanwendungen. Desktopfenster befinden sich normalerweise im Querformat und sind in der Größe veränderbar, die Eingabe erfolgt normalerweise über die physische Tastatur und Maus und nicht über die Bildschirmtastatur und Berührung, und die Steuerelemente sind für unterschiedliche Bildschirmdichten optimiert.

Auf Infrastrukturebene haben Entwickler verschiedene Änderungen an Flutter vorgenommen, um die Desktop-Interaktion zu unterstützen.

• Wenn Sie in neueren Builds ein neues Projekt erstellen, werden Sie feststellen, dass die Standardvorlage jetzt einen Verweis auf die Eigenschaft visualDensity enthält, die es Steuerelementen ermöglicht, ihre Dichte basierend auf der Plattform, auf die sie abzielen, anzupassen, mit einem kompakteren Bereich auf Desktop-Plattformen. Ein Beispiel dafür, wie dies verwendet wird, ist das TextField, das jetzt basierend auf der angegebenen Dichte kompakte, komfortable und standardmäßige Abstände bietet.

• Entwickler haben eine viel bessere Unterstützung für Maus- und Tastatureingaben hinzugefügt – dazu gehören rohe Windows-Tastencodes, Rechtsklicken, Cursoränderungen und Scrollrad-Unterstützung.

• Sie können jetzt eine bestimmte Plattform abfragen (über die Platform-Klasse) und Windows, macOS und Linux liefern die entsprechenden Ergebnisse.

• In der neuesten Version haben die Entwickler das NavigationRail-Widget hinzugefügt, das speziell für Desktops und Tablets entwickelt wurde.

FFI

Das Dart-Team hat hart daran gearbeitet, das Foreign Function Interface (FFI) zu verbessern, das eine großartige Möglichkeit darstellt, die Integration mit der Plattform zu beschleunigen. Für APIs, die auf der dart:ffi-Bibliothek basieren, wird ein direkter Mechanismus zum Verlinken mit nativem Code bereitgestellt. Die Dart-Laufzeit bietet die Möglichkeit, Speicher auf dem Heap zuzuweisen, der von einem Dart-Objekt unterstützt wird, und Aufrufe an dynamisch verknüpfte Bibliotheken durchzuführen.

Für ein einfaches Windows-Beispiel ist hier ein Code-Snippet, um die herkömmliche Win32 MessageBox()-API vollständig mit Dart-Code aufzurufen:

typedef MessageBoxNative = Int32 Function(
    IntPtr hWnd, Pointer<Utf16> lpText, Pointer<Utf16> lpCaption, Int32 uType);
typedef MessageBoxDart = int Function(
    int hWnd, Pointer<Utf16> lpText, Pointer<Utf16> lpCaption, int uType);

final user32 = DynamicLibrary.open('user32.dll');
final win32MessageBox =
    user32.lookupFunction<MessageBoxNative, MessageBoxDart>('MessageBoxW');

void showMessageBox(String message, String caption) => win32MessageBox(
    0,                      // No owner window
    Utf16.toUtf16(message), // Message
    Utf16.toUtf16(caption), // Window title
    0                       // OK button only
    );

…

showMessageBox('Test Message', 'Window Caption'); // call just like any other Dart function

Aufrufen der Win32-MessageBox-API aus Dart-Code.

In diesem Code stellen die Entwickler eine Typedef bereit, die die Signatur der Methode sowohl in ihrer nativen als auch in ihrer Dart-Darstellung darstellt. Nach der Definition können Sie eine Windows Dynamic Link Library (DLL) laden, die eine Funktionsimplementierung über die lookupFunction()-Methode bereitstellt, die eine Dart-Funktionssignatur dem zugrunde liegenden nativen Einstiegspunkt zuordnet. Schließlich fügen wir optional einen einfachen idiomatischen Wrapper hinzu, um ihn von anderem Dart-Code aus leicht zugänglich zu machen, was in etwa so aussieht:


Ein einfaches Windows-Anwendungsbeispiel mit der Win32-MessageBox-API

Natürlich müssen Sie diese Arbeit nicht selbst erledigen, die Chancen stehen gut, dass jemand bereits den Weg für die API geebnet hat, die Sie verwenden möchten.

Aktualisierung des Plugin-Modells

Flutter selbst hat einen kleinen Kern. Anstatt sich um die zugrunde liegende Plattform zu kümmern, sorgen Plugins und Pakete (sowohl direkt vom Flutter-Team als auch von einem breiteren Ökosystem von Mitwirkenden) für die Integration mit den zugrunde liegenden Betriebssystemen.

Da Flutter jedoch zunehmend mobile Geräte, Websites und Desktops unterstützt, wird die Entwicklung eines Plugins für jede unterstützte Plattform zu einer größeren Herausforderung. Höchstwahrscheinlich wird das Plugin Beiträge von verschiedenen Autoren erfordern, die Erfahrung mit jeder Plattform haben.

Eine nützliche Technik besteht darin, eine gemeinsame Schnittstelle als Teil eines Kernmoduls zu definieren, das jede Plattform unabhängig implementieren kann. Entwickler haben kürzlich das Schema für Plugins angepasst, um die Integration von Multi-Autoren-Plattformentwicklungen zu erleichtern. Im Rahmen dieser Arbeiten ist es nun möglich, explizit zu deklarieren, welche Plattformen vom Plugin unterstützt werden.

Entwickler haben auch damit begonnen, einige der wichtigsten Plugins mit diesem Modell zu erstellen, und Sie finden einige frühe Beispiele des integrierten Modells im Flutter/Plugins-Repository.

Bitte beachten Sie, dass sich die Plugin-APIs für Windows und Linux noch im Fluss befinden, sodass die Entwickler zwar zur Erkundung ermutigen, aber derzeit noch nicht für allgemeine Unterstützung bereit sind. Sie arbeiten auch daran, Desktop-Plattform-Tags zu pub.dev hinzuzufügen.

Funktioniert unter Windows: Win32 und UWP

Ein interessanter Aspekt der Arbeit, die Entwickler unter Windows leisten, ist das Experimentieren mit verschiedenen architektonischen Ansätzen. Flutter ist auf jeder Plattform in eine kleine Host-Container-Anwendung („Embedder“) eingebettet und verwendet einen ähnlichen Ansatz wie Game-Engines wie Unity. Dieser plattformbasierte Injektionsmechanismus bietet einen Einstiegspunkt, koordiniert den Zugriff auf Dienste wie Rendering-Oberflächen, Zugänglichkeit und Eingabe mit dem zugrunde liegenden Betriebssystem und verwaltet die Nachrichtenereignisschleife.

Windows bietet zwei verschiedene Ansätze zum Erstellen dieses Geräts zum Einbetten. Erstens kann das ausgereifte Win32-Programmiermodell verwendet werden, um einen Einstiegspunkt für Flutter-Inhalte zu schaffen – das sorgt für maximale Abwärtskompatibilität mit Plattformen wie Windows 7 und schafft die Standard-EXE, die viele Entwickler erwarten. Umgekehrt ist das moderne UWP-App-Modell der empfohlene Ansatz für Windows 10 und bietet faszinierende Möglichkeiten, die Flutter-Unterstützung auf Geräte wie die Xbox oder das kommende Betriebssystem Windows 10X auszudehnen.

Entwickler arbeiten informell mit verschiedenen Mitwirkenden zusammen, um verschiedene Lösungen zu erkunden, und arbeiten gerne eng mit Microsoft zusammen, um eine qualitativ hochwertige Lösung zu erstellen. Sie glauben, dass die Surface-Gerätefamilie, zu der Android und Windows gehören, Microsoft eine großartige Plattform bietet, um großartige native Apps zu entwickeln, die ihr gesamtes Portfolio umfassen.

Spaß mit dem Desktop

Diese Arbeit befindet sich noch in der technischen Überprüfung und die API und die Tools sind noch nicht stabil. Entwickler behalten immer noch den Überblick über den größten Teil der Arbeit, die sie erledigen möchten, bevor sie zu stabilem Desktop-Support wechseln, einschließlich verbesserter Zugänglichkeit und Lokalisierungsunterstützung.

Wenn Sie dies ausprobieren möchten, müssen Sie sich im Entwicklungskanal befinden. Windows und Linux sind nur im Master-Zweig verfügbar, wo Flutter aktiv weiterentwickelt wird. macOS ist im Dev-Zweig verfügbar, der etwas stabiler ist, aber nicht für den Produktionseinsatz empfohlen wird. Sie können Kanäle mit Flutter Channel Master oder Flutter Channel Dev wechseln und dann einen der folgenden Befehle verwenden, um die Unterstützung für die von Ihnen verwendete Plattform zu aktivieren:

C:\flutter> Flatterkonfiguration --enable-windows-desktop$ Flatterkonfiguration --enable-macos-desktop$ Flatterkonfiguration --enable-linux-desktop

Entwickler haben bereits einige abenteuerlustige Entwickler gesehen, die damit begonnen haben, Flutter auf dem Desktop zu verwenden, um Apps zu erstellen. Eine der ersten MacOS-Desktop-Apps von Flutter, die sie sahen, war Sharezone. Ein Studentenplaner für den deutschen Bildungsmarkt, der als mobile App gestartet ist, aber vor kurzem Web- und Desktop-Versionen hinzugefügt hat.

Sharezone Schulplan ist eine App für Schüler, Lehrer und Eltern, um den Überblick über Hausaufgaben, Lerngruppen und Stundenpläne zu behalten.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken