这是我第一次使用异步函数来 更新构建器中的数据。所以,我对此有点挣扎。 如此处所示,我想获取新的转换地址 在两张印刷品上,但第一张印刷品显示了想要的结果 但在一个循环中,第二个什么也没显示。 我试图在构建之外使用该功能,但我不知道如何使用。 我的问题是我怎样才能停止那个循环?, 并在地图小部件上获取更新的坐标。
这是我的代码:
class MapScreen extends StatefulWidget {
MapScreen({Key? key}) : super(key: key);
@override
State<StatefulWidget> createState() => MapExample();
}
// Class which parse the data from database
class Marker {
String country;
late double lat;
late double lon;
Marker(
{required this.country,
required this.lat,
required this.lon});
}
class MapExample extends State<MapScreen> {
// reference to our single class that manages the database
final SupabaseManger supabaseManger = SupabaseManger();
String add = "";
late double address = 0.0;
late double addi = 0.0;
late Future<dynamic> getData;
late Future<dynamic> getCoords;
late List<Marker>_markers;
@override
initState() {
_markers = <Marker>[];
getData = supabaseManger.getMarkers();
super.initState();
}
@override
void dispose() {
_markers.clear();
super.dispose();
}
// Get the markers to a local collection
_fromAddtoLatLong(String add) async {
List<Location> locations = await locationFromAddress(add);
List<Marker> _markers = <Marker>[];
_markers.clear;
for (int i = 0; i < locations.length; i++) {
var loca = locations.iterator;
while (loca.moveNext()) {
setState(() {
address = loca.current.longitude;
addi = loca.current.latitude;
});
}
_markers.add(Marker(
country: add,
lat: address,
lon: addi));
// print(_markers[i].lat);
}
return _markers;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body:
FutureBuilder(
future: getData,
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
print("_userProfile returns null!");
return const Center(child: CircularProgressIndicator());
}
if (snapshot.hasData &&
snapshot.connectionState != ConnectionState.done) {}
final todos = snapshot.data!;
for (var i = 0; i < todos.lentgh; i++) {
add = todos[i]["address"];
getCoords = _fromAddtoLatLong(todos[i]["address"]);
getCoords;
}
// print(address);
return SfMaps(layers: [
MapTileLayer(
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
initialMarkersCount: _markers.length,
markerBuilder: (BuildContext context,
int index) {
print(address);
return MapMarker(
latitude: _markers[index].lat,
longitude: _markers[index].lon,
iconColor: Colors.blue,
);
},
)
]);
}
));
}
}