dart 尝试访问文档字段时,Flutter/Firebase中存在额外的位置参数

bq3bfh9z  于 2022-12-06  发布在  Flutter
关注(0)|答案(4)|浏览(107)

我尝试从firebase打印特定的用户信息,但每当我尝试调用特定的值(如name)时,总是出现错误,太多位置参数:应为0,但找到1。

getUserState() async{
  String temp;
  final FirebaseAuth auth = FirebaseAuth.instance;   
  final String id = FirebaseFirestore.instance.collection('users').id;
  FirebaseFirestore.instance.collection('users').doc(id).get().then((value){
    temp = value.data('name') as String;
    
  });
gdrx4gfi

gdrx4gfi1#

data是一个不带参数的方法,它返回Map
试试这个:

temp = value.data()!['name'] as String;
qnyhuwrf

qnyhuwrf2#

要从Firebase按值(如name)调用打印特定用户信息,可以使用Firebase数据库查询API。可以使用orderByChild()方法查询数据库并基于特定值检索数据。例如,如果要从Firebase按名称调用打印用户信息,可以使用以下代码:

// Get a reference to the database
    var database = firebase.database();
    
    // Query the database for user information based on name
    var query = database.ref("users").orderByChild("name").equalTo("John Doe");
    
    // Get the user information from the query
    query.once("value", function(snapshot) {
      var userInfo = snapshot.val();
    
      // Print the user information
      console.log(userInfo);
    });
f0ofjuux

f0ofjuux3#

您可以使用.get来读取Map

temp = value.get('name') as String? ?? "" ;
hl0ma9xz

hl0ma9xz4#

如果您需要一个返回包含名称的字符串的函数,您可以如下重构代码:

Future<String?> getUserState(String userId) async {
    final docRef = await FirebaseFirestore.instance.collection('users').doc(userId).get();
    final user = docRef.data();
    return user?['name'];
  }
  • user*:是集合中文档的Map〈String,dynamic〉表示。你可以用它在模型中进行转换,例如fromJson。

如果找到具有所提供ID的任何用户,则返回null

相关问题