Как проверить, есть ли поле int в Firebase - PullRequest
0 голосов
/ 03 июля 2018

enter image description here У меня есть две кнопки, где, если поле существует, оно показывает одну кнопку, иначе это показывает пользователя другого, в котором я дам функцию для добавления данных в мою базу данных ... я использую облако firebase ... как можно проверить, существует поле или нет ... ниже мой код ...

// если счет не существует, будет показана поднятая кнопка, чтобы вы могли нажать на нее до

// код:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

BuildContext buildContext;
int filter = 0;
StreamSubscription<DocumentSnapshot> subscription;

class ScorePage extends StatelessWidget {

  final int score;
  ScorePage({Key key, @required this.score}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: AppBar(
          title: new Text('Scroe Card'),
        ),
        body: new Center(
            child: new Column(
                crossAxisAlignment: CrossAxisAlignment.stretch,
                children: <Widget>[
                  new Padding(padding: EdgeInsets.all(30.0)),
                  new MaterialButton(
                    color: Colors.red,
                    onPressed: () {},
                    child: new Text(
                      "Reset Quiz",
                    ),
                  ),
                  new Flexible(
                      child: StreamBuilder(
                        stream: Firestore.instance.collection('quiz score').snapshots(),
                        builder: (BuildContext context,
                            AsyncSnapshot<QuerySnapshot> snapshot) {
                          if (!snapshot.hasData) {
                            return new Text("loading..");
                          } else {
                            return FirestoreListView1(
                              documents: snapshot.data.documents,
                            );
                          }
                        },
                      ))
                ])));
  }
}



class FirestoreListView1 extends StatefulWidget {
  final List<DocumentSnapshot> documents;
  FirestoreListView1({this.documents});
  @override
  FirestoreListView1State createState() {
    return new FirestoreListView1State();
  }
}

class FirestoreListView1State extends State<FirestoreListView1> {
  @override
  Widget build(BuildContext context1) {
    return ListView.builder(
        itemCount: widget.documents.length,
        padding: new EdgeInsets.all(1.0),
        itemBuilder: (BuildContext context1, int index) {
          int scoren = widget.documents[index].data['score1'];

          if () {
            return new RaisedButton(
              child: new Text("Submit Your Score",
                  style: new TextStyle(
                      fontSize: 20.0,
                      color: Colors.white,
                      fontFamily: "ChelaOne-Regular")),
              onPressed: (){
              },
            );
          } else {
            return new RaisedButton(
              color: Colors.red,
              child: new Text("no scores found"),
              onPressed: (){

              },
            );
          }
        });
  }
}

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы можете использовать метод containsKey, чтобы проверить, есть ли в данных вашего документа это поле.

    final bool hasScore = widget.documents[index].data.containsKey('Score1');

    if (hasScore) {
                return new RaisedButton(
                  child: new Text("Submit Your Score",
                      style: new TextStyle(
                          fontSize: 20.0,
                          color: Colors.white,
                          fontFamily: "ChelaOne-Regular")),
                  onPressed: (){
                  },
                );
              } else {
                return new RaisedButton(
                  color: Colors.red,
                  child: new Text("no scores found"),
                  onPressed: (){

                  },
                );
              }

Не забудьте сначала проверить, не равен ли ваш data.

0 голосов
/ 03 июля 2018
itemBuilder: (BuildContext context1, int index) {
  int scoren = widget.documents[index]?.data['score1'];

      if (scoren == null) {
        return new RaisedButton(
          child: new Text("Submit Your Score",
              style: new TextStyle(
                  fontSize: 20.0,
                  color: Colors.white,
                  fontFamily: "ChelaOne-Regular")),
          onPressed: (){
          },
        );
      } else {
        return new RaisedButton(
          color: Colors.red,
          child: new Text("no scores found"),
          onPressed: (){

          },
        );
      }
}

Чек scoren == null, потому что получатель карты вернет null, если в вашем документе .

нет баллов.

Я также добавил оператор null-safe к получателю документа: documents[index]?.. (знак вопроса). Это гарантирует, что вы вернете null в scoren вместо того, чтобы пытаться использовать метод получения карты и выдавать исключение.

...