type'Future 不是'String'类型的子类型

问题描述 投票:0回答:1

所以我试图从我的Firestore文档中检索数据,这是一封电子邮件我不明白从Firestore检索数据时如何将数据另存为字符串。帮助请。

获取错误:在结果上,类型'Future不是类型'String'的子类型:getEmail()PS:即时通讯新手我的代码:

getEmail() async{
    String _email = (await FirebaseAuth.instance.currentUser()).email;
    return _firestore.collection('users').document(_email).collection('met_with').document('email').get();
  }

...

children: <Widget>[
                    BottomSheetText(
                        question: 'Email', result:getEmail()),
                    SizedBox(height: 5.0),
....
string flutter dart future subtype
1个回答
0
投票

..document('email)'.get()实际上将返回Future<DocumentSnapshot>。因此,getEmail()不返回String

您需要从DocumentSnapshot中获取数据:

Future<String> getEmail() async {
    String _email = (await FirebaseAuth.instance.currentUser()).email;
    DocumentSnapshot snapshot = await _firestore.collection('users')
      .document(_email)
      .collection('met_with')
      .document('email')
      .get();
    // print("data: ${snapshot.data}"); // might be useful to check
    return snapshot.data['email']; // or another key, depending on how it's saved
  }

有关更多信息,请查看API reference中的文档

现在,getEmail()是一个异步函数。从窗口小部件树中调用它可能不是您要处理的方式。您需要等待getEmail()的结果,然后才能在用户界面中使用它。 FutureBuilder可能会帮助:

children: <Widget>[
  FutureBuilder<String>(
    future: getEmail(),
    builder: (context, snapshot) {
      if(!snapshot.hasData) {
        return CircularProgressIndicator(); // or null, or any other widget
      }
      return BottomSheetText(question: 'Email', result: snapshot.data);
    },
  ),
  SizedBox(height: 5.0),
  ... //other
],
© www.soinside.com 2019 - 2024. All rights reserved.