Чтение данных из Firebase - Flutter - PullRequest
0 голосов
/ 18 января 2020

Я хотел бы изменить String на что-то другое для чтения данных из базы данных.

У меня есть следующий код:

enum Answers{GS,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']); this. Пожалуйста, помогите мне!

Я придерживаюсь этого вопроса в течение нескольких дней.

1 Ответ

0 голосов
/ 28 января 2020

Кажется, что это показывает "kaleci1", потому что _setValue(selected) только читает значение переменной, а не valeu из базы данных.

Чтобы вы вернули это значение, вы потребуется вернуть значение базы данных и добавить его в новую (или ту же переменную), чтобы вы могли использовать ее в функции _setValue().

Я считаю, что код должен выглядеть примерно так:

enum Answers{GS,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;

    } 

Пожалуйста, дайте мне знать, как это происходит!

...