【问题标题】:How to get a document's ID from Firestore document Flutter如何从 Firestore 文档 Flutter 中获取文档的 ID
【发布时间】:2020-12-05 06:11:01
【问题描述】:

这是我的代码,几天来一直试图弄清楚它,我基本上想在不知道它是什么的情况下获取特定文档的 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);
              },
            ),
          ],
        ),
      ),
    );
  }
}

【问题讨论】:

  • 如果您帮助他人找出问题所在,您可能会得到更多答案。上面的代码中与您的问题相关的代码行在哪里?你尝试了什么?你遇到了什么错误?

标签: firebase flutter firebase-authentication document


【解决方案1】:

如果您不知道文档的 ID,则必须使用您知道的有关其字段的其他信息来查询它。这是从 Firestore 获取信息的仅有的两种方法 - 通过 ID 获取信息的get(),或通过字段内容查询(或查询整个集合以获取所有内容)。

我建议阅读documentation 以了解查询。 Flutter API 与其他平台非常相似,Firestore 使用 Flutter 的 API 文档为here

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2019-05-05
    • 2022-07-22
    • 2018-09-03
    • 2019-08-02
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多