簡體   English   中英

如何從 Firestore 文檔 Flutter 獲取文檔 ID

[英]How to get a document's ID from Firestore document Flutter

這是我的代碼,幾天來一直試圖弄清楚,我基本上想在不知道它是什么的情況下獲得特定文檔的 ID。 當我將文檔 ID 復制並粘貼到我的代碼中時,它可以工作並且我的數據會更新,但是當我不知道文檔的 ID 時該怎么辦。 請幫助:編碼新手:)

我嘗試了各種方法,但 firebase 文檔令人困惑,遺憾的是不包括 Flutter 文檔。

       enum DegreeType { undergraduate, undergraduateintegrated, masters }
DocumentReference docRef =  Firestore.instance.collection('User').document();



class FirestoreID {
 String myId = docRef.documentID;
  FirestoreID({this.myId});
}



class SelectDegreeTypeScreen extends StatefulWidget {
  static const String id = 'selectdegreetypescreen';
  @override
  _SelectDegreeTypeScreenState createState() => _SelectDegreeTypeScreenState();
}

class _SelectDegreeTypeScreenState extends State<SelectDegreeTypeScreen> {

  DegreeType degreeType = DegreeType.undergraduate;
  final _auth = FirebaseAuth.instance;
  final _firestore = Firestore.instance;
  FirebaseUser loggedInUser;
  FirestoreID id;




  @override
  void initState() {
    super.initState();
    getCurrentUser();
  }

  void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      if (user != null) {
        loggedInUser = user;
        String uid = user.uid;
        print(loggedInUser.email);
        print(loggedInUser.uid);
      }
    } catch (e) {
      print(e);
    }
  }




  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      body: Padding(
        padding: EdgeInsets.only(left: 20.0, right:20, bottom: 50),
        child: Column(
          children: <Widget>[
            TopBarBackArrow(),
            LinearPercentIndicator(
              width: MediaQuery.of(context).size.width - 50,
              animation: true,
              lineHeight: 15.0,
              animationDuration: 1000,
              percent: 0.16,
              linearStrokeCap: LinearStrokeCap.roundAll,
              progressColor: Color(0xFF77a3cc),
            ),
            Padding(
              padding: EdgeInsets.only(top:20.0),
              child: Text(
                'Select your degree type.',
                style: kAppText,
              ),
            ),
            Expanded(
              child:ListView(
                physics: NeverScrollableScrollPhysics(),
                children: <Widget>[
                  ListTile(
                    title: const Text('Undergraduate', style: kAppTextsmallest,),
                    leading: Radio(
                      activeColor: Color(0xFF77a3cc),
                      value: DegreeType.undergraduate,
                      groupValue: degreeType,
                      onChanged: (DegreeType value)  {
                        setState(()  {
                          degreeType = value;
                         _firestore.collection('User').document(id.myId).updateData({'degree_type': 'undergrad'});
                        });
                      },
                    ),
                  ),
                  ListTile(
                    title: const Text('Undergraduate with Integrated Masters',  style: kAppTextsmallest),
                    leading: Radio(
                      activeColor: Color(0xFF77a3cc),
                      value: DegreeType.undergraduateintegrated,
                      groupValue: degreeType,
                      onChanged: (DegreeType value) {
                        setState(() {
                          degreeType = value;
                         _firestore.collection('User').document(id.myId).updateData({'degree_type': 'integrated'});
                        });
                      },
                    ),
                  ),
                  ListTile(
                    title: const Text('Masters',  style: kAppTextsmallest),
                    leading: Radio(
                      activeColor: Color(0xFF77a3cc),
                      value: DegreeType.masters,
                      groupValue: degreeType,
                      onChanged: (DegreeType value) {
                        setState(() {
                          degreeType = value;
                        _firestore.collection('User').document(id.myId).updateData({'degree_type': 'masters'});
                        });
                      },
                    ),
                  ),
                ],
              ),
            ),
            ReusableButton(
              title: 'Next',
              colour: Color(0xff77a3cc),
              onPressed:() {
                  Navigator.pushNamed(context, SelectedDegreeYears.id);
              },
            ),
          ],
        ),
      ),
    );
  }
}

如果您不知道文檔的 ID,則必須使用您知道的有關其字段的其他信息來查詢它。 這是從 Firestore 獲取信息的僅有的兩種方法 - 按 ID get() ,或按字段內容查詢(或查詢整個集合以獲取所有內容)。

我建議閱讀 文檔以了解查詢。 flutter API 與其他平台非常相似,使用 Flutter 的 Firestore 的 API 文檔在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM