Как получить строковое значение QR-кода и сохранить его в базе данных, чтобы он ссылался на указанного пользователя c - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь создать приложение лояльности с помощью сканирования QR и неуверен, как я могу получить строковое значение QR-кода, сгенерированного для каждого пользователя, и затем сохранить его в firebase, чтобы оно затем связывалось с указанным c пользователем. обновите число сканирований QR-кода пользователя во вложенной коллекции, связанной с коллекцией пользователей.

QrImage(
                        data: '${user?.uid}',
                        version: QrVersions.auto,
                        size: 300,
                        errorStateBuilder: (cxt, err) {
                          return Container(
                            child: Center(
                              child: Text('Error',
                              textAlign: TextAlign.center,
                              style: new TextStyle(color: Colors.red),
                              ),
                              ),
                          );
                        },
                      ),

Это мой QRImage, который генерирует QR-код для каждого пользователя, но я не уверен, как чтобы связать значение данных с коллекцией пожарного магазина.

Future scan() async {
    try {
      String barcode = await BarcodeScanner.scan();
      setState(() => this.barcode = barcode);
    } on PlatformException catch (e) {
      if (e.code == BarcodeScanner.CameraAccessDenied) {
        setState(() {
          this.barcode = 'The user did not grant the camera permission!';
        });
      } else {
        setState(() => this.barcode = 'Unknown error: $e');
      }
    } on FormatException{
      setState(() => this.barcode = 'null (User returned using the "back"-button before scanning anything. Result)');
    } catch (e) {
      setState(() => this.barcode = 'Unknown error: $e');
    }
  }

И это моя функция сканирования, которая находится на другой странице.

Коллекция пользователя https://gyazo.com/803b3ba624a431774ec59f45c1566185

Коллекция очков https://gyazo.com/3d284e344883e85783bedb23a7cff9cc

1 Ответ

0 голосов
/ 18 апреля 2020

Попробуйте это

Future scan() async {
    try {
      String barcode = await BarcodeScanner.scan();
      setState(() => this.barcode = barcode);
      print("scanned sucsessfully");

      //plus one to points when scanned
      String userId = (await FirebaseAuth.instance.currentUser()).uid;
      final CollectionReference pointsCollection = Firestore.instance.collection("users");
      await pointsCollection.document(userId).collection('points').document(userId)
      .updateData({
        "points": FieldValue.increment(1),
        "transactions": FieldValue.increment(-1)
        });

    } on PlatformException catch (e) {
      if (e.code == BarcodeScanner.CameraAccessDenied) {
        setState(() {
          this.barcode = 'The user did not grant the camera permission!';
        });
      } else {
        setState(() => this.barcode = 'Unknown error: $e');
      }
    } on FormatException{
      setState(() => this.barcode = 'null (User returned using the "back"-button before scanning anything. Result)');
    } catch (e) {
      setState(() => this.barcode = 'Unknown error: $e');
    }
  }
...