繁体   English   中英

颤振类型'未来<dynamic> ' 不是类型 'Widget' 错误的子类型</dynamic>

[英]Flutter type 'Future<dynamic>' is not a subtype of type 'Widget' error

我想要做的是从文档中提取一些数据,其中登录用户是来自名为 Repair 的集合的电子邮件。 我为此创建了一个函数。 但是我收到了 - 类型“Future”不是类型“Widget”的子类型 - 错误。

getCustomerRepairLog() async {
    final user = FirebaseAuth.instance.currentUser!;
    var _repairLogs = await FirebaseFirestore.instance.collection('Repair').get();
    for (var eleman in _repairLogs.docs) {
      if (eleman.data()['email']! == user.email) {
        return Container(
          child: Column(
            children: [
              Text("$eleman.data()['description']"),
            ],
          ),
        );
      }
    }
    return Text('Loading');
  }

我想将它用作 Column 中的 getCustomerRepairLog()。 你能帮助我吗?

您需要将 FutureBuilder 用于 future 方法。创建状态变量以避免每次构建状态时都调用它。

final user = FirebaseAuth.instance.currentUser!; //better do a null check 1st
late final _repairLogs = FirebaseFirestore.instance.collection('Repair').get();

你的方法就像

  Widget getCustomerRepairLog() {
    return FutureBuilder(
      future: _repairLogs,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          List<Widget> items = [];
          final data = snapshot.data?.docs;
          if (data == null) return Text("got null");

          for (final eleman in data) {
            if (eleman.data()['email']! == user.email) {
              items.add(Text("${eleman.data()['description']}"));
            }
          }
        return CircularProgressIndicator();
      },
    );
  }

查找有关FutureBuilder的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM