Flutter 2.0:返回类型<List<LatLng>>不是闭包上下文要求的"空"



>我收到错误The return Type <List<LatLng>> isn’t a 'void', as required by the closure's context关于此按钮小部件中的行return polygonList;

Widget _markerButton(BuildContext context) {
return IconButton(
icon: Icon(Icons.favorite, color: _list ? Colors.green : Colors.red),
onPressed: () {
setState(() {
_list = !_list;
numberOfMarkers(latlng)[0];
realtyTap = true;
});
return polygonList;
},
);
}

它以前效果很好。当我切换到 Flutter 2.0 和sdk: "> = 2.12.0 <3.0.0”时出现了此错误。

我查看了有类似困难的人对问题的回答,但这对我没有帮助。

整个页面代码为:

import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:latlong/latlong.dart';

class HomePage extends StatefulWidget {
final Function state;
HomePage(this.state);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
late MapController _mapController;
late LatLng latlng;
List<Marker> markers = [];
List<LatLng> polygonList = [];
bool singleTap = false;
bool _list = false;
double maxZoom = 6.0;
double minZoom = 4.0;
@override
void initState() {
super.initState();
}
Widget _markerButton(BuildContext context) {
return IconButton(
icon: Icon(Icons.favorite, color: _list ? Colors.green : Colors.red),
onPressed: () {
setState(() {
_list = !_list;
});
return polygonList;
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FlutterMap(
mapController: _mapController,
options: MapOptions(
center: LatLng(40.000000, 70.000000),
zoom: 4,
onTap: (latlng) {
if (singleTap) {
setState(() {
if (markers.length == 0) {
markers.add(Marker(
point: latlng,
builder: (context) => _markerButton(context)));
} else {
markers.add(
Marker(
point: latlng,
builder: (ctx) => const Icon(
Icons.fiber_manual_record_rounded,
color: Colors.red,
size: 15.0,
),
),
);
}
polygonList.add(latlng);
});
}
}),
layers: [
TileLayerOptions(
urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
subdomains: ['a', 'b', 'c']),
PolygonLayerOptions(
polygons: [
Polygon(
points: polygonList,
borderStrokeWidth: 3.0,
),
],
),
],
),
);
}
}

这里应该发生什么:如果用户第二次单击他/她开始在地图上构建多边形的点,按钮将更改其颜色,建筑物停止,并返回构建多边形角落中的点列表。

如果您能给我一些有关如何解决此问题的建议,我将不胜感激。

Dart 2.12 添加了更严格的类型检查,以捕获回调返回未使用值的情况。

IconButton.onPressed是一个VoidCallback?;也就是说,如果它不null,它是一个不返回任何内容的函数。

您正在提供一个包含return polygonList;的匿名函数。 该返回值永远不能使用,因此return语句无用。 只需将其删除即可。

最新更新