【问题标题】:Return Flutter Value from function call从函数调用返回 Flutter 值
【发布时间】:2021-10-17 21:53:21
【问题描述】:

我对在 Firebase 中创建项目的未来进行了以下函数调用,我希望实现的是在创建项目后返回文档 ID。从到目前为止我能够实现的目标中,我可以获得 ID,但我不知道如何将它返回给调用它的小部件。 我应该补充一点,这个函数和未来在 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"));
  }

【问题讨论】:

    标签: flutter dart google-cloud-firestore future


    【解决方案1】:

    问题不在于获取 ID,而在于它是一个异步操作。您不能现在退回尚未确定的内容。

    但是既然你已经返回了一个Future(它封装了一些还没有发生的事情),你可以返回一个Future&lt;String&gt;来捕获文档ID:

    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,可以在小部件树中使用 FutureBuilderFuture&lt;String&gt; 解包为 String

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2022-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多