Flutter类型“Future< dynamic>”不是类型“Widget”错误的子类型

vwoqyblh  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(186)

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

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');
  }

我想在列中使用它作为getCustomerRepairLog()。您能帮助我吗?

cu6pst1q

cu6pst1q1#

您需要为future方法使用FutureBuilder。请创建状态变量以避免每次生成状态时都重新调用。

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的信息

相关问题