Return 来自函数调用的 Flutter 值
Return Flutter Value from function call
我对在 Firebase 中创建项目的未来进行了以下函数调用,我希望实现的是 return 创建项目后的文档 ID。到目前为止,我可以获得 ID,但我不知道如何 return 将其返回到调用它的小部件。
我应该补充一点,这个功能和未来在 2 个不同的文件中
函数
print("Task Details");
Task task = Task(
title: _title,
desc: _desc,
ownerId:
Provider.of<UserData>(context, listen: false).currentUserId,
);
// Database update
DatabaseService.createTask(task);
未来
static Future<void> createTask(Task task) async {
await tasksRef
.add({
'title': task.title,
'desc': task.desc,
'budget': task.budget,
'authorId': task.ownerId,
'due': task.due,
'location': task.location,
'status': 'draft',
'open': true,
'timestamp': task.timestamp,
})
.then((value) => print("Task Added ${value.id}"))
.catchError((error) => print("Failed to add task: $error"));
}
问题不在于获取 ID,而在于它是一个异步操作。你不能return现在还没有确定的东西。
但是因为你已经return一个Future
(它封装了一些还不一定发生的事情),你可以return一个Future<String>
来捕获文档编号:
static Future<String> createTask(Task task) async {
var docRef = await tasksRef
.add({
'title': task.title,
'desc': task.desc,
'budget': task.budget,
'authorId': task.ownerId,
'due': task.due,
'location': task.location,
'status': 'draft',
'open': true,
'timestamp': task.timestamp,
});
return docRef.id;
}
然后您可以 await
调用 createTask
,或者像您一样使用 then
块。例如:
var newDocId = await DatabaseService.createTask(task);
如果您想在 UI 中显示新文档 ID,您可以在小部件树中使用 FutureBuilder
将 Future<String>
解包为 String
.
我对在 Firebase 中创建项目的未来进行了以下函数调用,我希望实现的是 return 创建项目后的文档 ID。到目前为止,我可以获得 ID,但我不知道如何 return 将其返回到调用它的小部件。 我应该补充一点,这个功能和未来在 2 个不同的文件中
函数
print("Task Details");
Task task = Task(
title: _title,
desc: _desc,
ownerId:
Provider.of<UserData>(context, listen: false).currentUserId,
);
// Database update
DatabaseService.createTask(task);
未来
static Future<void> createTask(Task task) async {
await tasksRef
.add({
'title': task.title,
'desc': task.desc,
'budget': task.budget,
'authorId': task.ownerId,
'due': task.due,
'location': task.location,
'status': 'draft',
'open': true,
'timestamp': task.timestamp,
})
.then((value) => print("Task Added ${value.id}"))
.catchError((error) => print("Failed to add task: $error"));
}
问题不在于获取 ID,而在于它是一个异步操作。你不能return现在还没有确定的东西。
但是因为你已经return一个Future
(它封装了一些还不一定发生的事情),你可以return一个Future<String>
来捕获文档编号:
static Future<String> createTask(Task task) async {
var docRef = await tasksRef
.add({
'title': task.title,
'desc': task.desc,
'budget': task.budget,
'authorId': task.ownerId,
'due': task.due,
'location': task.location,
'status': 'draft',
'open': true,
'timestamp': task.timestamp,
});
return docRef.id;
}
然后您可以 await
调用 createTask
,或者像您一样使用 then
块。例如:
var newDocId = await DatabaseService.createTask(task);
如果您想在 UI 中显示新文档 ID,您可以在小部件树中使用 FutureBuilder
将 Future<String>
解包为 String
.