我正在编写一个应用程序,它通过 http 请求获取房地产列表的日期。
我使用 future 和 package:http/http.dart 来获取一个 json 数组
Future<List<dynamic>> fetchJson() async {
final response = await http.get('https://brettransley.com/single.json');
return parseHomes(response.body);
}
List<Properties> parseHomes(String responseBody) {
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();
return parsed.map<Properties>((json) => Properties.fromJson(json)).toList();
}
我可以成功提取数据并通过属性类对其进行映射。Future List 可用于使用 FutureBuilder 输出小部件。
final allhomes = fetchJson();
FutureBuilder<List>(
future: allhomes,
builder: (BuildContext jsoncontext, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return (Center(child: CircularProgressIndicator()));
} else {
return (Container(
child: ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext homecontext, index) {
final home = snapshot.data[index];
return buildHome(context, home);
},
),
));
}
},
),
我的问题是我想使用 FutureList 中的数据使用“ Google_Map_flutter ”插件输出地图标记
我的地图代码在这里:
GoogleMap(
zoomGesturesEnabled: true,
mapType: MapType.hybrid,
onMapCreated: _onMapCreated,
// markers:
initialCameraPosition: CameraPosition(
target: _center,
zoom: 15.0,
),
gestureRecognizers: <Factory<OneSequenceGestureRecognizer>>[
new Factory<OneSequenceGestureRecognizer>(
() => new EagerGestureRecognizer(),
),
].toSet(),
markers: Set.from(getGeoCords()),
),
为了输出标记,我需要使用 getGeoCords() 函数来返回列表,但是我的数据在 FutureList 中,我可以按照此处的尝试运行并创建数组:
getGeoCords() {
final List homemarkers = [];
allhomes.then((value) {
value.forEach((element) {
print(element);
homemarkers.add(
Marker(
markerId: MarkerId('myMarker'),
draggable: false,
onTap: () {
print('Marker Tapped');
},
position:
LatLng(double.parse(element.lat), double.parse(element.long)),
),
);
});
});
return homemarkers;
}
该函数成功创建了一个我可以使用的列表,但是因为我们使用的是 Future,所以该函数没有返回任何内容......直到谷歌地图加载之后。
任何人都可以帮助我将 FutureList 转换为能够与google_map_flutter插件一起使用的 List 的解决方案。
我对 Flutter 还很陌生,所以我对事情如何完全运作的理解可能存在差距。