将数据从异步函数传递给 futurebuilder

问题描述 投票:0回答:0

这是我第一次使用异步函数来 更新构建器中的数据。所以,我对此有点挣扎。 如此处所示,我想获取新的转换地址 在两张印刷品上,但第一张印刷品显示了想要的结果 但在一个循环中,第二个什么也没显示。 我试图在构建之外使用该功能,但我不知道如何使用。 我的问题是我怎样才能停止那个循环?, 并在地图小部件上获取更新的坐标。

这是我的代码:




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,
                      );
                    },
                  )
                ]);
              }
          ));
    }
  }
flutter dart syncfusion
© www.soinside.com 2019 - 2024. All rights reserved.