Vierzehnte Woche: NFC und finale Präsentation


In der vierzehnten Woche haben alle Gruppen endlich die finale Präsentation für das Projekt gehalten.

Am Tag vor der finalen Präsentation habe ich noch die NFC-Funktionalität, die Nils in der letzten Woche geschrieben hat, mit echten NFC-Tags ausprobiert, die ich bestellt hatte. Dabei fiel mir auf, dass die Funktion changeToGuidePage noch nicht ganz funktioniert und habe diese abgeändert.

Das war Nils ursprünglicher Code:

int changeToGuidePage(BuildContext context, NFCTag? tag) {
  if (tag == null) {
    print('No NFC tag scanned.');
    return 3;
  }

  String guideTag = "guideTag";
  String visitorTag = "visitorTag";

  if (tag.id == guideTag) {
    return 0;
  } else if (tag.id == visitorTag) {
    return 1;
  } else {
    print("Unknown NFC Tag.");
    return 3;
  }
}

Das simple Auslesen von tag.id hat leider nicht funktioniert. Stattdessen müssen die sogenannten NDEF-Daten ausgelesen werden. Dazu habe ich die Funktion folgendermaßen modifiziert:

Future<int> changeToGuidePage(BuildContext context, NFCTag? tag) async {
  if (tag == null) {
    print('No NFC tag scanned.');
    return 3;
  }

  String guideTag = "guideTag";
  String visitorTag = "visitorTag";

  bool? ndefAvailable = tag.ndefAvailable;
  if (ndefAvailable != null && ndefAvailable) {
    String data =
        (await FlutterNfcKit.readNDEFRecords()).firstOrNull.toString();
    if (data.contains(guideTag)) {
      return 0;
    }
    if (data.contains(visitorTag)) {
      return 1;
    }
  }
  print("Unknown NFC Tag.");
  return 3;
}