【问题标题】:Flutter - Trying to use a void Function to return a StringFlutter - 尝试使用 void 函数返回字符串
【发布时间】:2019-11-22 07:51:19
【问题描述】:

我正在尝试使用函数返回一个字符串,但我不断收到 '必须向文本小部件提供非空字符串。 'package:flutter/src/widgets/text.dart': 断言失败:第 269 行 pos 10: 'data != null''

这是我的字符串函数:

test<String>(String callsign) {
    Firestore.instance
        .collection('Manning')
        .getDocuments()
        .then((QuerySnapshot snapshot) {
      snapshot.documents.forEach((f) {
        if (f.data.containsKey('Paramedic') && f.documentID == callsign) {
          return f.data['Paramedic'];
        } else if (f.data.containsKey('Medic') && f.documentID == callsign) {
          return f.data['Medic'];
        } else if (f.data.containsKey('Driver') && f.documentID == callsign) {
          return f.data['Driver'];
        } else if (f.data.containsKey('Attachment') &&
            f.documentID == callsign) {
          return f.data['Attachment'];
        }
      });
    });
  }

我尝试返回一个 Future,但它不能放在 Text 小部件中。

【问题讨论】:

  • 欢迎来到异步编程的世界。您将需要一个 FutureBuilder 那里。
  • 或者在你的有状态小部件中定义一个字符串参数,使用setState在上面显示的函数中设置它的值,并检查它在build中的值以返回一个Text小部件或一个如果您还没有字符串值,则为占位符。

标签: firebase flutter dart


【解决方案1】:

你实际上并没有返回任何东西。

你有两种方法:

最好的方法是返回一个 future 并在 FutureBuilder 中使用它

将回调传递给函数并在回调调用时更新一些状态,例如:

test<String>(String callsign, void Function(String) callback) {
  Firestore.instance
    .collection('Manning')
    .getDocuments()
    .then((QuerySnapshot snapshot) {
    snapshot.documents.forEach((f) {
      if (f.data.containsKey('Paramedic') && f.documentID == callsign) {
        callback(f.data['Paramedic']);
      } else if (f.data.containsKey('Medic') && f.documentID == callsign) {
        callback(f.data['Medic']);
      } else if (f.data.containsKey('Driver') && f.documentID == callsign) {
        callback(f.data['Driver']);
      } else if (f.data.containsKey('Attachment') &&
        f.documentID == callsign) {
        callback(f.data['Attachment']);
      }
    }));
  });
}

并作为回调传递

test("", (value) => setState(...))

在有状态的小部件中

【讨论】:

    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 2017-02-08
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2018-05-19
    • 2020-08-17
    相关资源
    最近更新 更多