Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Flatter Firestore文档获取返回空值_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase Flatter Firestore文档获取返回空值

Firebase Flatter Firestore文档获取返回空值,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正在尝试使用以下代码从Firestore集合获取文档: firebase_service.dart: class FirebaseService { final firestoreInstance = FirebaseFirestore.instance; final FirebaseAuth auth = FirebaseAuth.instance; Map<String, dynamic> getProfile(String uid) { firestor

我正在尝试使用以下代码从Firestore集合获取文档:

firebase_service.dart:

class FirebaseService {
  final firestoreInstance = FirebaseFirestore.instance;
  final FirebaseAuth auth = FirebaseAuth.instance;

  Map<String, dynamic> getProfile(String uid) {
    firestoreInstance.collection("Artists").doc(uid).get().then((value) {
      return (value.data());
    });
  }
}
类FirebaseService{
最终firestoreInstance=FirebaseFirestore.instance;
final FirebaseAuth auth=FirebaseAuth.instance;
映射getProfile(字符串uid){
firestoreInstance.collection(“艺术家”).doc(uid.get().then((值){
返回值(value.data());
});
}
}
home_view.dart:

Map<String, dynamic> profile =
        firebaseService.getProfile(auth.currentUser.uid);
地图配置文件=
firebaseService.getProfile(auth.currentUser.uid);

单步执行代码时,配置文件变量在
home\u view.dart
中为空,但firebase\u service.dart中的
value.data()
包含映射。是否有理由不在主视图中返回此值。dart?

这是一个
异步操作,您必须等待其值


作为参考,您可以查看有关propper身份验证和CRUD操作如何在Firebase中使用颤振进行的文档。

这是一个
异步
操作,您必须
等待它的值


作为参考,您可以查看有关propper身份验证和CRUD操作如何在Firebase中使用颤振进行的文档。

您的代码需要进行一些编辑,因为
getProfile
函数是
async

class FirebaseService {
  final firestoreInstance = FirebaseFirestore.instance;
  final FirebaseAuth auth = FirebaseAuth.instance;
  
  // set the return type to Future<Map<String, dynamic>>
  Future<Map<String, dynamic>> getProfile(String uid) async { // insert async here
    /// insert a return and await here
    return await firestoreInstance.collection("Artists").doc(uid).get().then((value) =>
      return value.data(); // the brackets here aren't needed, so you can remove them
    });
  }
}
如果您计划使用
getProfile
功能,我建议您使用
FutureBuilder
。 在您的
home\u视图中。dart
build
函数编写以下内容:

return FutureBuilder(
future: firebaseService.getProfile(auth.currentUser.uid),
builder: (context, snapshot){
if (!snapshot.hasData){
return Center(child: CircularProgressIndicator(),);
}

final Map<String, dynamic> profile = snapshot.data.data();

return YourWidgets();
});
返回FutureBuilder(
future:firebaseService.getProfile(auth.currentUser.uid),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回中心(子项:CircularProgressIndicator(),);
}
最终地图配置文件=snapshot.data.data();
返回您的widgets();
});
现在你不需要写:

Map<String, dynamic> profile = await
        firebaseService.getProfile(auth.currentUser.uid);
Map profile=wait
firebaseService.getProfile(auth.currentUser.uid);

您的代码需要进行一些编辑,因为
getProfile
函数是
async

class FirebaseService {
  final firestoreInstance = FirebaseFirestore.instance;
  final FirebaseAuth auth = FirebaseAuth.instance;
  
  // set the return type to Future<Map<String, dynamic>>
  Future<Map<String, dynamic>> getProfile(String uid) async { // insert async here
    /// insert a return and await here
    return await firestoreInstance.collection("Artists").doc(uid).get().then((value) =>
      return value.data(); // the brackets here aren't needed, so you can remove them
    });
  }
}
如果您计划使用
getProfile
功能,我建议您使用
FutureBuilder
。 在您的
home\u视图中。dart
build
函数编写以下内容:

return FutureBuilder(
future: firebaseService.getProfile(auth.currentUser.uid),
builder: (context, snapshot){
if (!snapshot.hasData){
return Center(child: CircularProgressIndicator(),);
}

final Map<String, dynamic> profile = snapshot.data.data();

return YourWidgets();
});
返回FutureBuilder(
future:firebaseService.getProfile(auth.currentUser.uid),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回中心(子项:CircularProgressIndicator(),);
}
最终地图配置文件=snapshot.data.data();
返回您的widgets();
});
现在你不需要写:

Map<String, dynamic> profile = await
        firebaseService.getProfile(auth.currentUser.uid);
Map profile=wait
firebaseService.getProfile(auth.currentUser.uid);

我认为这不是等待
未来
中的值的最佳方式:
返回等待firestoreInstance.collection(“Artists”).doc(uid.get()。然后((value)=>return value.data();//这里不需要括号,所以可以删除它们})。我认为您应该简单地使用:
return await firestoreInstance.collection(“艺术家”).doc(uid.get()
。我认为这不是等待
未来值的最佳方式:
返回等待firestoreInstance.collection(“Artists”).doc(uid.get()。然后((value)=>返回值.data();//这里不需要括号,所以可以删除它们})。我认为您应该简单地使用:
return await firestoreInstance.collection(“艺术家”).doc(uid.get()