Как вернуть Future <object>и присвоить его просто объекту, флаттеру - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть собственный класс, который извлекает данные из базы данных, который возвращает Future<List<Line>>, который находится в line_list.dart файлах:

  Future<List<Line>> fetchingLinesData() async {
    List<Line> lineList = [];
    var databasesPath = await getDatabasesPath();
    String path = join(databasesPath, 'main.db');
    Database database = await openDatabase(path, version: 1);
    database.transaction((tnx) async {
      dbRef.child('line').once().then((DataSnapshot dataSnapshot) async {
        dataSnapshot.value.forEach((key, value) async {
          List<Station> inLineStations = [];
          for (var i = 0; i < 100; i++) {
            if (value["station_$i"] != null) {
              List<Map> stations = await tnx.rawQuery("SELECT * FROM Station");
              stations.forEach((s) {
                if (s['stationName'] == value["station_$i"]) {
                  Station stationInstance = Station(
                      key: s['key'],
                      cityName: s['cityName'],
                      stationName: s['stationName'],
                      stationLongitude: s['stationLongitude'],
                      stationLatitude: s['stationLatitude']);
                  inLineStations.add(stationInstance);
                }
              });
            }
          }
          Line lineInstance = Line(
              startStation: value['start_station'],
              endStation: value['end_station'],
              inLineStations: inLineStations,
              notes: value['notes'],
              price: value['price'],
              transportationType: value['transportation_type']);
          lineList.add(lineInstance);
        });
      });
    });
    return lineList;
  }
}

и затем в моем виджете main.dart, у меня есть это :

List<Line> allLines = [];

Я хочу сделать что-то вроде этого:

allLines = LinesList().fetchingLinesData();

Но, конечно, это дает мне ошибку, так как я пытаюсь присвоить Future<List<Line>> для List<Line>

как это сделать?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Вы просто поместите приведенный ниже код в asyn c, сделайте main asyn c и сделайте свой код

allLines = await LinesList().fetchingLinesData();
1 голос
/ 10 апреля 2020

Вы должны ждать будущего, чтобы закончить.

allLines = await LinesList().fetchingLinesData();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...