如何在flutter中从云Firestore中获取数据?

Posted

技术标签:

【中文标题】如何在flutter中从云Firestore中获取数据?【英文标题】:How to fetch data from cloud firestore in flutter? 【发布时间】:2021-07-17 11:30:30 【问题描述】:

我想在 Flutter 中从 Firestore 中获取联系方式,例如电话号码、电子邮件地址、网站 URL 以及社交媒体 URL。我完成了编码以直接在应用程序中显示联系方式,但我需要从 firestore 获取数据,因为如果假设我将来需要更改联系方式,这对我有好处。

我的编码

import 'package:cloud_firestore/cloud_firestore.dart';

class AboutPage extends StatelessWidget 
  const AboutPage(Key key) : super(key: key);

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      backgroundColor: LightColor.white,
      appBar: CustomAppBar(
        isBackButton: true,
        title: customTitleText(
          'Contact us',
        ),
      ),
      body: ListView(
        physics: BouncingScrollPhysics(),
        children: <Widget>[
          HeaderWidget(
            'Feel free to contact us',
            secondHeader: true,
          ),
          SettingRowWidget(
            "Phone",
            vPadding: 0,
            showDivider: false,
            onPressed: () 
              Utility.launchURL(///i want to display this url from firestore///
                  "tel:+918889999888");
            ,
          ),
          
          HeaderWidget('Social media'),
          SettingRowWidget("Facebook", showDivider: true, onPressed: () 
            Utility.launchURL( ///i want to display this url from firestore/// 
"https://facebook.com/ecways");
          ),

      HeaderWidget('Website'),
          SettingRowWidget("Open website", showDivider: true, onPressed: () 
            Utility.launchURL( ///i want to display this url from firestore/// 
"https://facebook.com/");
          ),    
          
        ],
      ),
    );
  

我创建了具有集合名称“my_contact”和文档名称“详细信息”的 firestore 数据库,还创建了电话、电子邮件、网站等字段。现在我只想知道如何使用我的编码在我的应用中显示该集合。

【问题讨论】:

能否发一份详细文件里面的截图。因为我想看看你是如何在其中放置字段的。 当然..我加了,请检查一下.. 我将字段添加为字符串类型 好的,我去看看。 【参考方案1】:

flutterfire 现在可以很好地完成此操作。从firestorehttps://firebase.flutter.dev/docs/firestore/usage/#collections--documents获取数据请参考本节

【讨论】:

谢谢你,伙计!我会阅读你发送的完整文件,然后我会尝试..【参考方案2】:

首先你必须改变你的firestore数据库如下

应该有一个名为contacts的数组,里面应该有3张根据你的数据的地图。

然后在你的屏幕类中创建一个列表。

List contacts;

然后创建一个函数来从 firestore 中检索数据。

  Future<List> fetchAllContact() async 
    List contactList = [];
    DocumentSnapshot documentSnapshot =
        await firestore.collection('my_contact').doc('details').get();
    contactList = documentSnapshot.data()['contacts'];
    return contactList;
  

然后在initState函数中调用这个函数。

  @override
  void initState() 
    super.initState();
    fetchAllContact().then((List list) 
      setState(() 
        contacts = list;
      );
    );
  

最后将你的 listView 替换为 listViewBuilder。

Container(
                    child: ListView.builder(
                        padding: EdgeInsets.all(10),
                        itemCount: contacts.length,
                        itemBuilder: (context, index) 
                          return CustomTile(
                            mini: false,
                            onTap: () ,
                            title: Text(
                              contacts[index]['headerTitle'] != null
                                  ? contacts[index]['headerTitle']
                                  : '',
                              style: TextStyle(
                                  color: Colors.white,
                                  fontFamily: "Arial",
                                  fontSize: 19),
                            ),
                            subtitle: Text(
                              contacts[index]['value'] != null
                                  ? contacts[index]['value']
                                  : '',
                              style: TextStyle(
                                color: UniversalVariables.greyColor,
                                fontSize: 14,
                              ),
                            ),
                            leading: Container(
                              constraints:
                                  BoxConstraints(maxHeight: 60, maxWidth: 60),
                              child: Stack(
                                children: <Widget>[
                                  CircleAvatar(
                                    maxRadius: 30,
                                    backgroundColor: Colors.grey,
                                    backgroundImage: NetworkImage(
                                        "https://avatars.githubusercontent.com/u/49371842?v=4"),
                                  ),
                                  Align(
                                    alignment: Alignment.bottomRight,
                                    child: Container(
                                      height: 13,
                                      width: 13,
                                      decoration: BoxDecoration(
                                          shape: BoxShape.circle,
                                          color:
                                              UniversalVariables.onlineDotColor,
                                          border: Border.all(
                                              color:
                                                  UniversalVariables.blackColor,
                                              width: 2)),
                                    ),
                                  )
                                ],
                              ),
                            ),
                          );
                        
                        ),
                  )

我就是这样做的。谢谢...

【讨论】:

我认为这将帮助您以某种方式实现您的目标。 @suppa98, 如何在 firestore 数据库中构建 Step1? 我添加的数据已经被之前的数据覆盖了。

以上是关于如何在flutter中从云Firestore中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中从 Firebase Auth 获取用户 ID?

如何在flutter中从firebase获取数据

React-firestore-hooks 从云 Firestore 中获取数据库记录

如何在 Flutter 中从 Firestore 订购数据,orderBy 订购不正确

如何从云功能中移动 Firestore 文档?

如何在flutter中获取firestore文档的documentid?