Mit dem Dart 3.2-Update wird die Zukunft von Flutter Web immer klarer

Referenz-Originaltext: https://medium.com/dartlang/dart-3-2-c8de8fe1b91f

Diesmal folgtFlutter 3.16-Version von Dart 3.2, einschließlich: Nicht-Null-Verbesserungen an privaten Endfeldern, neue Interop-Verbesserungen und erweitert Unterstützung in DevTools und Aktualisierungen der Web-Roadmap, einschließlich Webkomponentenunterstützung für Wasm.

Das Wichtigste ist die Webkomponentenunterstützung von Wasm.

Nicht-Null-Typ-Promotion des privaten Finales

Seit der Veröffentlichung der soliden Nullsicherheit in Dart 2.12 ist die Typförderung einer der Kernbestandteile der Nullsicherheit, sie ist jedoch auf lokale Variablen beschränkt. Felder und Variablen der obersten Ebene können nicht verarbeitet werden. Beispielsweise wird ein Fehler gemeldet in diesem Fall:

class Container {
    
    
  final int? _fillLevel;
  Container(this._fillLevel);
  check() {
    
    
    if (_fillLevel != null) {
    
    
      int i = _fillLevel; // Prior to Dart 3.2, causes an error.
    }
  }
}

Diese Einschränkung ist auf mehrere komplexe Situationen zurückzuführen, in denen die Flussanalyse nicht bestimmen kann, wann sich ein Feld ändert. Wenn beispielsweise bei der Feldheraufstufung eine Unterklasse das Feld mit einem Getter überschreibt (der manchmal Null zurückgibt), kann dies zu Problemen führen.

Ab Dart 3.2 verfügt Dart über eine verbesserte Flussanalyse und kann nun private Final-Felder klassifizieren.

Der obige Codeausschnitt in 3.2 besteht nun den Test: Für private und finale Felder ändert sich ihr Wert nach der ersten Zuweisung nie, daher gilt es als sicher, ihn nur einmal zu überprüfen.

Neue Code-Analyseoptionen im Paket: Lints 3.0

3.2 nimmt auch einige Verbesserungen an den Standardregeln für die Codeanalyse in package:lints vor. Das Paket enthält standardmäßige und empfohlene Regeln für die statische Analyse. Diese Regeln werden mit neuen Projekten bereitgestellt, die von dart create oder flutter create erstellt wurden (über package:flutter_lints).

Die Hauptversion des Lint-Sets (3.0) wurde veröffentlicht, die 6 Lints zum Kernset und 2 Lints zum empfohlenen Set hinzufügt. Es verfügt über verwandte Funktionen zur Validierung von Pubspec-URLs, zur Überprüfung, ob Sammlungsmethoden mit korrekten Parametern aufgerufen werden usw . Fusseln.

Eine vollständige Liste der Änderungen finden Sie unter https://github.com/dart-lang/lints/blob/main/CHANGELOG.md#300. Version 3.0 wird zur Standardversion für kommende Veröffentlichungen neuer Projekte.

Dart-Interop-Updates

Wir arbeiten derzeit an der Erweiterung der Dart-Interop, um Java und Kotlin und Objective C und vollständig zu unterstützen Swift Direct-Aufrufunterstützung für , mit vielen Verbesserungen ab Dart 3.2:

  • Führt den Konstruktor von C FFI einNativeCallable.isolateLocal, der einen C-Funktionszeiger aus jeder Dart-Funktion erstellen kann, was eine Erweiterung der von Pointer.fromFunction , das nur Funktionszeiger aus Funktionen der obersten Ebene erstellen kann.

  • Aktualisierter Objective-C-NutzungNativeCallable.listener-Bindungsgenerator. Der Generator kann jetzt automatisch APIs verarbeiten, die asynchrone Rückrufe enthalten, wie z. B.Core Motion Diese Art von Code erforderte bisher eine manuelle Bindung.

  • Verbesserungpackage:jnigen implementiert direkte Aufrufunterstützung für Java und Kotlin, jetzt können wir Paket: cronet_http (ein Wrapper für den Android Cronet HTTP-Client) wurde von handgeschriebenem Bindungscode zu einem automatisch generierten Wrapper migriert.

  • Erhebliche Fortschritte bei derNative Assets-Funktion, die darauf ausgelegt ist, viele der Probleme im Zusammenhang mit der Verteilung von Dart-Paketen zu beheben, die auf nativem Code basieren. Es bietet einheitliche Hooks, um verschiedene Build-Anforderungen beim Erstellen von Flutter- und unabhängigen Dart-Anwendungen zu erfüllen. Einzelheiten finden Sie unter: http://dart.dev/guides/libraries/c-interop#native-assets

    Native Assets ist derzeit eineexperimentelle Funktion, die es Dart-Paketen ermöglicht, sich nahtloser auf nativen Code zu verlassen und diesen zu verwenden, und zwar durch a >flutter run/flutter build und dart run/dart build erstellen und bündeln nativen Code.

    Hinweis: 可通过flutter config --enable-native-assetsflutter create --template=package_ffi [package name] 启用.

    Demo native_add_library zeigt die entsprechende Verwendung. Wenn das Flutter-Projekt von package:native_add_library abhängt, wird das Skript automatisch auf build.dart Befehl. Aufruf:

    import 'package:native_add_library/native_add_library.dart';
    
    void main() {
          
          
      print('Invoking a native function to calculate 1 + 2.');
      final result = add(1, 2);
      print('Invocation success: 1 + 2 = $result.');
    }
    

DevTools-Erweiterung für Dart-Pakete

Ein neues Erweiterungsframework wurde in Dart 3.2 und Flutter 3.16 veröffentlicht, das es Paketautoren ermöglicht, benutzerdefinierte Erweiterungen für ihre Pakete zu erstellen. Definieren Tools erstellen und direkt in DevTools anzeigen.

Es ermöglicht dem pub.dev-Paket, das das Framework enthält, benutzerdefinierte Tools für bestimmte Anwendungsfälle bereitzustellen, wie zum BeispielServerpod, an dessen Autor gearbeitet wurde hard on package erstellt Entwicklertools und freut sich, in der kommenden Version 1.2 DevTools-Erweiterungen anbieten zu können.

Dart Web- und Wasm-Updates

Ab Chrome 119 wird Chrome es standardmäßig aktivieren.Wasm-Garbage-Collection-Unterstützung (genannt Wasm-GC)Wasm-GC-Unterstützung wird ebenfalls angezeigt Wie ist der aktuelle Status von Dart, Flutter und Wasm-GC, da sie in Firefox 120 (ihrer nächsten stabilen Version) unterstützt werden?

Der Dart-to-Wasm-Compiler ist fast voll funktionsfähig und das Team ist mit der Leistung und Kompatibilität sehr zufrieden und konzentriert sich nun auf Randfälle, um sicherzustellen, dass er in einer Vielzahl von Szenarien gleich gut funktioniert.

Für Flutter Web ähnelt dies der Fertigstellung einer neuen „Skwasm“-Rendering-Engine. Um die Leistung zu maximieren, verbindet Skwasm kompilierten Anwendungscode über Wasm-zu-Wasm-Bindungen direkt mit benutzerdefinierten CanvasKit Wasm-Modulen. Dies ist auch die erste Iteration der Multithread-Rendering-Unterstützung von Flutter Web, wodurch die Framezeiten weiter verbessert werden.

Bevor Wasms Flutter-Web bereit ist, seinen aktuellen experimentellen Status zu verlassen, müssen einige Dinge erledigt werden:

  • Duale Kompilierung: Erzeugt Wasm- und JavaScript-Ausgabe und ermöglicht die Funktionserkennung zur Laufzeit, um Browser mit und ohne Wasm-GC-Unterstützung zu unterstützen.
  • JavaScript-Interop: Ein neuer JS-Interop-Mechanismus basierend auferweiterten Typen, wenn JavaScript als Ziel verwendet wird Mit Wasm können Sie präzise, ​​typsichere Aufrufe zwischen Dart-Code, Browser-APIs und JS-Bibliotheken durchführen.
  • Browser-API, die Wasm unterstützt: eine neuepackage:web, basierend auf einem modernen JS-Interop-Mechanismus, der dart:html (und verwandte Bibliotheken) ersetzt. Dies ermöglicht einen einfacheren Zugriff auf Browser-APIs und unterstützt JS- und Wasm-Ziele.

hat derzeit mit der Migration einiger interner Projekte auf package:web und den neuen JS-Interop-Mechanismus begonnen und erwartet weitere Updates in der nächsten stabilen Version.

Weitere Informationen finden Sie unter https://flutter.dev/wasm.

zu guter Letzt

Es gibt zwei wichtige Punkte in diesem Update. Der erste ist, dass Dart-Interop immer ausgereifter wird. Ich glaube, dass in Zukunft alle Interop-Bindungen und -Kompilierungen direkt durch Flutter Run abgeschlossen werden können. Der zweite ist der Fortschritt Aufgrund der Unterstützung von Dart Wasm für die Web-Route lohnt es sich immer mehr, sich darauf zu freuen.

Guess you like

Origin blog.csdn.net/ZuoYueLiang/article/details/134438217
Recommended