Async ждут флаттер пожарной - PullRequest
0 голосов
/ 19 октября 2019

Я хотел бы спросить, что происходит с моим кодом.

Предполагая, что в этом случае поле 'Счетчик' равно 179, как мне сделать свое внешнее обновление myData перед печатью?

    class Test {
      Firestore _firestore = Firestore.instance;
      var myData;

      void getData() async {
        DocumentSnapshot snapshot =
            await _firestore.collection('Counter').document('Counter').get();
        myData = await snapshot.data['Counter'];
        print('inside $myData');
      }

      void checkMyData() {
        myData = 5;
        getData();
        print('outside $myData');
      } 
    }

Консоль:

флаттер: снаружи 5

флаттер: внутри 179

1 Ответ

0 голосов
/ 19 октября 2019

Вы должны заставить getData() вернуть Future следующим образом:

Future getData() async {

Таким образом, вы можете сделать это:

getData().then((value) {
  print('value: $value');
}).catchError((error) {
  print('error: $error');
});

Но вы, вероятно, хотите использовать FutureBuilder, чтобы показать информацию, когда прибывает, как это:

FutureBuilder(
  future: getData(),
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return Text('value: ${snapshot.data}');
    } else if (snapshot.hasError){
      return Text('error: ${snapshot.error}');
    }
    return Text('loading...');
  },
)
...