从 Firebase 读取数据 - Flutter

Posted

技术标签:

【中文标题】从 Firebase 读取数据 - Flutter【英文标题】:Reading data from Firebase - Flutter 【发布时间】:2020-05-05 03:58:34 【问题描述】:

我想将 String 更改为其他内容,以便从 firebase 读取数据。

我有以下代码:

enum AnswersGS,FB

String _value = ''; //Probably, String should be changed. 

void _setValue(String value) => setState(() => _value = value); ////Probably, String should be changed.

Future kaleciSec(BuildContext context) async 
    switch(
    await showDialog(
...
...
                           StreamBuilder(
      stream: Firestore.instance.collection('GS').snapshots(),
      builder: (context, snapshot)
        if(!snapshot.hasData) return Center (child: CircularProgressIndicator());
        return Column(

                crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
                      ListTile(
            onTap: ()Navigator.pop(context, Answers.GS);, //selecting GS.
            title: Text(snapshot.data.documents[0]['kaleci1'], //showing data from DB

             ),
          ),
           Divider(
                    color: Colors.grey,),

                      ListTile(
            onTap: ()Navigator.pop(context, Answers.FB);,
            title: Text(snapshot.data.documents[0]['kaleci2'],
             ),

          ],
        );


      ,
    ),      
                     ],
                     ),
    )
    )    


               
      case Answers.GS:
      _setValue('GS'); //I would like connect database here.
      break;
      case Answers.FB:
      _setValue('FB'); //I would like connect database here.
      break;

     

我的代码可以正常工作。但是,我需要显示选择的内容。基本上,我想将_setValue('GS'); 更改为_setValue(snapshot.data.documents[0]['kaleci1']); 这样的东西。请帮帮我!

我在这个问题上坚持了几天。

【问题讨论】:

既然您已经在使用来自title: Text(snapshot.data.documents[0]['kaleci2'], 文档的数据,那么是什么阻止您在调用_setValue() 时使用它? 用户将选择 kaleci1 或 kaleci2。我想跟踪选择了哪一个。在这种情况下,我这个编码有问题吗? 好的。因此,您将创建一个变量来保存用户选择的内容(比如selected = 'kaleci1'),然后在访问文档中的数据时使用它(snapshot.data.documents[0][selected])。 我加入了var selected = 'kaleci1'; 并更新了snapshot.data.documents[0][selected]。然后,_setValue(selected);。但是,当我选择 kaleci1 时,它会写成 kaleci1。我想显示数据,比如 kaleci1 是 Frank。它应该显示 Frank,而不是 kaleci1。 【参考方案1】:

这似乎显示了“kaleci1”,因为_setValue(selected) 只是从数据库中读取变量的值而不是值。

要在此处返回值,您需要返回数据库的值并将其添加到新的(或相同的变量)中,以便您可以在 _setValue() 函数中使用。

我相信代码应该是这样的:

enum AnswersGS,FB

String _value = ''; //Probably, String should be changed. 

var selected = 'kaleci1';
var valueDB;

void _setValue(String value) => setState(() => _value = value); ////Probably, String should be changed.

Future kaleciSec(BuildContext context) async 
    switch(
    await showDialog(
...
...
                           StreamBuilder(
      stream: Firestore.instance.collection('GS').snapshots(),
      builder: (context, snapshot)
        if(!snapshot.hasData) return Center (child: CircularProgressIndicator());
        return Column(

                crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
                      ListTile(
            onTap: ()Navigator.pop(context, Answers.GS);, //selecting GS.
            title: Text(snapshot.data.documents[0][selected], //showing data from DB
            valueDB = snapshot.data.documents[0][selected]
             ),
          ),
           Divider(
                    color: Colors.grey,),

                      ListTile(
            onTap: ()Navigator.pop(context, Answers.FB);,
            title: Text(snapshot.data.documents[0][selected],
            valueDB = snapshot.data.documents[0][selected]
             ),

          ],
        );


      ,
    ),      
                     ],
                     ),
    )
    )    


               
      case Answers.GS:
      _setValue(valueDB); //I would like connect database here.
      break;
      case Answers.FB:
      _setValue(valueDB); //I would like connect database here.
      break;

     

请告诉我这是怎么回事!

【讨论】:

以上是关于从 Firebase 读取数据 - Flutter的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:无法从 firebase 读取数据。方法 '[]' 在 null 错误上被调用

无法从Firebase数据库中读取数据 - Flutter

Flutter:在读取 Firebase 数据时进行异步操作

Firebase、Flutter - 读取、检索过滤后的数据

Flutter Web和Firebase身份验证TypeError:无法读取未定义的属性'app'

在 Flutter 中从 Firebase 读取数组 [重复]