In meinem Beispiel übergebe ich aus Dart eine Liste mit unbestimmter Länge an eine Zig Funktion. Dort wird die Summe der Elemente des Arrays gebildet und an Dart zurückgegeben:
Zuerst erstelle ich ein Dart Projekt mitdart init
Anschließend erstelle ich im Hauptverzeichnis des Projektes ein Unterverzeichnis mit Namen "linux_64"
Dort hinein speichere ich die folgende Zig-Datei mit dem Namen "test06.zig":
const std = @import("std");
export fn sum(myArray: [*]const i32, arraySize: usize) i32 {
var summe: i32 = 0;
for (0..arraySize) |index| {
summe += myArray[index];
}
return summe;
}
Anschließend führe ich den folgenden Befehl aus, um aus der zig-Datei eine Library zu generieren:
zig build-lib test06.zig -dynamic
Jetzt müssten die folgenden Dateien erstellt worden
sein: "libtest06.so" und "libtest06.so.o". Wer möchte kann beim Erstellen der Librarys mit dem Parameter
-ReleaseSmall die Filegröße noch verkleinern.
Im bin-Verzeichnis erstelle ich die Datei "main.dart" und schreibe folgendes hinein:
import 'dart:ffi' as ffi;
import 'package:ffi/ffi.dart';
void main(List<String> arguments) {
final list = [1, 2, 3, 4, 5];
final listPtr = intListToArray(list);
final myLib = ffi.DynamicLibrary.open('../linux_64/libtest06.so');
final mySum = myLib.lookupFunction<
ffi.Int32 Function(ffi.Pointer<ffi.Int32>, ffi.Int32),
int Function(ffi.Pointer<ffi.Int32>, int)
>('sum');
final result = mySum(listPtr, list.length);
print('Result: $result');
malloc.free(listPtr);
}
ffi.Pointer<ffi.Int32> intListToArray(List<int> list) {
final ptr = malloc.allocate<ffi.Int32>(ffi.sizeOf<ffi.Int32>() * list.length);
for (var i = 0; i < list.length; i++) {
ptr[i] = list[i];
}
return ptr;
}
Anschließend führe ich die main.dart Datei mit dem folgenden Befehl aus:
dart run main.dart
enum loginStatus {
isNotLoggedIn,
isLoggingIn,
isLoggedIn
}
const [status, setStatus] = useState<numbers>(isNotLoggedIn);
if (status == isLoggedIn) {
/// Your Code
}
Es gibt zwei Möglichkeiten dein iPhone direkt neu zu starten, statt es auszuschalten und wieder einzuschalten. Die erste Möglichkeit ist "AssistiveTouch" zu aktivieren und dann im Submenü; des auf dem HomeScreen befindlichen neuen Button den Neustart auszufü;hren. Einfacher ist es aber per Siri mit dem Sprachbefehl "Hey Siri, mache einen Neustart" zu sprechen und anschließend in Siris Auswahl den Button "Neustart" zu drü;cken.
Wenn XCode nach dem Build meldet, dass das iPhone noch gesperrt sei und der Transfer des Builds erst nach der Entsperrung durchgeführt wird, dann hast du evtl. ein Update deines iPhones installiert und im XCode ist dein iPhone noch mit der alten iOS Version konfiguriert. Gehe in XCode -> Window -> Devices and Simulators und lösche dort den Eintrag vom iPhone mit der alten iOS Version und trage anschließend dein iPhone mit neuer iOS Version ein.
control.invalidate();
Dieser Befehl sorgt dafür, dass sich das Custom Control für ein Rerender anmeldet. Mehrere Anmeldungen
werden dann
gemeinsam in einem Zyklus durchgeführt, welches wesentlich performanter ist, als wenn jedes Custom Control ein
eigenes Rerender durchführen würde.
Impressum: Dennis Schey email: dennis|@|audiomixing.de
Date2025-12-02 07:48:53