Область видимости переменных - PullRequest
0 голосов
/ 26 апреля 2020

Я отлаживаю следующий код и по какой-то причине, несмотря на то, что элементы добавляются в список returnD C, список returnD C всегда пуст. Это может быть проблема с областью видимости, но я не уверен.

class _MyGridState extends State<MyGrid> {
  @override
  Widget build(BuildContext context) {
    return DataTable(columns: getDataColumnTest(), rows: [
      DataRow(cells: [
        DataCell(Text('sdf')),
        DataCell(Text('sdf')),
      ]),

    ]);
  }
Future List<DataColumn> getDataColumnTest() async {
    dbutils db = dbutils();
    List<DataColumn> returnDC = List<DataColumn>();

    AuthResult results = await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: 'XXX@gmail.com', password: 'WOWOW');
    DocumentSnapshot ds = await Firestore.instance.document(
        'Settings' + '/' + 'hey').get();
    ds.data.map((f, d) {
      DataColumn dc =
      DataColumn(label: Text(f.toString()), tooltip: d.toString());
      returnDC.add(dc);
    });

    return returnDC;
  }

Любой помощник будет высоко оценен Аси

1 Ответ

0 голосов
/ 26 апреля 2020

Попробуйте следующее:

Future<List<DataColumn>> getDataColumnTest() async{

    dbutils db = dbutils();
    List<DataColumn> returnDC = List<DataColumn>();

    AuthResult results = await FirebaseAuth.instance.signInWithEmailAndPassword(email: 'XXX@gmail.com', password: 'WOWOW');
      DocumentSnapshot ds = await Firestore.instance.document('Settings' + '/' + 'hey').get();
        ds.data.map((f, d) {
          DataColumn dc =
              DataColumn(label: Text(f.toString()), tooltip: d.toString());
          returnDC.add(dc);
        });
      });
    });
    return returnDC;
  }

API является асинхронным, поэтому вам нужно использовать async и await для ожидания получения данных, а затем вы можете вернуть список.


Поскольку это метод build, вы можете использовать FutureBuilder:

            FutureBuilder(
              future:
                  getDataColumnTest(), 
             builder: (BuildContext context, AsyncSnapshot<DataColumn> snapshot) {
                if (snapshot.hasData) {
                  return Text(snapshot.data);
                } else if (snapshot.hasError) {
                  return Text("${snapshot.error}");
                }

                // By default, show a loading spinner.
                return CircularProgressIndicator();
              },
            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...