在 Flutter 中将 Firebase 数据作为 Listview 构建器获取

Posted

技术标签:

【中文标题】在 Flutter 中将 Firebase 数据作为 Listview 构建器获取【英文标题】:fetch Firebase data to as Listview builder in flutter 【发布时间】:2021-09-04 15:32:31 【问题描述】:

有人可以帮我吗,我有实时 Firebase 图像的名字簿列表,每本书都有一个整数 ID,所以当我尝试从 firebase 获取数据时,它会给我一个没有任何数据的白屏。 但是当我在终端中打印出获取的结果时,我看到了结果,我检查了所有教程,但所有教程都使用 firebase 中的随机 id。 这是我的代码:

class DetailsList extends StatefulWidget 
  final List<DetailScreen> listSection;
  final String bName;

  const DetailsList( this.listSection,@required this.bName) ;
  @override
  _DetailsListState createState() => _DetailsListState();


class _DetailsListState extends State<DetailsList> 
  @override
  Widget build(BuildContext context) 
    //var controller = IndexedScrollController();
    Size size = MediaQuery.of(context).size;
    return Expanded(
        //flex: 4,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisSize: MainAxisSize.max,
          children: [
            FutureBuilder(
              future:snapvalue(widget.bName),
                builder: (context,snapshot)
              if(snapshot.hasData)
              print(snapshot.connectionState);
              print(snapshot.hasData);
                return CircularProgressIndicator();
              else return ListView.builder(
                itemCount: 10,
                  itemBuilder: (context,index)
                    print(snapshot.data[index].title);
                //return SectionCard(snapshot: snapshot.data[index]);
                //     return Flexible(
                //       child: Card(child: ListTile(
                //         leading: ImageCard(imageSource: snapshot.data.image.toString(),),
                //         title: snapshot.data[index].title,
                //         subtitle: snapshot.data[index].pdf,
                //       ),),
                //     );
              );
            )
          ],
        ),
      );
  

以及从 Firebase 代码中获取数据:

Future snapvalue(String child2) 
  List<String>detailslist;
  DatabaseReference data = dbRef.child(child2);
  data.once().then((DataSnapshot snap) 
    var key= snap.key.toString();
    var value= snap.value;
    if (value != null) 
      print("key"+key);
      print("value"+snap.value.toString());

      return value;
else print("No Data");
  );

【问题讨论】:

【参考方案1】:

您的问题是 UI 问题,因为您在列内使用 listview,并且它们都垂直交换。在列表视图中使用shrinkwrap: true

甚至 listtiles 在列表视图中水平扩展至无穷大。

SizedBox 包裹你的listtiles,并给盒子宽度size.width * 0.8

因为您已经有一个Size size 变量。

这应该可行。

Card(child: SizedBox(width: size.width* 0.8, 
                      child: ListTile(
                       leading: ImageCard(imageSource: snapshot.data.image.toString(),),
                        title: snapshot.data[index].title,
                        subtitle: snapshot.data[index].pdf,
                      ),),)

【讨论】:

以上是关于在 Flutter 中将 Firebase 数据作为 Listview 构建器获取的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter中将标记从firebase(真实数据库)检索到新的google maps api

如何在 Flutter 移动应用中将 Azure AD 用户登录到 Firebase?

如何在flutter中将用户数据保存在云Firestore中

Flutter websockets 在本地网络中工作,但在 Firebase 托管中不工作

如何在firebase Flutter中将2个用户链接在一起

在android studio中将firebase添加到flutter时出错:插件项目:firebase_core_web未找到。请更新 settings.gradle [重复]