flutter 如何将两个列表传递到另一个屏幕上

lawou6xi  于 2022-12-30  发布在  Flutter
关注(0)|答案(2)|浏览(127)

我想传递给目的地和坐标的列表。我必须把它们分开,因为我必须先抓取数据,然后再对它们进行地理编码。下面是我的代码:

Future<void> getCoordinates()async{
for(int i=1 ; i < destination.length ; i++){
  coordinates = await locationFromAddress('${destination.elementAt(i).destination}');
  location.add(coordinates);
  print('$i $location');
}

}
这里有一个片段去从我的第一个屏幕到第二个屏幕:

return GestureDetector(
                onTap: (){
                  Navigator.of(context).push(
                    MaterialPageRoute(builder: (context) => PlaceInfo(packageModel: destination[index], location: location[index])),
                  );
                },

下面是我的第二个屏幕的片段:

final PackageModel packageModel;
  final Location location;
  PlaceInfo({Key? key,required this.location, required this.packageModel,}):super(key:key);

  @override
  State<PlaceInfo> createState() => _PlaceInfoState();
}

class _PlaceInfoState extends State<PlaceInfo> {

  //late double _latitude = 2.8025;
  //late double _longitude = 101.7989;

  late double _latitude = widget.location.latitude;
  late double _longitude = widget.location.longitude;

当我这样做时,它会在应用程序中显示红色错误,即

type 'List<Location>' is not a subtype of type 'Location'

有人能帮帮忙吗

2lpgd968

2lpgd9681#

可能是根据您的错误,在我看来,一个潜在的解决方案是,当您将参数传递到下一个屏幕时,您需要更改参数的类型,如下所示

Navigator.of(context).push(
                    MaterialPageRoute(builder: (context) => PlaceInfo(packageModel: destination[index], location: (location[index] as Location))),
                  );

您只需要在位置[index]后添加作为位置
另一个解决方案是可以将List位置变量声明为

List<Location> location.....
d6kp6zgx

d6kp6zgx2#

错误在于:location.add(coordinates);.
coordinates本身似乎是List,而您正尝试将其作为元素添加。
尝试首先从coordinates创建一个Location 0bject,然后将该对象添加到列表location中。
希望能有所帮助!

相关问题