繁体   English   中英

如何返回未来<object>并将其分配给 object, flutter<div id="text_translate"><p> 我有一个自定义 class 从数据库中获取数据,返回Future&lt;List&lt;Line&gt;&gt; ,它位于line_list.dart文件中:</p><pre class="lang-dart prettyprint-override"> Future&lt;List&lt;Line&gt;&gt; fetchingLinesData() async { List&lt;Line&gt; 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&lt;Station&gt; inLineStations = []; for (var i = 0; i &lt; 100; i++) { if (value["station_$i"].= null) { List&lt;Map&gt; 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; } }</pre><p> 然后在我的main.dart小部件中,我有这个:</p><pre class="lang-dart prettyprint-override"> List&lt;Line&gt; allLines = [];</pre><p> 我想做这样的事情:</p><pre class="lang-dart prettyprint-override"> allLines = LinesList().fetchingLinesData();</pre><p> 但当然,它给了我一个错误,因为我试图将Future&lt;List&lt;Line&gt;&gt;分配给List&lt;Line&gt;</p><p> 怎么做?</p></div></object>

[英]How to return Future<object> and assign it to just object , flutter

我有一个自定义 class 从数据库中获取数据,返回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>

怎么做?

您必须等待未来完成。

allLines = await LinesList().fetchingLinesData();

您只需将下面的代码放入异步 function 使主异步并使您的代码

allLines = await LinesList().fetchingLinesData();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM